Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将字段值插入数据库_Java_Mysql - Fatal编程技术网

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();
    }
}