import javasqlConnection;
import javasqlDriverManager;
import javasqlPreparedStatement;
import javasqlResultSet;
import javasqlSQLException;
//stmtexecuteUpdate("create table People(name varchar(255),A int,B int)");
//stmtexecuteUpdate("insert into People values('张三',1,0)");
//stmtexecuteUpdate("insert into People values('李四',2,1)");
//stmtexecuteUpdate("insert into People values('王五',3,1)");
//stmtexecuteUpdate("insert into People values('赵云',4,2)");
//stmtexecuteUpdate("insert into People values('张飞',5,3)");
public class Test {
private static void query(Connection conn,String sql,int a) {
PreparedStatement stmt = null;
ResultSet rs = null;
try {
stmt = connprepareStatement(sql);
stmtsetInt(1, a);
rs = stmtexecuteQuery();
while (rsnext()) {
Systemoutprintln(rsgetString("name")+":"+rsgetInt("A"));
query(conn,sql,rsgetInt("A"));
}
} catch (SQLException e) {
eprintStackTrace();
} finally {
if (rs != null) {
try {
rsclose();
rs=null;
Systemoutprintln(a+":rs closed");
} catch (SQLException e) {
eprintStackTrace();
}
}
if (stmt != null) {
try {
stmtclose();
stmt=null;
Systemoutprintln(a+":stmt closed");
} catch (SQLException e) {
eprintStackTrace();
}
}
}
Systemoutprintln("===============================");
}
public static void main(String[] args) {
Connection conn = null;
try {
conn = DriverManagergetConnection("jdbc:derby:E:/Derby/test");
String sql="select from people where B=";
query(conn,sql, 1);
} catch (SQLException e) {
eprintStackTrace();
} finally {
if (conn != null) {
try {
connclose();
Systemoutprintln("Connection关闭。");
} catch (SQLException e) {
eprintStackTrace();
}
}
}
}
}
根据你的语义描述可以用这样的方法来查询
$arr = ["1111111","12345","qwe"];$result = [];
foreach ($arr as $val){
$result[] = $tail_fibers->distinct ( true )->where("type='$val'")->select();
}
不知道你用的是哪个SQL组件,但是大体都会提供类似 ->whereIn('type',$arr) 这样的方法,等于直接用SQL的IN语句进行多个值查询,效率更高
SQL IN *** 作符
在SQL Server数据库开发中,涉及多表数据联合查询时,一般都会想当然的Inner Join、Left Join,也经常出现数据量一大查询就特别慢的问题。如果不关联表,而是在循环中,需要时再查询数据库,获取其他表的数据。本文通过以下的例子来验证查询的方式和速度的关系。
首先看看在游标中,关联表循环和循环中再查询单个数据比较:
(PS:Order表中数据共5000多一点,Member表中数据近16000)
SQL代码 关联表
Declare @idx int,@idxCount int,@MbCd varchar(20) Set @idxCount = 0 Declare Cur_Test Cursor For Select MMB_CD From Order O Inner Join Member M On OMB_CD=MMB_CD Open Cur_Test Fetch Next From Cur_Test Into @MbCd While (@@FETCH_STATUS = 0) Begin Set @idx = 1 Set @idxCount = @idxCount + @idx Fetch Next From Cur_Test Into @MbCd End Close Cur_Test DEALLOCATE Cur_Test print @idxCount
执行时间:34秒
SQL代码 不关联表
Declare @idx int,@idxCount int,@MbCd varchar(20) Set @idxCount = 0 Declare Cur_Test Cursor For Select MB_CD From ORDER Open Cur_Test Fetch Next From Cur_Test Into @MbCd While (@@FETCH_STATUS = 0) Begin Set @idx = 0 Select @idx = COUNT() From MEMBER Where MB_CD=@MbCd Set @idxCount = @idxCount + @idx Fetch Next From Cur_Test Into @MbCd End Close Cur_Test DEALLOCATE Cur_Test print @idxCount
执行时间:18秒
确实,不关联表快了将近一倍。
不过,考虑到实际使用中,如果是代码中循环执行查询语句去查询单个数据,打开数据库连接、关闭数据库连接也需要消耗时间,而在游标中是不需要的,所以,也在C#中测试了一下。
首先是未关联表查询数据,代码如下:
C#代码 关联表
int intIdxCount = 0; DateTime dtmBegin = DateTimeNow; using (DataTable dtList = new SqlDBOperator()exeSqlForDataTable("Select MMB_CD,OORD_NO From ORDER O Inner Join MEMBER M On MMB_CD=OMB_CD")) 5 { foreach (DataRow dr in dtListRows) { intIdxCount += 1; } } DateTime dtmEnd = DateTimeNow; thislitlMsgText = "开始执行:" + dtmBeginToString() + "<br/>结束执行:" + dtmEndToString() + "<br/>";
执行结果:
开始执行:2011/7/19 22:15:31
结束执行:2011/7/19 22:15:31
大约 0 秒
C#代码 不关联表
DataTable dtTemp = new DataTable(); DateTime dtmBegin = DateTimeNow; using (DataTable dtList = new SqlDBOperator()exeSqlForDataTable("Select MB_CD From ORDER")) { foreach (DataRow dr in dtListRows) { dtTemp = new SqlDBOperator()exeSqlForDataTable("select count() From MEMBER where MB_CD='" + dr["MB_CD"]ToString()Trim() + "'"); } } DateTime dtmEnd = DateTimeNow; thislitlMsgText = "开始执行:" + dtmBeginToString() + "<br/>结束执行:"+dtmEndToString();
执行结果:
开始执行:2011/7/19 21:56:22
结束执行:2011/7/19 21:56:43
大约21秒
通过上面的实验得出:当数据量过大时关联查询会使执行速度过慢,我们在实际的查询过程中应根据实际情况来选择使用何种查询方式。
以上就是关于java如何循环查数据库同一张表全部的内容,包括:java如何循环查数据库同一张表、php如何将一个数组中的元素一个一个取出来循环查询数据库、查询数据量大时,关联表查询与循环查询哪个更好等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)