English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

数据流 ASCII 二进制 JDBC

L'oggetto PreparedStatement può utilizzare input e output stream per fornire dati parametrici. Questo ti permette di mettere un intero file in una colonna del database che può salvare valori grandi (come i tipi di dati CLOB e BLOB).

Ci sono i seguenti metodi, che possono essere utilizzati per dati di flusso-

  • setAsciiStream(): Questo metodo viene utilizzato per fornire valori ASCII più grandi.

  • setCharacterStream(): Questo metodo viene utilizzato per fornire valori UNICODE più grandi.

  • setBinaryStream(): Questo metodo viene utilizzato per fornire valori binari più grandi.

Il metodo setXXXStream () richiede oltre il segnaposto dei parametri, un ulteriore parametro, ovvero la dimensione del file. Questo parametro informa il driver di quanta dati dovrebbe inviare verso il database.

Esempio online

Ad esempio, vogliamo caricare il file XML XML_Data.xml nella tabella del database. Ecco il contenuto di questo file XML -

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

Metti questo file XML nella directory in cui desideri eseguire questo esempio.

Questo esempio crea una tabella del database XML_Data e poi carica il file XML_Data.xml nella tabella.

Copia e incolla l'esempio seguente in JDBCExample.java, come compilare ed eseguire:

// Importare i pacchetti necessari
import java.sql.*;
import java.io.*;
import java.util.*;
public class JDBCExample {
   // Nome del driver JDBC e URL del database
   static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";  
   static final String DB_URL = "jdbc:mysql://localhost/EMP";
   // Credenziali del database
   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{
      // Registrare il driver JDBC
      Class.forName("com.mysql.jdbc.Driver");
      // Aprire la connessione
      System.out.println("Connettendo al database...");
      conn = DriverManager.getConnection(DB_URL,USER,PASS);
      // Creare un oggetto Statement e costruire la tabella
      stmt = conn.createStatement();
      createXMLTable(stmt);
      // Aprire un FileInputStream
      File f = new File("XML_Data.xml");
      long fileLength = f.length();
      FileInputStream fis = new FileInputStream(f);
      // Creare un PreparedStatement e trasmettere dati in modo stream
      String SQL = "INSERT INTO XML_Data VALUES (?,?)";
      pstmt = conn.prepareStatement(SQL);
      pstmt.setInt(1,100);
      pstmt.setAsciiStream(2,fis,(int)fileLength);
      pstmt.execute();
      // chiudi flusso di input
      fis.close();
      // esegui query per ottenere riga
      SQL = "SELECT Data FROM XML_Data WHERE id=100";
      rs = stmt.executeQuery(SQL);
      // ottieni la prima riga
      if (rs.next()) {
         // ricava dati dal flusso di input
         InputStream xmlInputStream = rs.getAsciiStream(1);
         int c;
         ByteArrayOutputStream bos = new ByteArrayOutputStream();
         while ((c = xmlInputStream.read()) != -1)
            bos.write(c);
         // stampa dei risultati
         System.out.println(bos.toString());
      }
      // pulizia dell'ambiente
      rs.close();
      stmt.close();
      pstmt.close();
      conn.close();
   catch(SQLException se){
      // gestione degli errori JDBC
      se.printStackTrace();
   }catch(Exception e){
      // gestione dell'errore di Class.forName
      e.printStackTrace();
   }finally{
      // utilizzato per chiudere le risorse
      try{
         if(stmt!=null)
            stmt.close();
      }catch(SQLException se2){
      // non possiamo fare nulla
      try{
         if(pstmt!=null)
            pstmt.close();
      }catch(SQLException se2){
      // non possiamo fare nulla
      try{
         if(conn!=null)
            conn.close();
      catch(SQLException se){
         se.printStackTrace();
      }
   // fine try
   System.out.println("Arrivederci!");
// fine main
public static void createXMLTable(Statement stmt) 
   throws SQLException{
   System.out.println("Creando tabella XML_Data...");
   //Creazione dell'istruzione SQL
   String streamingDataSql = "CREATE TABLE XML_Data " +
                             "(id INTEGER, Data LONG)";
   //Se esiste, elimina prima la tabella.
   try{
      stmt.executeUpdate("DROP TABLE XML_Data");
   catch(SQLException se){
   //Non ha fatto nulla
   //Creazione della tabella.
   stmt.executeUpdate(streamingDataSql);
//Fine di createXMLTable
//Fine di JDBCExample

Ora compiliamo l'esempio sopra, come segue:

C:\>javac JDBCExample.java
C:\>

esecuzioneJDBCExample,genererà i seguenti risultati-

C:\>java JDBCExample
Connettendo al database...
Creando tabella XML_Data...
<?xml version="1.0"?>
<Employee>
<id>100</id>
<first>Zara</first>
<last>Ali</last>
<Salary>10000</Salary>
<Dob>18-08-1978</Dob>
<Employee>
Ciao!
C:\>