Spec-Zone .ru
спецификации, руководства, описания, API
|
Connection
интерфейс оказывает поддержку для создания SQLXML
объекты используя метод createSQLXML
. Объект, который создается, не содержит данных. Данные могут быть добавлены к объекту, вызывая setString
, setBinaryStream
, setCharacterStream
или setResult
метод на SQLXML
интерфейс.
Следующие темы затрагиваются:
В следующей выборке, методе Connection.createSQLXML
используется, чтобы создать пустое SQLXML
объект. SQLXML.setString
метод используется, чтобы записать данные в SQLXML
объект, который создавался.
Connection con = DriverManager.getConnection(url, props); SQLXML xmlVal = con.createSQLXML(); xmlVal.setString(val);
SQLXML
тип данных обрабатывается так же к более примитивным встроенным типам. A SQLXML
значение может быть получено, вызывая getSQLXML
метод в ResultSet
или CallableStatement
интерфейс.
Например, следующая выборка получает a SQLXML
значение от первого столбца ResultSet
РТС:
SQLXML xmlVar = rs.getSQLXML(1);
SQLXML
объекты остаются допустимыми для, по крайней мере, продолжительности транзакции, в которой они не создаются, если их free
метод вызывается.
SQLXML
интерфейс обеспечивает getString
, getBinaryStream
, getCharacterStream
, и getSource
методы, чтобы получить доступ к его внутреннему контенту. Следующая выборка получает содержание SQLXML
объект используя getString
метод:
SQLXML xmlVal= rs.getSQLXML(1); String val = xmlVal.getString();
getBinaryStream
или getCharacterStream
методы могут использоваться, чтобы получить InputStream
или a Reader
объект, который можно передать непосредственно к синтаксическому анализатору XML. Следующая выборка получает InputStream
объект от SQLXML
Объект и затем обрабатывает поток, используя ДОМА (Объектная модель документа) синтаксический анализатор:
SQLXML sqlxml = rs.getSQLXML(column); InputStream binaryStream = sqlxml.getBinaryStream(); DocumentBuilder parser = DocumentBuilderFactory.newInstance().newDocumentBuilder(); Document result = parser.parse(binaryStream);
getSource
метод возвращает a javax.xml.transform.Source
объект. Источники привыкли как входной к синтаксическим анализаторам XML и преобразователям XSLT.
Следующая выборка получает и анализирует данные от a SQLXML
объект используя SAXSource
объект, возвращенный, вызывая getSource
метод:
SQLXML xmlVal= rs.getSQLXML(1); SAXSource saxSource = sqlxml.getSource(SAXSource.class); XMLReader xmlReader = saxSource.getXMLReader(); xmlReader.setContentHandler(myHandler); xmlReader.parse(saxSource.getInputSource());
A SQLXML
объект можно передать как входной параметр к a PreparedStatement
объект точно так же как другие типы данных. Метод setSQLXML
устанавливает определяемый PreparedStatement
параметр с a SQLXML
объект.
В следующей выборке, authorData
экземпляр java.sql.SQLXML
взаимодействуйте через интерфейс, чьи данные были инициализированы ранее.
PreparedStatement pstmt = conn.prepareStatement("INSERT INTO bio " + "(xmlData, authId) VALUES (?, ?)"); pstmt.setSQLXML(1, authorData); pstmt.setInt(2, authorId);
updateSQLXML
метод может использоваться, чтобы обновить значение столбца в обновляемом наборе результатов.
Если java.xml.transform.Result
, Writer
, или OutputStream
объект для SQLXML
объект не был закрыт до вызова setSQLXML
или updateSQLXML
, a SQLException
будет брошен.
SQLXML
интерфейс обеспечивает методы setString
, setBinaryStream
, setCharacterStream
, или setResult
инициализировать контент для a SQLXML
объект, который был создан, вызывая Connection.createSQLXML
метод.
Следующая выборка использует метод setResult
возвратить a SAXResult
объект заполнить недавно создаваемый SQLXML
объект:
SQLXML sqlxml = con.createSQLXML(); SAXResult saxResult = sqlxml.setResult(SAXResult.class); ContentHandler contentHandler = saxResult.getXMLReader().getContentHandler(); contentHandler.startDocument(); // set the XML elements and // attributes into the result contentHandler.endDocument();
Следующая выборка использует setCharacterStream
метод, чтобы получить a java.io.Writer
возразите, чтобы инициализировать a SQLXML
объект:
SQLXML sqlxml = con.createSQLXML(); Writer out= sqlxml.setCharacterStream(); BufferedReader in = new BufferedReader(new FileReader("xml/foo.xml")); String line = null; while((line = in.readLine() != null) { out.write(line); }
Точно так же SQLXML
setString
метод может использоваться, чтобы инициализировать a SQLXML
объект.
Если попытка предпринимается, чтобы вызвать setString
, setBinaryStream
, setCharacterStream
, и setResult
методы на a SQLXML
объект, который был ранее инициализирован, a SQLException
будет брошен. Если больше чем один призывает к методам setBinaryStream
, setCharacterStream
, и setResult
происходит для того же самого SQLXML
объект, a SQLException
бросается и ранее возвращенный javax.xml.transform.Result
, Writer
, или OutputStream
на объект не влияют.
SQLXML
объекты остаются допустимыми для, по крайней мере, продолжительности транзакции, в которой они создаются. Это могло потенциально привести к приложению, исчерпывающему ресурсы во время длинной рабочей транзакции. Приложения могут выпустить SQLXML
ресурсы, вызывая их free
метод.
В следующей выборке, method SQLXML.free
вызывается, чтобы высвободить средства, сохраненные на ранее создаваемый SQLXML
объект.
SQLXML xmlVar = con.createSQLXML(); xmlVar.setString(val); xmlVar.free();
MySQL и DB Java и их соответствующие драйверы JDBC не полностью поддерживают SQLXML
Тип данных JDBC как описано на в этом разделе. Однако, выборка RSSFeedsTable
демонстрирует, как обработать данные XML с DB Java и MySQL.
Владелец Перерыва на кофе следует за несколькими каналами RSS от различных веб-сайтов, которые покрывают ресторан и отраслевые новости напитка. RSS (Лента новостей или Оперативная сводка новостей) канал является XML-документом, который содержит серию статей и связанных метаданных, таких как дата публикации и автора для каждой статьи. Владелец хотел бы сохранить эти каналы RSS в таблицу базы данных, включая канал RSS из блога Перерыва на кофе.
Файл rss-the-coffee-break-blog.xml
канал RSS в качестве примера из блога Перерыва на кофе.
Выборка RSSFeedsTable
каналы RSS хранилищ в таблице RSS_FEEDS
, который создается со следующей командой:
create table RSS_FEEDS (RSS_NAME varchar(32) NOT NULL, RSS_FEED_XML longtext NOT NULL, PRIMARY KEY (RSS_NAME));
MySQL не поддерживает тип данных XML. Вместо этого эта выборка хранит данные XML в столбце типа LONGTEXT
, который является a CLOB
Тип данных SQL. MySQL имеет четыре CLOB
типы данных; LONGTEXT
тип данных содержит самое большое количество символов среди четырех.
Метод RSSFeedsTable.addRSSFeed
добавляет канал RSS к RSS_FEEDS
таблица. Первые операторы этого метода преобразовывают канал RSS (который представляется XML-файлом в этой выборке) в объект типа org.w3c.dom.Document
, который представляет ДОМА (Объектная модель документа) документ. Этот class, наряду с классами и интерфейсами содержится в пакете javax.xml
, содержите методы, которые позволяют Вам управлять контентом данных XML. Например, следующий оператор использует выражение XPath, чтобы получить title канала RSS от Document
объект:
Node titleElement = (Node)xPath.evaluate("/rss/channel/title[1]", doc, XPathConstants.NODE);
Выражение XPath /rss/channel/title[1]
получает содержание первого <title>
элемент. Для файла rss-the-coffee-break-blog.xml
, это - строка The Coffee Break Blog
.
Следующие операторы добавляют канал RSS к таблице RSS_FEEDS
:
// For databases that support the SQLXML // data type, this creates a // SQLXML object from // org.w3c.dom.Document. System.out.println("Adding XML file " + fileName); String insertRowQuery = "insert into RSS_FEEDS " + "(RSS_NAME, RSS_FEED_XML) values " + "(?, ?)"; insertRow = con.prepareStatement(insertRowQuery); insertRow.setString(1, titleString); System.out.println("Creating SQLXML object with MySQL"); rssData = con.createSQLXML(); System.out.println("Creating DOMResult object"); DOMResult dom = (DOMResult)rssData.setResult(DOMResult.class); dom.setNode(doc); insertRow.setSQLXML(2, rssData); System.out.println("Running executeUpdate()"); insertRow.executeUpdate();
RSSFeedsTable.viewTable
метод получает содержание RSS_FEEDS
. Для каждой строки метод создает объект типа org.w3c.dom.Document
именованный doc
в котором можно сохранить контент XML в столбце RSS_FEED_XML
. Метод получает контент XML и хранит его в объекте типа SQLXML
именованный rssFeedXML
. Содержание rssFeedXML
анализируются и сохранены в doc
объект.
Отметьте: См. раздел "типы данных XML и операторы" в
Выборка RSSFeedsTable
каналы RSS хранилищ в таблице RSS_FEEDS
, который создается со следующей командой:
create table RSS_FEEDS (RSS_NAME varchar(32) NOT NULL, RSS_FEED_XML xml NOT NULL, PRIMARY KEY (RSS_NAME));
DB Java поддерживает тип данных XML, но это не поддерживает SQLXML
Тип данных JDBC. Следовательно, следует преобразовать любые данные XML в символьный формат, и затем использовать оператор DB Java XMLPARSE
преобразовать это в тип данных XML.
RSSFeedsTable.addRSSFeed
метод добавляет канал RSS к RSS_FEEDS
таблица. Первые операторы этого метода преобразовывают канал RSS (который представляется XML-файлом в этой выборке) в объект типа org.w3c.dom.Document
. Это описывается в разделе, Работающем с Данными XML в MySQL.
RSSFeedsTable.addRSSFeed
метод преобразовывает канал RSS в a String
объект с методом JDBCTutorialUtilities.convertDocumentToString
.
DB Java назвали оператор XMLPARSE
это анализирует представление символьной строки в значение XML DB Java, которое демонстрируется следующей выборкой:
String insertRowQuery = "insert into RSS_FEEDS " + "(RSS_NAME, RSS_FEED_XML) values " + "(?, xmlparse(document cast " + "(? as clob) preserve whitespace))";
XMLPARSE
оператор требует, чтобы Вы преобразовали символьное представление XML-документа в строковый тип данных, который распознает DB Java. В этом примере это преобразовывает это в a CLOB
тип данных. Кроме того, XMLPARSE
оператор требует, чтобы Apache Xalan был перечислен в Вашем Java путь class. См. Начинание и документацию DB Java для получения дополнительной информации о Apache Xalan и требования DB Java.
Метод RSSFeedsTable.viewTable
получает содержание RSS_FEEDS
. Поскольку DB Java не поддерживает тип данных JDBC SQLXML
следует получить контент XML как строку. DB Java назвали оператор XMLSERIALIZE
это преобразовывает тип XML в символьный тип:
String query = "select RSS_NAME, " + "xmlserialize " + "(RSS_FEED_XML as clob) " + "from RSS_FEEDS";
Как с XMLPARSE
оператор, XMLSERIALIZE
оператор требует, чтобы Apache Xalan был перечислен в Вашем Java путь class.