MYSQL确实不够稳定不够快,我做的系统刚换成SQLserver了!!至于你说的那个循环 *** 作当然是没什么问题了,前提是你的数据是不是海量数据(就是记录很多),如果不是那就安心使用啦!!!只要你写的代码没有逻辑错误呵呵,另外我说的数据过多会不稳定是指数据库所有表整个记录在50万条以上,单表最多记录5万条,游标嵌套超过3层的情况,这个谁也没规定,这是我几个项目总结出来的实战经验而已,仅供参考!!!
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();
}
}
}
}
}
真的不明白,为什么两条sql语句,都是同时查一个表??
public interface Statementextends Wrapper
用于执行静态 SQL 语句并返回它所生成结果的对象。
在默认情况下,同一时间每个 Statement 对象在只能打开一个 ResultSet 对象。因此,如果读取一个 ResultSet 对象与读取另一个交叉,则这两个对象必须是由不同的 Statement 对象生成的。如果存在某个语句的打开的当前 ResultSet 对象,则 Statement 接口中的所有执行方法都会隐式关闭它。
这当然是不行的了,上面的告诉你的也是错误的,因为原因在于你循环的时候进行了数据库的查询,所以每次都是新的数据,指针当然要从第一条开始了。
所以不是你的循环的错误,而是你数据库查询代码位置的错误
要这样写
$num=mysql_query("select
from
china_city
where
parentid=0");
$n=
mysql_num_rows
($num);
for($i=1;$i<=$n;$i++){
${"row"$i}=mysql_fetch_array($num);
echo
$i"
"${"row"$i}['city']"
";
}
一般都是用foreach或while写的
foreach(mysql_fetch_array($num)
as
$key=>$value){}
while($row
=mysql_fetch_array($num)){}
MSSQL 数据库下实现:
CREATE TABLE #TEMP (单号 INT, 价格 FLOAT)INSERT INTO #TEMP VALUES(2,50)
INSERT INTO #TEMP VALUES(1,50)
INSERT INTO #TEMP VALUES(3,60)
INSERT INTO #TEMP VALUES(4,60)
INSERT INTO #TEMP VALUES(7,60)
INSERT INTO #TEMP VALUES(8,60)
DECLARE @REFID INT
, @ORDERID VARCHAR(30)
, @JIAGE VARCHAR(100)
SELECT REFID = IDENTITY(INT , 1, 1), DealFlg = 0, 单号,价格
INTO #Temp_Lists
FROM #TEMP
SELECT @REFID = MIN(REFID) FROM #Temp_Lists WHERE DealFlg = 0
CREATE TABLE #TEMP1 (单号 VARCHAR(100), 价格 FLOAT)
DECLARE @TEMPDANHAO VARCHAR
WHILE @REFID IS NOT NULL
BEGIN
SELECT @ORDERID = 单号,@JIAGE = 价格 FROM #Temp_Lists WHERE REFID = @REFID
IF EXISTS(SELECT 价格 FROM #TEMP1 WHERE 价格 = @JIAGE)
BEGIN
SELECT @TEMPDANHAO = 单号 FROM #TEMP WHERE 单号 = @ORDERID
PRINT @ORDERID
UPDATE #TEMP1 SET 单号 = convert(varchar(10),单号)+ ',' + @TEMPDANHAO WHERE 价格 = @JIAGE
END
ELSE
BEGIN
INSERT INTO #TEMP1 SELECT FROM #TEMP WHERE 单号 = @ORDERID
END
UPDATE #Temp_Lists SET DealFlg = 1 WHERE REFID = @REFID
SELECT @REFID = MIN(REFID) FROM #Temp_Lists WHERE DealFlg = 0 AND REFID > @REFID
END
SELECT FROM #TEMP1
DROP TABLE #TEMP1
DROP TABLE #Temp_Lists
DROP TABLE #TEMP
以上就是关于MYSQL数据库能否承受循环查询全部的内容,包括:MYSQL数据库能否承受循环查询、java如何循环查数据库同一张表、数据库两表两循环查询等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)