Java 将字段值插入数据库
我似乎不明白为什么会出现此异常:Java 将字段值插入数据库,java,mysql,Java,Mysql,我似乎不明白为什么会出现此异常:SQLException:Parameter index超出范围(1>参数数量,即0)。我的mysql connector版本是5.1.29。这可能是此版本的问题,还是我没有正确设置查询 刮伤: public void actionPerformed(ActionEvent e) { String query = "INSERT INTO racebikes" + "(bikename, country_of_origin, cos
SQLException:Parameter index超出范围(1>参数数量,即0)。
我的mysql connector版本是5.1.29。这可能是此版本的问题,还是我没有正确设置查询
刮伤:
public void actionPerformed(ActionEvent e) {
String query = "INSERT INTO racebikes"
+ "(bikename, country_of_origin, cost) VALUES"
+ "(?,?,?)";
try {
statement.setString(1, (String)winners_combo_box.getSelectedItem());
statement.setString(2, winner_fields[0].getText());
statement.setFloat(3, Float.parseFloat(winner_fields[1].getSelectedText()));
statement.executeUpdate(query);
} catch(SQLException e1) {
e1.printStackTrace();
}
}
在该方法中,您没有为
语句
赋值,而是使用。。。而不是PreparedStatement
中的无参数语句
我怀疑您实际上想使用以下方式分配语句:
基本上,您不应该试图重用语句。就个人而言,我也会尝试不重用连接,使用连接池来处理基础连接的重用,但那是另一回事。创建一个准备好的语句,然后设置valuesCool名称!我明白我做错了什么,谢谢你的帮助:-)谢谢你指出这一点。同时,感谢你让我意识到在finally block中结束我的陈述是很重要的。你能解释一下我为什么不能重用语句吗?@TheGrayFox:我得到的代码没有重用语句——我把它变成了一个局部变量,所以你可以删除你的实例变量,例如。
public void actionPerformed(ActionEvent e) {
String query = "INSERT INTO racebikes"
+ "(bikename, country_of_origin, cost) VALUES"
+ "(?,?,?)";
// TODO: Connection management?
PreparedStatement statement = conn.prepareStatement(query);
try {
statement.setString(1, (String)winners_combo_box.getSelectedItem());
statement.setString(2, winner_fields[0].getText());
statement.setFloat(3, Float.parseFloat(winner_fields[1].getSelectedText()));
statement.executeUpdate();
} catch(SQLException e1) {
e1.printStackTrace();
// TODO: Don't just pretend it worked...
} finally {
statement.close();
}
}