sql数据库多表联合动态查询

sql数据库多表联合动态查询,第1张

select * from (

select * from info_200601

union

select * from info_200602

union

.

.

. )

oder by sn desc

没有验证,不知道行不行

你这跟struts2没关系,需要一个定时器,定时去跑你的查询库表代码就OK了。

如果你的程序是需要将查询结果展示在jsp页面上,你需要在jsp页面上使用js写定时器代码,参考SetInterval方法。

如果你的程序是桌面应用程序,你可以使用java的定时器Timer。当然,你的项目中如果使用了spring,那有更好的解决方案Quartz。

具体问题要具体分析了。

OTL介绍:

OTL 是Oracle, Odbc and DB2-CLI Template Library 的缩写,是一个C++ *** 控关系数据库的模板库,最新版本4.0.104,参见http://otl.sourceforge.net/,下载地址http://otl.sourceforge.net/otlv4_h.zip。

优点:a. 跨平台

b. 运行效率高,与C语言直接调用API相当

c. 开发效率高,起码比ADO.net使用起来更简单,更简洁

d. 部署容易,不需要ADO组件,不需要.net framework 等

缺点:

a. 只有C++才可以使用她

b. 说明以及范例不足(暂时性的)

总的说来,对于C++程序员而言,使用OTL *** 作关系数据库是最好的选择,其网站上有很多的范例,本人在这里对使用OTL调用Oracle的存储函数(存储函数比存储过程多个返回值)作一个示范,而其他的比如查询、更新、存储过程等就太简单了,直接看otl.sourceforge.net的范例 。

Oracle 存储函数 TEST 代码:

( a In Integer, b Out Integer, c in out Integer, d In Long ) Return Long

is

begin

b := a

c := 2 * c

Return( '<' || d || '>' )

end

说明:Oracle中的long不是C/C++中的长整型,而是varchar_long,对应着OTL中的otl_long_string,这是一种很复杂的类型,本人就用它来举例。

C++调用TEST的代码:

#include <string>

#include <iostream>

//#define OTL_ORA9I // 使用这个宏就表示使用Oracle9i的API,而不是ODBC API

#define OTL_ODBC// 使用这个宏就表示使用通用的ODBC API

#include "otlv4.h"

using namespace std

void main( void )

{

otl_connect::otl_initialize()

try {

otl_connect db

db.rlogon( "Driver={Microsoft ODBC for Oracle}Server=ZZZUid=XXXPwd=YYY" )

// db.set_max_long_size(?)如果varchar_long长度非常长,超过默认值的话,你需要这一句

otl_stream o( 1, "{ :E<varchar_long,out>= call TEST( :A<int,in>,:B<int,out>,:C<int,inout>,:D<varchar_long,in&g t) }", db )

o.set_commit(0)

int a = 1

int b = 0

int c = 2

otl_long_string d( "abc", 0, 3 )

otl_long_string e

o <<a <<c <<d

o >>e >>b >>c

cout <<"b = " <<b <<'n'

cout <<"c = " <<c <<'n'

cout <<"e = " <<e.v <<'n'

//db.commit()

db.logoff()

}

catch( otl_exception&p ) {

cerr <<p.msg <<"n"

<<p.stm_text <<"n"

<<p.sqlstate <<"n"

<<p.var_info <<"n"

<<endl

}

}

说明:"{ :E<varchar_long,out>= call TEST( :A<int,in>,:B<int,out>,:C<int,inout>,:D<varchar_long,in&g t) }"这一句中的A、B、C、D、E就是一个名字,随各人喜欢可写成其他任何名称。但这个格式需要注意,它不是

"{ call :Name1<int,out>:= function( Name2<int,in>}"

也不是

"{ call :Name1<int,out>\:= function( Name2<int,in>}"

而是

"{ :Name1<int,out>= call function( Name2<int,in>}"

这一点和otl.sourceforge.net上的说明不一样。


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

原文地址:https://54852.com/sjk/10010982.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存