JDBC插入含自增主键的表时出现SQLException问题求助
问题解决:自增主键插入报错
错误原因分析
- SQL字段列表写法错误:你在
insert语句的字段列表里写了null,这是错误用法。自增主键id无需手动指定,数据库会自动生成,字段列表只需包含要插入的name、amt、expire三个字段即可。 - 参数索引不匹配:原SQL写了4个
?,但你只设置了第2、3、4位的参数,第1位未赋值,触发No value specified for parameter 1异常;改成3个?时,因原字段列表含错误的null(等效4个字段),又会出现参数数量不匹配的越界错误。
修正后的代码
int insertItems(String name, double amt, String exp) throws Exception { Connection con = getConnection(); // 修正SQL:仅保留需要插入的字段,values对应3个占位符 PreparedStatement ps = con.prepareStatement("insert into itemsList (name, amt, expire) values (?, ?, ?);"); // 参数从第1位开始对应占位符 ps.setString(1, name); ps.setDouble(2, amt); ps.setString(3, exp); int n = ps.executeUpdate(); // 关闭资源,避免泄漏 ps.close(); con.close(); return n; }
关键说明
- 自增主键字段不需要出现在
insert语句的字段列表中,数据库会自动生成递增数值。 PreparedStatement的参数索引从1开始,必须和SQL中?的位置一一对应。- 务必添加资源关闭逻辑(或使用try-with-resources语法),防止数据库连接资源泄漏。
内容的提问来源于stack exchange,提问作者user17282548
相关产品推荐
相关产品推荐

