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

Flux ASCII et binaire JDBC

L'objet PreparedStatement peut utiliser les flux d'entrée et de sortie pour fournir des données de paramètres. Cela vous permet de placer un fichier entier dans une colonne de base de données qui peut stocker des valeurs grandes (comme les types de données CLOB et BLOB).

Il existe des méthodes disponibles, utilisables pour les données de flux-

  • setAsciiStream(): Cette méthode est utilisée pour fournir des valeurs ASCII plus grandes.

  • setCharacterStream(): Cette méthode est utilisée pour fournir des valeurs UNICODE plus grandes.

  • setBinaryStream(): Cette méthode est utilisée pour fournir des valeurs binaires plus grandes.

La méthode setXXXStream () nécessite en plus des paramètres de place-tenant, un paramètre supplémentaire, à savoir la taille du fichier. Ce paramètre informe le pilote de combien de données il doit envoyer vers la base de données.

Exemple en ligne

Par exemple, nous voulons télécharger le fichier XML XML_Data.xml dans une table de base de données. Voici le contenu de ce fichier XML-

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

Placez ce fichier XML dans le répertoire où vous exécutez cet exemple.

Cet exemple créera une table de base de données XML_Data, puis téléchargera le fichier XML_Data.xml dans cette table.

Copier et coller l'exemple suivant dans JDBCExample.java, puis compilez et exécutez comme suit :

// Importer les packages nécessaires
import java.sql.*;
import java.io.*;
import java.util.*;
public class JDBCExample {
   // Nom du pilote JDBC et URL de la base de données
   static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";  
   static final String DB_URL = "jdbc:mysql://localhost/EMP";
   //  Credentials 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{
      // Enregistrer le pilote JDBC
      Class.forName("com.mysql.jdbc.Driver");
      // Ouvrir la connexion
      System.out.println("Connecting to database...");
      conn = DriverManager.getConnection(DB_URL,USER,PASS);
      //Créer un objet Statement et construire le tableau
      stmt = conn.createStatement();
      createXMLTable(stmt);
      //Ouvrir un FileInputStream
      File f = new File("XML_Data.xml");
      long fileLength = f.length();
      FileInputStream fis = new FileInputStream(f);
      //créer PreparedStatement et transmettre des données en flux
      String SQL = "INSERT INTO XML_Data VALUES (?,?)";
      pstmt = conn.prepareStatement(SQL);
      pstmt.setInt(1,100);
      pstmt.setAsciiStream(2,fis,(int)fileLength);
      pstmt.execute();
      //fermer le flux d'entrée
      fis.close();
      // effectuer une recherche pour obtenir les lignes
      SQL = "SELECT Data FROM XML_Data WHERE id=10"0";
      rs = stmt.executeQuery(SQL);
      // obtenir la première ligne
      si (rs.next()){
         //récupérer des données à partir du flux d'entrée
         InputStream xmlInputStream = rs.getAsciiStream(1);
         int c;
         ByteArrayOutputStream bos = new ByteArrayOutputStream();
         while ((c = xmlInputStream.read()) != -1)
            bos.write(c);
         //afficher le résultat
         System.out.println(bos.toString());
      }
      // nettoyer l'environnement
      rs.close();
      stmt.close();
      pstmt.close();
      conn.close();
   catch(SQLException se){
      //traiter les erreurs JDBC
      se.printStackTrace();
   }catch(Exception e){
      //traiter l'erreur de Class.forName
      e.printStackTrace();
   }finally{
      //utilisé pour fermer les ressources
      try{
         si(stmt!=null)
            stmt.close();
      }catch(SQLException se2{
      }// Nous ne pouvons rien faire
      try{
         si(pstmt!=null)
            pstmt.close();
      }catch(SQLException se2{
      }// Nous ne pouvons rien faire
      try{
         si(conn!=null)
            conn.close();
      catch(SQLException se){
         se.printStackTrace();
      }
   }//fin de try
   System.out.println("Au revoir!");
}//fin de main
public static void createXMLTable(Statement stmt) 
   lève une SQLException{
   System.out.println("Creating XML_Data table...")}}
   //Créer une instruction SQL
   String streamingDataSql = "CREATE TABLE XML_Data" +
                             "(id INTEGER, Data LONG)";
   //Supprimez d'abord la table si elle existe.
   try{
      stmt.executeUpdate("DROP TABLE XML_Data");
   catch(SQLException se){
   }// Ne rien faire
   //Créer la table.
   stmt.executeUpdate(streamingDataSql);
}//Fin createXMLTable
}//Fin JDBCExample

Compilons maintenant l'exemple ci-dessus, comme suit :

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

RuntimeJDBCExampleIl produira les résultats suivants-

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>
Au revoir !
C:\>