各位老师:我的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> 

解决方案 »

  1.   

    检验一下数据,或者表的约束,还有  你这个mysqlbean.executeUpdate 方法
      

  2.   

    谢谢2楼老师的回答。
    上面的循环语句中的数据是没问题的,如果有问题的话怎么可以保存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;
    }
    }
      

  3.   

    建议加个try catch将for循环抱起来,看看是否是bean里抛出异常了!
    而且,你这个做法是没有加入事物的概念的!
      

  4.   

    三楼的victorxiang 和四楼的delphi_new 两位老师,我是初学JSP,对try{} catch{}还不熟。劳驾你们把这部分代码改一下好吗?
    <% 
    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); 

    %> 
      

  5.   

    是不是游标太多了?内存溢出?试一下在函数体内关闭connection,以及statment对象.
      

  6.   

    7楼的老师,怎么改一下2楼的BEAN代码呀,我是初学者。
      

  7.   

    怎么个连接和关闭法,代码是封装在CLASS里面的。
    我是初学者,还劳驾指导一下。
      

  8.   

    public int executeUpdate(String sql) 

    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; 


      

  9.   

    12楼的老师,照你的代码改了,还是不行。
    另外,我原来的老师讲了一下。可他没时间帮我设计,劳驾你能参考一下吗?引用如下:
    不能在你返回一个ResultSet的时候去强制关掉连接,那样之后,这个ResultSet会自动关掉不可用.也就是说你不要想在try...catch后面再加finally来关掉数据库连接,其他修改,插入,删除操作可以这样做使用PreparedStatement类方法:只创建一个数据库连接,建立一个PreparedStatement对象,当然在创建PreparedStatement对象时的SQL语句要有几个"?"符号,然后下面再循环处理多条记录,每条记录的参数set完毕后,都要executeUpdate.最后要记得关掉数据库连接你这BEAN有问题,所有的数据库连接都没关,难怪会这样.建议这样处理,你这BEAN里只建一个public方法,获取一个数据库连接.然后在其它类调用这个方法,只为得到一个数据库连接,完了之后再调用该连接的close方法.