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