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