如何将XML文件导入到数据库中去

如何将XML文件导入到数据库中去,第1张

var tmpquery2:tadoquery;

tmpfile:string;

tmptable:tadotable;

begin

if applicationMessageBox( '导入答案将会清空以前的考生答案,确定是否继续? ', '提醒 ',MB_OKCANCEL or MB_ICONWARNING)=mrok then

begin

IF BSopenExecute then

try

try

begin

tmpfile:=bsopenFileName;

tmptable:=tadotableCreate(self);

tmpquery2:=tadoqueryCreate (self);

tmpquery2Connection :=dmconnect ;

tmptableConnection :=dmconnect ;

tmptableTableName:= 'exam_answer ';

with tmpquery2 do

begin

close;

sqlClear;

sqlAdd( 'delete from exam_answer ');

execsql;

end;

tmptableLoadFromFile(tmpfile);

tmptableFirst;

while not tmptableEof do

begin

with tmpquery2 do

begin

close;

sqlClear;

sqlAdd( 'insert into exam_answer(kh,xm,sj_id,sjts,tk_id,stbh,tx,daa,dab,dac,dad,dae,daf,tkda,df) values(:kh,:xm,:sj_id,:sjts,:tk_id,:stbh,:tx,:daa,:dab,:dac,:dad,:dae,:daf,:tkda,:df) ');

parametersParamByName( 'kh ')Value :=tmptablefieldbyname( 'kh ')AsString;

parametersParamByName( 'xm ')Value :=tmptablefieldbyname( 'xm ')AsString;

parametersParamByName( 'sj_id ')Value :=tmptablefieldbyname( 'sj_id ')AsString;

parametersParamByName( 'tx ')Value :=tmptablefieldbyname( 'tx ')AsString;

parametersParamByName( 'sjts ')Value :=tmptablefieldbyname( 'sjts ')AsString;

parametersParamByName( 'tk_id ')Value :=tmptablefieldbyname( 'tk_id ')AsString;

parametersParamByName( 'stbh ')Value :=tmptablefieldbyname( 'stbh ')AsString;

parametersParamByName( 'daa ')Value :=tmptablefieldbyname( 'daa ')AsBoolean;

parametersParamByName( 'dab ')Value :=tmptablefieldbyname( 'dab ')asboolean;

parametersParamByName( 'dac ')Value :=tmptablefieldbyname( 'dac ')AsBoolean ;

parametersParamByName( 'dad ')Value :=tmptablefieldbyname( 'dad ')AsBoolean ;

parametersParamByName( 'dae ')Value :=tmptablefieldbyname( 'dae ')AsBoolean ;

parametersParamByName( 'daf ')Value :=tmptablefieldbyname( 'daf ')AsBoolean ;

parametersParamByName( 'tkda ')Value :=tmptablefieldbyname( 'tkda ')AsString;

parametersParamByName( 'df ')Value :=tmptablefieldbyname( 'df ')AsString;

execsql;

end;

tmptablenext;

end;

showmessage( '导入完成,累死了 ')

end;

finally

tmptableFree;

tmpquery2Free;

end;

except

showmessage( '导入未完成。:( ')

end;

end;

end;

如果单纯的LOAD出来,它是不直接写到后台数据表的。分析下源码就知道它LOAD之前先CLOSE了数据表。只有一条一条增加到后台数据表了。

你是使用JNDI获得数据源对象的吗?如果是:

1,、配置contextxml文件

<Context>

<Resource name="jdbc/news"

auth="Container"

type="javaxsqlDataSource"

maxActive="100"

maxIdle="30"

maxWait="10000"

username="jbit"

password="dbqn"'

driverClassName="OraclejdbcdriverOracleDriver"

url="jdbc:oracle:thin:@localhost:1521:daataName"

</Context>

以上用的是Oracle数据库的驱动和url

你可以换成SQL的

2、配置webxml文件

<resource-ref>

<res-auth>Container</res-auth>

<res-type>javaxsqlDataSource</res-type>

<res-ref-name>jdbc/news</res-ref-name>

</resource-ref>

3、添加数据库驱动

4、在javaBean中编写代码,使用lookup()方法获得数据源对象

public class BaseDAO {

private static Connection conn = null;

public static Connection getConnection() {

try {

Context context = new InitialContext();

DataSource ds = (DataSource) context

lookup("java:comp/env/jdbc/news");

conn = dsgetConnection();

} catch (Exception e) {

eprintStackTrace();

}

return conn;

}

}

