java web数据库PreparedStatement的问题(菜鸟系列问题,没分了)

时间:2022-09-30 21:14:42
数据来源String str[][]={{"1","a"},{"2","b"},{"3","c"},{"4","d"},{"5","b"},{"6","f"},{"7","e"},{"8","f"},{"9","g"},{"10","y"}};

处理代码:
Data da=new Data();                             //数据库获取连接
Connection conn=da.getConnection();
DatabaseMetaData dbmData = conn.getMetaData();

if (dbmData.supportsBatchUpdates())
{
      PreparedStatement psStatement = null;
      String sql="insert into test (id,name)values(?,?)";
      psStatement = conn.prepareStatement(sql);  

      int i=1;
      while(i<str.length)
      {
psStatement.setInt(1,Integer.parseInt(str[i][0]));

psStatement.addBatch();
psStatement.setString(2,str[i][1]);
psStatement.addBatch();
i++;
      }
        psStatement.executeUpdate(); 
 }
运行结果:数据库中只有10,y两个数据。求解决指导!

8 个解决方案

#1


该回复于2012-03-13 16:01:01被版主删除

#2


覆盖了,

while(i<str.length){
  PreparedStatement psStatement = null;
  String sql="insert into test (id,name)values(?,?)";
  psStatement = conn.prepareStatement(sql);
  psStatement.setString(1,str[i][0]);
  psStatement.setString(2,str[i][1]);
  psStatement.executeUpdate(); 
  psStatement.close();
}

#3


psStatement.executeUpdate(); 

改成

psStatement.execute Batch(); 

#4


引用 2 楼 ce2010 的回复:
覆盖了,

Java code


while(i<str.length){
  PreparedStatement psStatement = null;
  String sql="insert into test (id,name)values(?,?)";
  psStatement = conn.prepareStatement(sql);
  psStatement.……


我知道覆盖了,那怎么解决了?

#5


引用 3 楼 flagiris 的回复:
psStatement.executeUpdate(); 

改成

psStatement.executeBatch();


我前面使用的也是这样,但是有异常
com.microsoft.jdbc.base.BaseBatchUpdateException: [Microsoft][SQLServer 2000 Driver for JDBC]Invalid parameter binding(s).
at com.microsoft.jdbc.base.BasePreparedStatement.executeBatchEmulation(Unknown Source)
at com.microsoft.jdbc.base.BasePreparedStatement.executeBatch(Unknown Source)
at org.apache.tomcat.dbcp.dbcp.DelegatingStatement.executeBatch(DelegatingStatement.java:297)
at org.apache.tomcat.dbcp.dbcp.DelegatingStatement.executeBatch(DelegatingStatement.java:297)
at com.servlet.Test.puess(Test.java:97)
at com.servlet.Test.doGet(Test.java:36)

#6


引用 3 楼 flagiris 的回复:
psStatement.executeUpdate(); 

改成

psStatement.executeBatch();


搞定了,还需要把第一个psStatement.addBatch();去掉。

#7


psStatement.executeUpdate(); 写在while里面。

#8


第一句 psStatement.addBatch(); 删掉 试试

#1


该回复于2012-03-13 16:01:01被版主删除

#2


覆盖了,

while(i<str.length){
  PreparedStatement psStatement = null;
  String sql="insert into test (id,name)values(?,?)";
  psStatement = conn.prepareStatement(sql);
  psStatement.setString(1,str[i][0]);
  psStatement.setString(2,str[i][1]);
  psStatement.executeUpdate(); 
  psStatement.close();
}

#3


psStatement.executeUpdate(); 

改成

psStatement.execute Batch(); 

#4


引用 2 楼 ce2010 的回复:
覆盖了,

Java code


while(i<str.length){
  PreparedStatement psStatement = null;
  String sql="insert into test (id,name)values(?,?)";
  psStatement = conn.prepareStatement(sql);
  psStatement.……


我知道覆盖了,那怎么解决了?

#5


引用 3 楼 flagiris 的回复:
psStatement.executeUpdate(); 

改成

psStatement.executeBatch();


我前面使用的也是这样,但是有异常
com.microsoft.jdbc.base.BaseBatchUpdateException: [Microsoft][SQLServer 2000 Driver for JDBC]Invalid parameter binding(s).
at com.microsoft.jdbc.base.BasePreparedStatement.executeBatchEmulation(Unknown Source)
at com.microsoft.jdbc.base.BasePreparedStatement.executeBatch(Unknown Source)
at org.apache.tomcat.dbcp.dbcp.DelegatingStatement.executeBatch(DelegatingStatement.java:297)
at org.apache.tomcat.dbcp.dbcp.DelegatingStatement.executeBatch(DelegatingStatement.java:297)
at com.servlet.Test.puess(Test.java:97)
at com.servlet.Test.doGet(Test.java:36)

#6


引用 3 楼 flagiris 的回复:
psStatement.executeUpdate(); 

改成

psStatement.executeBatch();


搞定了,还需要把第一个psStatement.addBatch();去掉。

#7


psStatement.executeUpdate(); 写在while里面。

#8


第一句 psStatement.addBatch(); 删掉 试试