Jdbc-streaming-data

提供:Dev Guides
移動先:案内検索

JDBC-ASCIIおよびバイナリデータのストリーミング

PreparedStatementオブジェクトには、入力および出力ストリームを使用してパラメーターデータを提供する機能があります。 これにより、CLOBやBLOBデータ型などの大きな値を保持できるデータベース列にファイル全体を配置できます。

データをストリーミングするために使用できる次の方法があります-

  • * setAsciiStream():*このメソッドは、大きなASCII値を提供するために使用されます。
  • * setCharacterStream():*このメソッドは、大きなUNICODE値を提供するために使用されます。
  • * setBinaryStream():*このメソッドは、大きなバイナリ値を提供するために使用されます。

setXXXStream()メソッドには、パラメータープレースホルダーに加えて、追加のパラメーターであるファイルサイズが必要です。 このパラメーターは、ストリームを使用してデータベースに送信するデータの量をドライバーに通知します。

XMLファイルXML_Data.xmlをデータベーステーブルにアップロードするとします。 ここにこのXMLファイルの内容があります-

<?xml version="1.0"?>
<Employee>
<id>100</id>
<first>Zara</first>
<last>Ali</last>
<Salary>10000</Salary>
<Dob>18-08-1978</Dob>
<Employee>

このXMLファイルは、この例を実行するのと同じディレクトリに保管してください。

この例では、データベーステーブルXML_Dataを作成し、ファイルXML_Data.xmlをこのテーブルにアップロードします。

JDBCExample.javaで次の例をコピーして貼り付け、次のようにコンパイルして実行します-

//Import required packages
import java.sql.*;
import java.io.*;
import java.util.*;

public class JDBCExample {
  //JDBC driver name and database URL
   static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
   static final String DB_URL = "jdbc:mysql://localhost/EMP";

  // Database credentials
   static final String USER = "username";
   static final String PASS = "password";

   public static void main(String[] args) {
   Connection conn = null;
   PreparedStatement pstmt = null;
   Statement stmt = null;
   ResultSet rs = null;
   try{
     //Register JDBC driver
      Class.forName("com.mysql.jdbc.Driver");

     //Open a connection
      System.out.println("Connecting to database...");
      conn = DriverManager.getConnection(DB_URL,USER,PASS);

     //Create a Statement object and build table
      stmt = conn.createStatement();
      createXMLTable(stmt);

     //Open a FileInputStream
      File f = new File("XML_Data.xml");
      long fileLength = f.length();
      FileInputStream fis = new FileInputStream(f);

     //Create PreparedStatement and stream data
      String SQL = "INSERT INTO XML_Data VALUES (?,?)";
      pstmt = conn.prepareStatement(SQL);
      pstmt.setInt(1,100);
      pstmt.setAsciiStream(2,fis,(int)fileLength);
      pstmt.execute();

     //Close input stream
      fis.close();

     //Do a query to get the row
      SQL = "SELECT Data FROM XML_Data WHERE id=100";
      rs = stmt.executeQuery (SQL);
     //Get the first row
      if (rs.next ()){
        //Retrieve data from input stream
         InputStream xmlInputStream = rs.getAsciiStream (1);
         int c;
         ByteArrayOutputStream bos = new ByteArrayOutputStream();
         while (( c = xmlInputStream.read ()) != -1)
            bos.write(c);
        //Print results
         System.out.println(bos.toString());
      }
     //Clean-up environment
      rs.close();
      stmt.close();
      pstmt.close();
      conn.close();
   }catch(SQLException se){
     //Handle errors for JDBC
      se.printStackTrace();
   }catch(Exception e){
     //Handle errors for Class.forName
      e.printStackTrace();
   }finally{
     //finally block used to close resources
      try{
         if(stmt!=null)
            stmt.close();
      }catch(SQLException se2){
      }//nothing we can do
      try{
         if(pstmt!=null)
            pstmt.close();
      }catch(SQLException se2){
      }//nothing we can do
      try{
         if(conn!=null)
            conn.close();
      }catch(SQLException se){
         se.printStackTrace();
      }//end finally try
   }//end try
   System.out.println("Goodbye!");
}//end main

public static void createXMLTable(Statement stmt)
   throws SQLException{
   System.out.println("Creating XML_Data table..." );
  //Create SQL Statement
   String streamingDataSql = "CREATE TABLE XML_Data " +
                             "(id INTEGER, Data LONG)";
  //Drop table first if it exists.
   try{
      stmt.executeUpdate("DROP TABLE XML_Data");
   }catch(SQLException se){
   }//do nothing
  //Build table.
   stmt.executeUpdate(streamingDataSql);
}//end createXMLTable
}//end JDBCExample

今、私たちは次のように上記の例をコンパイルしましょう-

C:\>javac JDBCExample.java
C:\>
*JDBCExample* を実行すると、次の結果が生成されます-
C:\>java JDBCExample
Connecting to database...
Creating XML_Data table...
<?xml version="1.0"?>
<Employee>
<id>100</id>
<first>Zara</first>
<last>Ali</last>
<Salary>10000</Salary>
<Dob>18-08-1978</Dob>
<Employee>
Goodbye!
C:\>