English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Объект PreparedStatement может использовать входные и выходные потоки для предоставления параметров данных. Это позволяет вам поместить весь файл в колонку базы данных, которая может хранить большие значения (например, типы данных CLOB и BLOB).
Есть следующие методы, которые можно использовать для потоковой передачи данных-
setAsciiStream(): Этот метод используется для предоставления больших значений ASCII.
setCharacterStream(): Этот метод используется для предоставления больших значений UNICODE.
setBinaryStream(): Этот метод используется для предоставления больших двоичных значений.
Метод setXXXStream () требует не только параметра占位符, но и дополнительного параметра, namely размер файла. Этот параметр информирует драйвер о том, сколько данных следует отправить в базу данных.
Например, мы хотим загрузить файл XML XML_Data.xml в таблицу базы данных. Вот содержимое этого XML файла -
<?xml version="1.0"?> <Employee> <id>100</id> <first>Zara</first> <last>Ali</last> <Salary>10000</Salary> <Dob>18-08-1978</Dob> <Employee>
Поместите этот XML файл в директорию, в которой вы хотите запустить этот пример.
Этот пример создает таблицу базы данных XML_Data, а затем загружает файл XML_Data.xml в эту таблицу.
Скопируйте и вставьте следующий пример в JDBCExample.java, как компилировать и запускать:
// Импорт необходимых пакетов import java.sql.*; import java.io.*; import java.util.*; public class JDBCExample { // Название JDBC драйвера и URL базы данных static final String JDBC_DRIVER = "com.mysql.jdbc.Driver"; static final String DB_URL = "jdbc:mysql://localhost/EMP"; // Кредитные данные базы данных 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{ // Регистрация JDBC драйвера Class.forName("com.mysql.jdbc.Driver"); // Открываем соединение System.out.println("Connecting to database..."); conn = DriverManager.getConnection(DB_URL,USER,PASS); // Создание объекта Statement и создание таблицы stmt = conn.createStatement(); createXMLTable(stmt); // Открываем FileInputStream File f = new File("XML_Data.xml"); long fileLength = f.length(); FileInputStream fis = new FileInputStream(f); // Создание PreparedStatement и передача данных по потоку String SQL = "INSERT INTO XML_Data VALUES (?,?)"; pstmt = conn.prepareStatement(SQL); pstmt.setInt(1, 100); pstmt.setAsciiStream(2, fis, (int)fileLength); pstmt.execute(); //закрытие входного потока fis.close(); //выполнение запроса для получения строки SQL = "SELECT Data FROM XML_Data WHERE id=100"; rs = stmt.executeQuery(SQL); //получение первой строки if (rs.next()) { //получение данных из входного потока InputStream xmlInputStream = rs.getAsciiStream(1); int c; ByteArrayOutputStream bos = new ByteArrayOutputStream(); while ((c = xmlInputStream.read()) != -1) bos.write(c); //печать результата System.out.println(bos.toString()); } //очистка окружения rs.close(); stmt.close(); pstmt.close(); conn.close(); catch(SQLException se){ //обработка JDBC ошибок se.printStackTrace(); }catch(Exception e){ //обработка ошибки Class.forName e.printStackTrace(); }finally{ //используется для закрытия ресурсов try{ if(stmt!=null) stmt.close(); }catch(SQLException se2){ //мы не можем что-либо сделать try{ if(pstmt!=null) pstmt.close(); }catch(SQLException se2){ //мы не можем что-либо сделать try{ if(conn!=null) conn.close(); catch(SQLException se){ se.printStackTrace(); } //окончание try System.out.println("Прощание!"); //окончание main public static void createXMLTable(Statement stmt) throws SQLException{ System.out.println("Создание таблицы XML_Data..."); //Создание SQL-запроса String streamingDataSql = "CREATE TABLE XML_Data " + "(id INTEGER, Data LONG)"; //Если существует, сначала удалите таблицу. try{ stmt.executeUpdate("DROP TABLE XML_Data"); catch(SQLException se){ //Ничего не было сделано //Создание таблицы. stmt.executeUpdate(streamingDataSql); //Конец createXMLTable //Конец JDBCExample
Теперь давайте скомпилируем приведенный выше пример, как показано ниже:
C:\>javac JDBCExample.java C:\>
Время выполненияJDBCExampleОно вызовет следующие результаты-
C:\>java JDBCExample Подключение к базе данных... Создание таблицы 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> До свидания! C:\>