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

Fluxo de Dados ASCII e Binário JDBC

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.

Exemplo online

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:\>