注:lookup("java:comp/env/jdbc/news");

中的参数"java:comp/env/"+数据源名称的形式

如果你要的话我正好有这Struts2的项目我可以给你看看

查询 *** 作

在定义了一个XML类型的数据之后,我们最常用的就是查询 *** 作,下面我们来介绍如何使用SQL语句来进行查询 *** 作的。

在T-Sql中,提供了两个对XML类型数据进行查询的函数,分别是query(xquery)和value(xquery,

dataType),其中,query(xquery)得到的是带有标签的数据,而value(xquery,

dataType)得到的则是标签的内容。接下类我们分别使用这两个函数来进行查询。

1

、使用query(xquery)

查询

我们需要得到书的标题(title),使用query(xquery)来进行查询,查询语句为:

select

@xmlDocquery('/book/title')

2

、使用value(xquery,

dataType)

查询

同样是得到书的标题,使用value函数,需要指明两个参数,一个为xquery,

另一个为得到数据的类型。看下面的查询语句:

select

@xmlDocvalue('(/book/title)[1]',

'nvarchar(max)')

3

、查询属性值

无论是使用query还是value,都可以很容易的得到一个节点的某个属性值,例如,我们很希望得到book节点的id,我们这里使用value方法进行查询,语句为:

select

@xmlDocvalue('(/book/@id)[1]',

'nvarchar(max)')

4

、使用xpath进行查询

xpath是统一的Xml查询语句。使用XPath可以方便的得到想要的节点,而不用使用where语句。例如,我们在@xmlDoc中添加了另外一个节点

例如

:得到id为0002的book节点

select

@xmlDocquery('(/root/book[@id="0002"])')

参考资料:

SQL如何 *** 作Xml字段

>

开始讨论XML和数据库之前,我们先回答许多人都遇到过的问题:“XML是数据库吗?”

如果仅按数据库这个术语的本质来看,XML文件就是数据库,它是数据的集合。在许多方面看起来它和其他文件没什么区别 -- 无论如何,每个文件都含有某种类型的数据。作为一种“数据库”格式,XML有一些优势:例如,它是自描述的(所用的标记描述了数据的结构和类型,尽管缺乏语义),可交换的(portable)(Unicode),能够以树型或图形结构描述数据。同样它也有缺点,例如,它显得有些繁琐,由于要对它进行解析和文本转换,所以数据访问速度较慢。

一个更有用的问题就是在较为宽松的意义上,XML及其周边技术是否可以算作“数据库” -- 数据库管理系统(DBMS)。答案是“在某种程度上是(sort of)”。从正面来说,XML提供了许多数据库所具备的东西:存储(XML文档), 模式(DTD, XML schema,RElAX NG 等等), 查询语言(XQuery, XPath, XQL, XML-QL, QUILT等等),编程接口(SAX, DOM,JDOM)等等。从反面来说,它缺少一些作为实用的数据库所应具备的特性:高效的存储,索引,安全,事务和数据一致性,多用户访问,触发器,在查询多个文件等等。

因此,尽管在数据量小、用户少和性能要求不太高的环境下,可以将XML文档用作数据库,但是却不适用于用户量大、数据集成度高以及性能要求高的作业环境。

XML适合于用作所谓“数据库”的一个好例子就是 ini文件 -- 它包含应用程序的配置信息。与其写一个处理以逗号分隔(comma-delimited)的文件的解析器,开发一种小型的XML语言并写一个解释它的 SAX程序要容易的多。此外,XML允许使用嵌套的实体,而逗号分隔的文件(comma-delimited files)很难做到这点。然而,说它就是数据库还很勉强,因为它是线性读写的,而且仅用在程序开始和结束时。

比较适合于XML数据库的一些复杂的数据集就是个人通讯录(名字,电话号码,地址等),或用于描述浏览器书签以及用Napster偷来的MP3。然而,由于dBase和Access之类的数据库物美价廉,即使在这种情况下似乎也没有多少理由把XML文件作为数据库使用。XML的唯一真正好处就是数据的可交换性(portable),由于有越来越多的工具可以用来对数据库进行XML序列化(serializing),这一点好处似乎也要打些折扣。

以上就是关于如何将XML文件导入到数据库中去全部的内容,包括:如何将XML文件导入到数据库中去、如何java类中如何取得在xml文件查询数据库的结果、sql 2005数据库 如何 *** 作xml等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10105826.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存