Spec-Zone .ru
спецификации, руководства, описания, API
|
Важная функция Blob
, Clob
, и NClob
Объекты Java состоят в том, что можно управлять ими, не имея необходимость приносить все их данные с сервера базы данных на Ваш клиентский компьютер. Некоторые реализации представляют экземпляр этих типов с локатором (логический указатель) к объекту в базе данных, которую представляет экземпляр. Поскольку a BLOB
, CLOB
, или NCLOB
Объект SQL может быть очень большим, использование локаторов может сделать производительность значительно быстрее. Однако, другие реализации полностью осуществляют большие объекты на клиентском компьютере.
Если Вы хотите принести данные a BLOB
, CLOB
, или NCLOB
Значение SQL к клиентскому компьютеру, используйте методы в Blob
, Clob
, и NClob
Интерфейсы Java, которые обеспечиваются с этой целью. Эти большие объектные объекты типа осуществляют данные объектов, которые они представляют как поток.
Следующие темы затрагиваются:
Следующая выборка от ClobSample.addRowToCoffeeDescriptions
добавляет a CLOB
Значение SQL к таблице COFFEE_DESCRIPTIONS
. Clob
Объект Java myClob
содержит содержание файла, определенного fileName
.
public void addRowToCoffeeDescriptions( String coffeeName, String fileName) throws SQLException { PreparedStatement pstmt = null; try { Clob myClob = this.con.createClob(); Writer clobWriter = myClob.setCharacterStream(1); String str = this.readFile(fileName, clobWriter); System.out.println("Wrote the following: " + clobWriter.toString()); if (this.settings.dbms.equals("mysql")) { System.out.println( "MySQL, setting String in Clob " + "object with setString method"); myClob.setString(1, str); } System.out.println("Length of Clob: " + myClob.length()); String sql = "INSERT INTO COFFEE_DESCRIPTIONS " + "VALUES(?,?)"; pstmt = this.con.prepareStatement(sql); pstmt.setString(1, coffeeName); pstmt.setClob(2, myClob); pstmt.executeUpdate(); } catch (SQLException sqlex) { JDBCTutorialUtilities.printSQLException(sqlex); } catch (Exception ex) { System.out.println("Unexpected exception: " + ex.toString()); } finally { if (pstmt != null)pstmt.close(); } }
Следующая строка создает a Clob
Объект Java:
Clob myClob = this.con.createClob();
Следующая строка получает поток (в этом случае a Writer
объект называют clobWriter
) это используется, чтобы записать поток символов к Clob
Объект Java myClob
. Метод ClobSample.readFile
записи этот поток символов; поток от файла, определенного String
fileName
. Параметр метода 1
указывает что Writer
объект начнет писать поток символов в начале Clob
значение:
Writer clobWriter = myClob.setCharacterStream(1);
ClobSample.readFile
метод читает файл, линию за линией определенный файлом fileName
и записи это к Writer
объект, определенный writerArg
:
private String readFile(String fileName, Writer writerArg) throws FileNotFoundException, IOException { BufferedReader br = new BufferedReader(new FileReader(fileName)); String nextLine = ""; StringBuffer sb = new StringBuffer(); while ((nextLine = br.readLine()) != null) { System.out.println("Writing: " + nextLine); writerArg.write(nextLine); sb.append(nextLine); } // Convert the content into to a string String clobData = sb.toString(); // Return the data. return clobData; }
Следующая выборка создает a PreparedStatement
объект pstmt
это вставляет Clob
Объект Java myClob
в COFFEE_DESCRIPTIONS
:
PreparedStatement pstmt = null; // ... String sql = "INSERT INTO COFFEE_DESCRIPTIONS VALUES(?,?)"; pstmt = this.con.prepareStatement(sql); pstmt.setString(1, coffeeName); pstmt.setClob(2, myClob); pstmt.executeUpdate();
Метод ClobSample.retrieveExcerpt
получает CLOB
Значение SQL, сохраненное в COF_DESC
столбец COFFEE_DESCRIPTIONS
от строки, чье значение столбца COF_NAME
равно String
значение, определенное coffeeName
параметр:
public String retrieveExcerpt(String coffeeName, int numChar) throws SQLException { String description = null; Clob myClob = null; PreparedStatement pstmt = null; try { String sql = "select COF_DESC " + "from COFFEE_DESCRIPTIONS " + "where COF_NAME = ?"; pstmt = this.con.prepareStatement(sql); pstmt.setString(1, coffeeName); ResultSet rs = pstmt.executeQuery(); if (rs.next()) { myClob = rs.getClob(1); System.out.println("Length of retrieved Clob: " + myClob.length()); } description = myClob.getSubString(1, numChar); } catch (SQLException sqlex) { JDBCTutorialUtilities.printSQLException(sqlex); } catch (Exception ex) { System.out.println("Unexpected exception: " + ex.toString()); } finally { if (pstmt != null) pstmt.close(); } return description; }
Следующая строка получает Clob
Значение Java от ResultSet
объект rs
:
myClob = rs.getClob(1);
Следующая строка получает подстроку от myClob
объект. Подстрока начинается в первом символе значения myClob
и имеет до числа последовательных символов, определенных в numChar
, где numChar
целое число.
description = myClob.getSubString(1, numChar);
Добавление и получение BLOB
Объекты SQL подобны добавлению и получению CLOB
Объекты SQL. Используйте Blob.setBinaryStream
метод, чтобы получить OutputStream
возразите, чтобы записать BLOB
Значение SQL, что Blob
Объект Java (который названный методом) представляет.
Blob
, Clob
, и NClob
Объекты Java остаются допустимыми для, по крайней мере, продолжительности транзакции, в которой они создаются. Это могло потенциально привести к приложению, исчерпывающему ресурсы во время длинной рабочей транзакции. Приложения могут выпустить Blob
, Clob
, и NClob
ресурсы, вызывая их free
метод.
В следующей выборке, методе Clob.free
вызывается, чтобы высвободить средства, сохраненные на ранее создаваемый Clob
объект:
Clob aClob = con.createClob(); int numWritten = aClob.setString(1, val); aClob.free();