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