本节内容,非应用程序员可以跳过,不影响正常阅读。
在用JDBC模式调用集算器时,可以配置一个splx/spl/dfx脚本文件作为JDBC网关,在JDBC中执行的所有SQL语句都交由这个脚本处理执行。在网关脚本中通常需要读入SQL语句及使用的参数,并在脚本中处理数据库连接等操作,执行查询并返回结果,如下面的网关文件executeSQL.splx:
|
A |
B |
1 |
=connect("demo") |
|
2 |
if args==null || args.len()<2 |
>B1=A1.query(sql) |
3 |
else |
>B1=A1.query(sql,args(1),args(2)) |
4 |
>A1.close() |
return B1 |
在这个脚本文件中,需要用到下面两个参数:
在网关文件中,上面的两个参数是必须的,前一个传入调用时传入的SQL语句,后一个传入执行SQL时传入的各个参数。在这里设定了最后一个参数为动态参数The last parameter is dynamic,使得sql中使用的参数可以作为序列传递给args。
在使用JDBC网关时,需配置文件raqsoftConfig.xml的<JDBC>节点中的<gateway>来指定网关文件,如需使用数据源,需要加载Runtime或者Server中的数据连接配置:
<JDBC>
<load>Runtime</load>
<gateway>executeSQL.splx</gateway>
</JDBC>
关于更多JDBC标签介绍可参考配置raqsoftConfig.xml小节。
配置后,在用Java调用集算器JDBC时,所执行的SQL都将交由网关文件处理,如:
//执行SQL,?代表使用的参数
st =con.prepareCall("select * from CITIES where STATEID = ? and POPULATION > ?");
//设置参数
st.setObject(1, 5);
st.setObject(2, 400000);
//执行存储过程
st.execute();
//获取结果集
ResultSet rs1 = st.getResultSet();
//直接执行无参数的SQL得到结果集
ResultSet rs2 = con.createStatement().executeQuery("select STATEID,NAME,ABBR,CAPITAL from STATES where STATEID<8");
由于在网关文件中判断了未输入参数的情况,因此也可以执行无参数的SQL语句。查询结果rs1和rs2输出后分别如下:
在这里,数据源的连接和关闭是在网关文件中处理的,如果使用默认连接的数据源,也可以用数据源名称直接执行查询,此时不必在使用结束后关闭数据库连接。
如果在JDBC中配置了远程服务器之后,那么使用网关文件时,与其它数据文件的情况是相同的:默认情况下执行计算时会优先使用本地文件,如果连接参数中设置了?onlyServer=true,则会使用服务器端的网关文件。