Programmering med SQLXML

Ladda ned JDBC-drivrutin

I det här avsnittet beskrivs hur du använder Microsoft JDBC-drivrutinen för SQL Server API-metoder för att lagra och hämta ett XML-dokument i och från en relationsdatabas med SQLXML-objekt .

Det här avsnittet innehåller också information om typerna av SQLXML-objekt och innehåller en lista över viktiga riktlinjer och begränsningar när du använder SQLXML-objekt.

Läsa och skriva XML-data med SQLXML-objekt

I följande lista beskrivs hur du använder Microsoft JDBC-drivrutinen för SQL Server API-metoder för att läsa och skriva XML-data med SQLXML-objekt:

  • Om du vill skapa ett SQLXML-objekt använder du metoden createSQLXML i klassen SQLServerConnection . Observera att den här metoden skapar ett SQLXML-objekt utan data. Om du vill lägga till XML-data i SQLXML-objektet anropar du någon av följande metoder som anges i SQLXML-gränssnittet: setResult, setCharacterStream, setBinaryStream eller setString.

  • Om du vill hämta själva SQLXML-objektet använder du getSQLXML-metoderna för klassen SQLServerResultSet eller klassen SQLServerCallableStatement .

  • Om du vill hämta XML-data från ett SQLXML-objekt använder du någon av följande metoder som anges i SQLXML-gränssnittet: getSource, getCharacterStream, getBinaryStream eller getString.

  • Om du vill uppdatera XML-data i ett SQLXML-objekt använder du metoden updateSQLXML i klassen SQLServerResultSet .

  • Om du vill lagra ett SQLXML-objekt i en databastabellkolumn av typen xml använder du setSQLXML-metoderna för klassen SQLServerPreparedStatement eller klassen SQLServerCallableStatement .

Exempelkoden i SQLXML-datatypsexemplet visar hur du utför dessa vanliga API-uppgifter.

Läsbara och skrivbara SQLXML-objekt

I följande tabell visas vilka typer av SQLXML-objekt som stöds av metoderna setter, getter och updater som tillhandahålls av JDBC-API:et. Kolumnerna i tabellen refererar till följande:

Metodnamn Getter SQLXML-objekt

(Läsbart)
Inställer SQLXML-objekt

(Skrivbar)
CallableStatement.setSQLXML() Stöds inte Understödd
CallableStatement.setObject() Stöds inte Understödd
PreparedStatement.setSQLXML() Stöds inte Understödd
PreparedStatement.setObject() Stöds inte Understödd
ResultSet.updateSQLXML() Stöds inte Understödd
ResultSet.updateObject() Stöds inte Understödd
ResultSet.getSQLXML() Understödd Stöds inte
CallableStatement.getSQLXML() Understödd Stöds inte

Som du ser i tabellen ovan fungerar inte SQLXML-metoderna för setter med de läsbara SQLXML-objekten. På samma sätt fungerar inte getter-metoderna med skrivbara SQLXML-objekt.

Om programmet anropar metoden setObject genom att ange en skalnings- eller längdparameter med ett SQLXML-objekt ignoreras skalnings- eller längdparametern.

Riktlinjer och begränsningar när du använder SQLXML-objekt

Program kan använda SQLXML-objekt för att läsa och skriva XML-data från och till databasen. Följande lista innehåller information om specifika begränsningar och vägledning när du använder SQLXML-objekt:

  • Ett SQLXML-objekt kan endast vara giltigt under hela den transaktion som det skapades i.

  • Ett SQLXML-objekt som tas emot från en getter-metod kan bara användas för att läsa data.

  • Ett SQLXML-objekt som skapats av anslutningsobjektet kan bara användas för att skriva data.

  • Programmet kan bara anropa en getter-metod på ett läsbart SQLXML-objekt för att läsa data. När getter-metoden har anropats misslyckas alla andra getter- eller setter-metoder på samma SQLXML-objekt.

  • Programmet kan bara anropa den kostnadsfria metoden på SQLXML-objektet när det har lästs eller skrivits till. Det är dock fortfarande möjligt att bearbeta den returnerade dataströmmen eller källan så länge den underliggande kolumnen eller parametern är aktiv. Om den underliggande kolumnen eller parametern blir inaktiv stängs strömmen eller källan som är associerad med SQLXML-objektet. Om den underliggande kolumnen eller parametern inte längre är giltig kommer den underliggande datan inte att vara tillgänglig för Stream, Simple API för XML (SAX) och Streaming API för XML (StAX).

  • Programmet kan bara anropa en setter-metod på ett skrivbart SQLXML-objekt. När metoden setter har anropats misslyckas alla andra setter- eller getter-metoder på samma SQLXML-objekt.

  • Om du vill ange data på SQLXML-objektet måste programmet använda lämplig setter-metod och funktionerna i det returnerade objektet.

  • GetSQLXML-metoderna för klassen SQLServerCallableStatement och klassen SQLServerResultSet returnerar null-data om den underliggande kolumnen är null.

  • Setter-objekten kan vara giltiga via anslutningen som de skapas i.

  • Program får inte ange ett null-värde med hjälp av de metoduppsättningsmetoder som tillhandahålls av SQLXML-gränssnittet. Programmen kan ange en tom sträng ("") med hjälp av de metoder som anges i SQLXML-gränssnittet. Om du vill ange ett null-värde ska programmen anropa något av följande:

  • När du arbetar med XML-dokument rekommenderar vi att du av prestandaskäl använder parsers för Simple API för XML (SAX) och Streaming API för XML (StAX) i stället för parsers för Document Object Model (DOM).

XML-parsare kan inte hantera tomma värden. Sql Server tillåter dock att program hämtar och lagrar tomma värden från och till databaskolumner av XML-datatypen. Det innebär att om det underliggande värdet är tomt när XML-data parsas genereras ett undantag av parsern. För DOM-utdata fångar JDBC-drivrutinen det undantaget och genererar ett fel. För SAX- och Stax-utdata kommer felet direkt från parsern.

Stöd för anpassningsbar buffring och SQLXML

De binära dataströmmarna och teckenströmmarna som returneras av SQLXML-objektet följer de anpassningsbara eller fullständiga buffringslägena. Om XML-parsarna å andra sidan inte är strömmar följer de inte de anpassningsbara eller fullständiga inställningarna. Mer information om anpassningsbar buffring finns i Använda anpassningsbar buffring.

Se även

Stöd för XML-data