在xml文件中插入sql语句

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在xml文件中插入sql语句相关的知识,希望对你有一定的参考价值。

我想做一个视频,从后台上传视频,前台想做一个播放列表。这个播放列表放在xml文件中。xml文件的代码是:<?xml version="1.0" encoding="utf-8"?>
<vcaster>
<item item_url="1.flv" item_title="幸福的脚丫预告片">
</item>
<item item_url="2.flv" item_title="变形金刚预告片">
</item>
<item item_url="3.flv" item_title="江南MV" >
</item>
<item item_url="29986450.flv" item_title="魔兽世界-晚安部落">
</item>
</vcaster>但是这里的几个视频都是通过手工添加的,我想在里边加入select语句来查询数据库,来实现动态效果。数据库为file,数据表也为file,里边有id,name,fileurl 三个字段。网站开发用的是asp。请了解的朋友给在下把代码说全面一点。谢谢!
忘了说,数据库用的是ACCESS

public class XMLTest

private Hashtable<String, String> hashtable;
private Vector sqlv=new Vector(); //用来存放Hashtable
public Hashtable getSQL()
hashtable=new Hashtable<String, String>();
try
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
DocumentBuilder db=dbf.newDocumentBuilder();
//path得到的值为 D:\tomcat5520\bin 即%tomcat%\bin目录
String path=System.getProperty("user.dir");
System.out.println("在XMLTest.java文件中打印user.dir的值为--"+path);
int pos=path.lastIndexOf("\\");
//下面这条语句得到的是 目录%tomcat%
path=path.substring(0,pos);
Document doc=db.parse(path+"/webapps/WebRoot/WEB-INF/sql-config.xml");

Element root=doc.getDocumentElement();
NodeList list=root.getElementsByTagName_r("sql-info");
for(int i=0;i<list.getLength();i++)
//得到第i个sql-info节点元素
Element name=(Element)list.item(i);

//在当前的sql-info节点中 取出所有的sql-name对应的节点
NodeList info=name.getElementsByTagName_r("sql-name");
//在当前当前的sql-info节点中 得到sql-name的多个节点,始终只取其中的第一个节点
Element nameelement=(Element)info.item(0);
//在当前当前的sql-info节点中 得到sql-name的多个节点,始终只取其中的第一个节点sql-name对应的文本的值
String namestr=nameelement.getFirstChild().getNodeValue();

//在当前的sql-info节点中 取出所有的sql-value对应的节点
NodeList sql=name.getElementsByTagName_r("sql-value");
//在当前当前的sql-info节点中 得到sql-value的多个节点,始终只取其中的第一个节点
Element sqlelement=(Element)sql.item(0);
//在当前当前的sql-info节点中 得到sql-value的多个节点,始终只取其中的第一个节点sql-value对应的文本的值
String sqlstr=sqlelement.getFirstChild().getNodeValue();
// System.out.println("sql语句为:"+sqlstr);
hashtable.put(namestr,sqlstr); //放入到Hashtable中

catch(Exception e)
System.out.println("读取sql-config.xml "+e.getMessage());

return hashtable;


public void addHashtable()
if(sqlv==null)
sqlv=new Vector();
Hashtable ht=getSQL(); //得到配置文件的Hashtable
sqlv.add(ht);


public Hashtable getHashtable()
Hashtable ht=null;
if(sqlv==null)
sqlv=new Vector();
if(sqlv.isEmpty())
addHashtable();

ht=(Hashtable)sqlv.get(0);
return ht;


public static void main(String[] args) throws Exception


XMLTest xt=new XMLTest();
Hashtable ht=xt.getSQL();
System.out.println(ht.get("在途"));

参考技术A <%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<%
Response.ContentType="application/xml"
Response.Charset="utf-8"
response.cachecontrol="no-cache"
response.addHeader "pragma","no-cache"
response.expires=-1
response.expiresAbsolute=now-1

