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

Flujos de datos ASCII y binarios JDBC

El objeto PreparedStatement puede usar flujos de entrada y salida para proporcionar datos de parámetros. Esto le permite colocar un archivo completo en una columna de base de datos que puede guardar valores grandes (como tipos de datos CLOB y BLOB).

Hay métodos que se pueden utilizar para datos de flujo-

  • setAsciiStream(): Este método se utiliza para proporcionar valores ASCII más grandes.

  • setCharacterStream(): Este método se utiliza para proporcionar valores UNICODE más grandes.

  • setBinaryStream(): Este método se utiliza para proporcionar valores binarios más grandes.

El método setXXXStream () requiere además de los marcadores de posición de parámetros, un parámetro adicional, es decir, el tamaño del archivo. Este parámetro informa al controlador cuántos datos debe enviar hacia la base de datos.

Ejemplo en línea

Por ejemplo, si queremos subir el archivo XML XML_Data.xml a una tabla de base de datos, este es el contenido del archivo XML-

<?xml version="1.0"?>
<Empleado>
<id>100</id>
<primer>Zara</primer>
<último>Ali</último>
<Salario>10000</Salario>
<Dob>18-08-1978</Dob>
<Empleado>

Coloca este archivo XML en el directorio donde se ejecutará este ejemplo.

Este ejemplo creará una tabla de base de datos XML_Data y luego subirá el archivo XML_Data.xml a la tabla.

Copia y pega el siguiente ejemplo en JDBCExample.java, luego compila y ejecuta:

// Importar los paquetes necesarios
import java.sql.*;
import java.io.*;
import java.util.*;
public class JDBCExample {
   // Nombre del controlador JDBC y URL de la base de datos
   static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";  
   static final String DB_URL = "jdbc:mysql://localhost/EMP";
   //  Credenciales de la base de datos
   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 el controlador JDBC
      Class.forName("com.mysql.jdbc.Driver");
      // Abrir conexión
      System.out.println("Conectando a la base de datos...");
      conn = DriverManager.getConnection(DB_URL,USER,PASS);
      //Crear un objeto Statement y construir la tabla
      stmt = conn.createStatement();
      createXMLTable(stmt);
      //Abrir un FileInputStream
      File f = new File("XML_Data.xml");
      long fileLength = f.length();
      FileInputStream fis = new FileInputStream(f);
      //crear PreparedStatement y transmitir datos en forma de flujo
      String SQL = "INSERT INTO XML_Data VALUES (?,?)";
      pstmt = conn.prepareStatement(SQL);
      pstmt.setInt(1,100);
      pstmt.setAsciiStream(2,fis,(int)fileLength);
      pstmt.execute();
      //cerrar flujo de entrada
      fis.close();
      // realizar una consulta para obtener filas
      SQL = "SELECT Data FROM XML_Data WHERE id=10"0";
      rs = stmt.executeQuery(SQL);
      // obtener la primera línea
      if (rs.next()){
         //recuperar datos del flujo de entrada
         InputStream xmlInputStream = rs.getAsciiStream(1);
         int c;
         ByteArrayOutputStream bos = new ByteArrayOutputStream();
         while ((c = xmlInputStream.read()) != -1)
            bos.write(c);
         //imprimir resultados
         System.out.println(bos.toString());
      }
      // limpiar entorno
      rs.close();
      stmt.close();
      pstmt.close();
      conn.close();
   catch(SQLException se){
      //manejar errores JDBC
      se.printStackTrace();
   }catch(Exception e){
      //manejar el error de Class.forName
      e.printStackTrace();
   }finally{
      //para cerrar recursos
      try{
         if(stmt!=null)
            stmt.close();
      }catch(SQLException se2){
      }// no podemos hacer nada
      try{
         if(pstmt!=null)
            pstmt.close();
      }catch(SQLException se2){
      }// no podemos hacer nada
      try{
         if(conn!=null)
            conn.close();
      catch(SQLException se){
         se.printStackTrace();
      }
   }//finalizar try
   System.out.println("Adiós!");
}//finalizar main
public static void createXMLTable(Statement stmt) 
   lanza SQLException{
   System.out.println("Creando tabla XML_Data...")}
   //Crear sentencia SQL
   String streamingDataSql = "CREATE TABLE XML_Data" +
                             "(id INTEGER, Data LONG)";
   //Si existe, elimine primero la tabla.
   try{
      stmt.executeUpdate("DROP TABLE XML_Data");
   catch(SQLException se){
   }// No ha hecho nada
   //Creando tabla.
   stmt.executeUpdate(streamingDataSql);
}//Finalizar createXMLTable
}//Finalizar JDBCExample

Ahora, compilamos el ejemplo anterior de la siguiente manera:

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

EjecuciónJDBCExampleGenerará los siguientes resultados:-

C:\>java JDBCExample
Conectando a la base de datos...
Creando tabla XML_Data...
<?xml version="1.0"?>
<Empleado>
<id>100</id>
<primer>Zara</primer>
<último>Ali</último>
<Salario>10000</Salario>
<Dob>18-08-1978</Dob>
<Empleado>
¡Adiós!
C:\>