xml及sql作為兩種儲存資料的主流方式,各自有各自的優勢.為此主流的資料庫產品中陸續的加入了對xml的支援.
1.對於sql返回的結果集可以對其進行xml轉換.
2.在ms sql2005中加入了xml型別.允許將xml資料存入對應的表列中,並且也實現了結合xquery(部分功能未實現)來對xml資料進行操作的功能.
建立對應的資料庫及表資訊.
create database people;
use people;
create table people (id int identity primary key,firstname text not null,lastname text not null,age int not null,*** varchar(10) not null)
初始化資料.
insert into people values ('ricky','lin',30,'male');
insert into people values ('jennie','lin',30,'female');
查詢資料並以xml格式返回.
select id [@id],firstname [name/firstname],lastname [name/lastname],age [age],*** [***] from people for xml path('person'),root('people')
獲取到的結果.
ricky
lin 30
male
jennie
lin 30
female
另外還有for xml auto / for xml raw 等選項也可以支援xml輸出.並可以新增對應的引數來豐富輸出的格式.
2.sql對於xml的支援更重要的表現在xml型別的儲存和操作.以下主要說明的是modify/query這兩個函式.其中主要的應用是針對xquery.
declare @original xml;
set @original =
'ricky
lin';
/*modify*/
declare @delete xml;
declare @insert xml;
declare @replace xml;
set @delete = @original;
set @insert = @original;
set @replace = @original;
set @delete.modify('delete /person/*[1]') ;
select @delete 'delete';/*delete firstname element.*/
set @insert.modify('insert ok after (/person/firstname)[1]');
select @insert 'insert';/*insert the middle name after firstname*/
declare @replacement varchar(20);
set @replacement = 'jennie';
set @replace.modify('replace value of (/person/firstname/text())[1] with sql:variable("@replacement")');
select @replace 'replace';/*replace the firstname 'ricky' to 'jennie'*/
modify函式主要提供了三種方式對xml型別資料的修改.
delete/replace/insert. 其引數中主要應用了xquery/xpath來獲取對應的節點以供操作.
以下例子是使用query函式來處理帶命名空間的的情況.
declare @data xml;
set @data =
'ricky
lin'
;select @data.query('
declare namespace ricky = "";
-') result;
在sql與xml結合使用的過程中,主要的應用實現行是針對於xquery.當然或許現階段sql並無法完全的相容xquery語法.但是已經足夠了日常需求.
Spring中transaction的應用
spring框架的事務基礎架構 將預設地 只 在丟擲執行時和unchecked exceptions時才標識事務回滾 當出現異常,都可以進行回滾,可以在catch塊中使用下面一行 這種方法是手工進行設定事務回滾 transactionaspectsupport.currenttransactions...
Spring中FactoryBean的應用
factorybean介面定義了以下3個介面方法 object getobject 返回有factorybean建立的bean例項,如果issingleton 返回true,則該例項會放到spring容器的單例項快取池中。boolean issingleton 確定由factorybean建立bea...
OpenGL中gluLookAt 函式的應用
今天寫了乙個自己的camera 宣告如下 include vector3.h ifndef camera h define camera h namespace learnopengl endif 其中setcamera 成員函式用來指定攝像機所處位置,觀察點位置和向上的向量,定義如下 void l...