db="file.mdb" '数据库路径,相对路径
set conn = server.CreateObject("adodb.connection")
conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(db)

Response.Write("<?xml version=""1.0"" encoding=""utf-8""?>")
set rs=Server.CreateObject("adodb.recordset")
rs.open "SELECT * FROM [file]",conn,1,1
if rs.Eof and rs.Bof then
Response.Write("<vcaster>")
Response.Write ("<item item_url=""no file"" item_title=""no file"">")
Response.Write("</item>")
Response.Write ("</vcaster>")
else
Response.Write("<vcaster>")
do while Not rs.Eof

Response.Write ("<item item_url="""&rs("fileurl")&""" item_title="""&rs("name")&""">")
Response.Write("</item>")

if rs.Eof then
Exit do
End if
rs.MoveNext
Loop
Response.Write ("</vcaster>")
End if
rs.Close
Set rs=Nothing
conn.Close
Set conn=Nothing
%>本回答被提问者和网友采纳

在mapper映射文件中批量插入数据的sql语句该怎么写?以及怎样在sql语句中接收list集合参数?

在mapper映射文件中批量插入数据的sql语句该怎么写?

单条数据插入的好好的,为什么要突然变成批量插入的呢?

为什么需要批量插入数据呢?因为加入你现在有一个100次的循环,每次循环你都需要往数据库里面插入一条数据,那么这样你连接数据库的次数就太多了,这样是比较耗费资源的,所以我们能不能一次性的批量地往数据库中插入所有的数据呢?这样我们只连接一次数据库就行了,节省资源,也可以提高速度。

怎样写批量插入

动态代理接口中传递的参数是一个list集合,如下图:

mapper映射文件中的插入语句如下图:

上面插入多条数据的时候需要用到标签去遍历动态代理接口中传递来的list集合参数,separator的作用是设置分隔符,也就是每遍历完集合中的一个元素会写一个分隔符,最后的格式也就是下面的这样,如下:

insert into budget_execution
(...),
(...),
(...)

collection的值就是动态代理接口中传递的参数的名字,因为这里的动态代理接口中传递的参数名字是"list",所以这里的collection的值也是"list"。其中集合中的每个元素是通过item设置的值接收的,这里也就是说i就代表集合中的元素,open和close的作用是:对遍历结果加上前后缀,比如我们现在循环遍历集合结束了,最后的遍历结果就是insert into Xxx values
(…),(…),(…)
这样我们是不需要对遍历结果(…),(…),(…)加上前后缀的,因为它满足我们插入sql语句的格式,因为我们此时把open和close的值都设置成""空字符串就行了。
但是如果要是查询sql语句的时候,传递了一个list集合参数,那么我们在sql语句中该怎么遍历list集合中的元素呢?如下图:


上图中的collection的值是reportIds,这是因为查询的动态代理接口里面传递过来的list集合的参数名字是reportIds。这里通过separator设置的分隔符也是逗号,那么遍历完所有的集合元素之后的结果如下:
select distinct category_id
from budget_report_category
where report_id in
reportId1,reportId2,reportId3…
这样肯定是不行的,因为这样的话sql语句会出现错误,所以我们必须要在前后都加上一个小括号,而小括号就是通过open和close来的值来加的,open表示对循环结果的前面加上一个东西,close表示对循环结果的后面加上一个东西,这里的open="(",close=")",那么最终的sql语句的形式如下:
select distinct category_id
from budget_report_category
where report_id in
(reportId1,reportId2,reportId3…)
这样就满足sql语句的规范了。

以上是关于在xml文件中插入sql语句的主要内容,如果未能解决你的问题,请参考以下文章

Mybatis XML映射文件

sql语句写在XML里面是一种框架吗?

flex中如何解析xml文件生成sql语句

三XML配置文件(笔记)

输入sql语句,将结果写入到xml文件

如何在xml文件中申明dynamic元素类型