日期:2014-05-20  浏览次数:20874 次

插入数据出现的异常问题
{ ...
   
  /**
  * 省略获取连接数据库的代码
  */

  //下面一行是向用户表中部分字段插入数据,我在测试中运行成功,这里就不写出来。
  ps=con.prepareStatement(insert into user(...) values(...));
  /**
  * 省略一些类似ps.setInt(1,"");
  */
  if(ps.executeUpdate()>0){
  ps=con.prepareStatement("insert into information(...) values(...)"); 
  /**
  *省略一些类似ps.setInt(1,"");
  */  
  }
  ...
}
问题来了,两条插入语句分别测试都成功了。弄成上面那种,就出现异常了:
No value specified for parameter 1
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:987)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:982)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:927)
at com.mysql.jdbc.PreparedStatement.checkAllParametersSet(PreparedStatement.java:2578)
at com.mysql.jdbc.PreparedStatement.fillSendPacket(PreparedStatement.java:2554)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2401)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2345)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2330)
这个问题怎么解决?是不是不能这样向两张表中插入数据啊?跪求高手解答

------解决方案--------------------
检查下代码吧. 看看具体是哪一个sql语句执行后报错的.
注意下参数类型是否匹配, setInt那么值肯定得int, 数据库该字段也应该为int.
然后参数个数是否正确.后面set参数值的个数是否和上面sql语句里面?号数量一致.
------解决方案--------------------
No value specified for parameter 1
很明显是第2个参数设置有问题。把你具体的SQL语句发出来看看、
------解决方案--------------------
肯定不是撒。
Java code

try{
    conn = ds.getConnection();
    conn.setAutoCommit(false);
    PreparedStatement pstmt1 = conn.prepareStatement(SQL_INSERT1);
    PreparedStatement pstmt2 = conn.prepareStatement(SQL_INSERT2);
    pstmt1.executeUpdate();
    pstmt2.executeUpdate();
    conn.commit();
} catch (SQLException e) {
    conn.rollback();
}

------解决方案--------------------
No value specified for parameter 1
第一个对象没值么,有可能是创建的最后一个prestmt对象
单步走一下循环呗
------解决方案--------------------
探讨

肯定不是撒。
Java code

try{
conn = ds.getConnection();
conn.setAutoCommit(false);
PreparedStatement pstmt1 = conn.prepareStatement(SQL_INSERT1);
PreparedStatement pstmt2 = conn.prepareSt……

------解决方案--------------------
有一个参数没有