English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
O objeto PreparedStatement pode usar streams de entrada e saída para fornecer dados de parâmetros. Isso permite que você coloque um arquivo inteiro em uma coluna do banco de dados que pode armazenar valores grandes (como os tipos de dados CLOB e BLOB).
Existem métodos disponíveis, que podem ser usados para dados de fluxo-
setAsciiStream(): Este método é usado para fornecer valores ASCII maiores.
setCharacterStream(): Este método é usado para fornecer valores UNICODE maiores.
setBinaryStream(): Este método é usado para fornecer valores binários maiores.
O método setXXXStream () além de um marcador de posição de parâmetro, ainda precisa de um parâmetro adicional, ou seja, o tamanho do arquivo. Este parâmetro informa ao driver quantos dados devem ser enviados para o banco de dados.
Por exemplo, se quisermos upload o arquivo XML XML_Data.xml para a tabela do banco de dados. Este é o conteúdo do arquivo XML-
<?xml version="1.0"?> <Employee> <id>100</id> <first>Zara</first> <last>Ali</last> <Salary>10000</Salary> <Dob>18-08-1978</Dob> <Employee>
Coloque este arquivo XML no diretório onde você executará este exemplo.
Este exemplo criará uma tabela de banco de dados XML_Data e然后将文件XML_Data.xml上传到该表中。
Copia e cola o seguinte exemplo no JDBCExample.java, compile e execute conforme abaixo:
// Importar os pacotes necessários import java.sql.*; import java.io.*; import java.util.*; public class JDBCExample { // Nome do driver JDBC e URL do banco de dados static final String JDBC_DRIVER = "com.mysql.jdbc.Driver"; static final String DB_URL = "jdbc:mysql://localhost/EMP"; // Credenciais do banco de dados 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{ // Registrar o driver JDBC Class.forName("com.mysql.jdbc.Driver"); // Abrir conexão System.out.println("Conectando ao banco de dados..."); conn = DriverManager.getConnection(DB_URL,USER,PASS); //Criar um objeto Statement e construir a tabela stmt = conn.createStatement(); createXMLTable(stmt); //Abrir um FileInputStream File f = new File("XML_Data.xml"); long fileLength = f.length(); FileInputStream fis = new FileInputStream(f); //criar PreparedStatement e transmitir dados em fluxo String SQL = "INSERT INTO XML_Data VALUES (?,?)"; pstmt = conn.prepareStatement(SQL); pstmt.setInt(1,100); pstmt.setAsciiStream(2,fis,(int)fileLength); pstmt.execute(); //fechar fluxo de entrada fis.close(); // realizar consulta para obter linha SQL = "SELECT Data FROM XML_Data WHERE id=10"0"; rs = stmt.executeQuery(SQL); // obter primeira linha if (rs.next()){ //recuperar dados do fluxo de entrada InputStream xmlInputStream = rs.getAsciiStream(1); int c; ByteArrayOutputStream bos = new ByteArrayOutputStream(); while ((c = xmlInputStream.read()) != -1) bos.write(c); //imprimir resultado System.out.println(bos.toString()); } // limpar ambiente rs.close(); stmt.close(); pstmt.close(); conn.close(); catch(SQLException se){ //tratar erro JDBC se.printStackTrace(); }catch(Exception e){ //tratar erro de Class.forName e.printStackTrace(); }finally{ //usado para fechar recursos try{ if(stmt!=null) stmt.close(); }catch(SQLException se2){ }// não podemos fazer nada try{ if(pstmt!=null) pstmt.close(); }catch(SQLException se2){ }// não podemos fazer nada try{ if(conn!=null) conn.close(); catch(SQLException se){ se.printStackTrace(); } }//terminar try System.out.println("Goodbye!"); }//terminar main public static void createXMLTable(Statement stmt) throws SQLException{ System.out.println("Criando tabela XML_Data..." //Criar instrução SQL String streamingDataSql = "CREATE TABLE XML_Data" + "(id INTEGER, Data LONG)"; //Se existir, exclua a tabela primeiro. try{ stmt.executeUpdate("DROP TABLE XML_Data"); catch(SQLException se){ }// Nada feito //Criando tabela. stmt.executeUpdate(streamingDataSql); }//Finalizar createXMLTable }//Finalizar JDBCExample
Agora, vamos compilar o exemplo acima, conforme mostrado:
C:\>javac JDBCExample.java C:\>
ExecuçãoJDBCExampleProduzirá o seguinte resultado:-
C:\>java JDBCExample Conectando ao banco de dados... Criando tabela 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> Adeus! C:\>