各位老师:我的JSP为什么通过循环增加记录最多只能是3970条呀?而我用VFP做的程序可以将上万条记录通过循环语句插入进去。由于是初学,请老师们指教一下。先在些谢过。
环境:MYSQL5.0 tomcat6.0 JDK1.5
<%@ page import="java.sql.*"%>
<%@ page pageEncoding=´gbk´%>
<%@ page contentType="text/html;charset=gbk"%> <meta http-equiv="Expires" content="0">
<meta http-equiv="kiben" content="no-cache">
<html>
<style type="text/css">
<!--
.STYLE4 {font-size: 16px}
-->
</style>
<head>
<title>
显示所有小学成绩并录入成绩
</title>
<style type="text/css">
<!--
.STYLE1 {
font-size: large;
color: #000066;
font-family: "宋体";
font-weight: bold;
}
.STYLE5 {font-size: 14px}
-->
</style>
<style>
.white{background:white;}
.blue{background:#CCCCCC;}
.STYLE8 {color: #CCCCCC}
</style>
</head> <jsp:useBean id="mysqlbean" class="test.MYSQLBEAN"/>
<jsp:useBean id="ywbean" class="test.ywbean"/>
<body>
</body>
<%!
String w_xjh=" ";
int w_update=0;
%>
<%
for (int i=0;i<10000;i++){
w_xjh=String.valueOf(i);
w_update=mysqlbean.executeUpdate("insert into cj(nd,xx,xz,nj,bj,xjh,xm,kh) values (´高中´,´龙桥小学´,´单理´,´2009´,´01´,´"+w_xjh+"´,´学生´,´"+w_xjh+"´)");
if (w_update<1)
out.println(i);
}
%>
<script>
alert("数据增加完毕!系统将返回主页……");
</script>
<%response.setHeader("Refresh","0;URL=main.jsp");%>
</html>
环境:MYSQL5.0 tomcat6.0 JDK1.5
<%@ page import="java.sql.*"%>
<%@ page pageEncoding=´gbk´%>
<%@ page contentType="text/html;charset=gbk"%> <meta http-equiv="Expires" content="0">
<meta http-equiv="kiben" content="no-cache">
<html>
<style type="text/css">
<!--
.STYLE4 {font-size: 16px}
-->
</style>
<head>
<title>
显示所有小学成绩并录入成绩
</title>
<style type="text/css">
<!--
.STYLE1 {
font-size: large;
color: #000066;
font-family: "宋体";
font-weight: bold;
}
.STYLE5 {font-size: 14px}
-->
</style>
<style>
.white{background:white;}
.blue{background:#CCCCCC;}
.STYLE8 {color: #CCCCCC}
</style>
</head> <jsp:useBean id="mysqlbean" class="test.MYSQLBEAN"/>
<jsp:useBean id="ywbean" class="test.ywbean"/>
<body>
</body>
<%!
String w_xjh=" ";
int w_update=0;
%>
<%
for (int i=0;i<10000;i++){
w_xjh=String.valueOf(i);
w_update=mysqlbean.executeUpdate("insert into cj(nd,xx,xz,nj,bj,xjh,xm,kh) values (´高中´,´龙桥小学´,´单理´,´2009´,´01´,´"+w_xjh+"´,´学生´,´"+w_xjh+"´)");
if (w_update<1)
out.println(i);
}
%>
<script>
alert("数据增加完毕!系统将返回主页……");
</script>
<%response.setHeader("Refresh","0;URL=main.jsp");%>
</html>
上面的循环语句中的数据是没问题的,如果有问题的话怎么可以保存3900条左右呢?
我用VFP做的C/S软件操作CJ表(与JSP的是同一数据库的同一个表)7000多条一下子就保存。表的约束应该没问题吧。
JAVABEAN的代码的如下:package test;import java.io.PrintStream;
import java.sql.*;public class MYSQLBEAN
{ String sDBDriver;
String sConnStr;
Connection connect;
String DBUSER;
String DBPWD;
ResultSet rs; public MYSQLBEAN()
{
sDBDriver = "com.mysql.jdbc.Driver";
sConnStr = "jdbc:mysql://localhost:3306/cjglxt";
connect = null;
DBUSER = "root";
DBPWD = "lqxx_7474740";
rs = null;
try
{
Class.forName(sDBDriver);
}
catch (ClassNotFoundException classnotfoundexception)
{
System.err.println(classnotfoundexception.getMessage());
}
} public ResultSet executeQuery(String sql)
{
try
{
connect = DriverManager.getConnection(sConnStr, DBUSER, DBPWD);
PreparedStatement statement = connect.prepareStatement(sql);
rs = statement.executeQuery(sql);
}
catch (SQLException sqlexception)
{
System.err.println(sqlexception.getMessage());
}
return rs;
} public int executeUpdate(String sql)
{
int i = 0;
try
{
connect = DriverManager.getConnection(sConnStr, DBUSER, DBPWD);
PreparedStatement statement = connect.prepareStatement(sql);
i = statement.executeUpdate(sql);
}
catch (SQLException sqlexception)
{
System.err.println(sqlexception.getMessage());
}
return i;
}
}
而且,你这个做法是没有加入事物的概念的!
<%
for (int i=0;i <10000;i++){
w_xjh=String.valueOf(i);
w_update=mysqlbean.executeUpdate("insert into cj(nd,xx,xz,nj,bj,xjh,xm,kh) values (´高中´,´龙桥小学´,´单理´,´2009´,´01´,´"+w_xjh+"´,´学生´,´"+w_xjh+"´)");
if (w_update <1)
out.println(i);
}
%>
我是初学者,还劳驾指导一下。
{
int i = 0;
try
{
connect = DriverManager.getConnection(sConnStr, DBUSER, DBPWD);
PreparedStatement statement = connect.prepareStatement(sql);
i = statement.executeUpdate(sql);
statement.close();
connect.close();
}
catch (SQLException sqlexception)
{
System.err.println(sqlexception.getMessage());
}
return i;
}
}
另外,我原来的老师讲了一下。可他没时间帮我设计,劳驾你能参考一下吗?引用如下:
不能在你返回一个ResultSet的时候去强制关掉连接,那样之后,这个ResultSet会自动关掉不可用.也就是说你不要想在try...catch后面再加finally来关掉数据库连接,其他修改,插入,删除操作可以这样做使用PreparedStatement类方法:只创建一个数据库连接,建立一个PreparedStatement对象,当然在创建PreparedStatement对象时的SQL语句要有几个"?"符号,然后下面再循环处理多条记录,每条记录的参数set完毕后,都要executeUpdate.最后要记得关掉数据库连接你这BEAN有问题,所有的数据库连接都没关,难怪会这样.建议这样处理,你这BEAN里只建一个public方法,获取一个数据库连接.然后在其它类调用这个方法,只为得到一个数据库连接,完了之后再调用该连接的close方法.