java - 将字段值插入数据库

标签 java mysql

我似乎无法弄清楚为什么会出现此异常:SQLException:参数索引超出范围(1 > 参数数量,即 0)。 我的 mysql 连接器版本是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();
    }
}

最佳答案

您没有为该方法中的statement 赋值,并且您正在使用 overload of executeUpdate from Statement ...而不是 PreparedStatement 中的无参数。

我怀疑您实际上想使用 Connection.prepareStatement 分配该语句:

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

基本上,您不应该尝试重复使用语句。就我个人而言,我也尝试不重用连接,使用连接池来处理底层连接的重用,但这是另一回事。

关于java - 将字段值插入数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22873205/

相关文章:

java - 如何避免 Fortify 中的误报 "Null Dereference"错误

java - 在 JAX-WS 中引发自定义异常

java - 使用Bundle传递数据时出现空指针异常

java - jMockit - 如何使构造函数调用返回模拟

php - mysql_real_escape_string 未显示错误

MySQL对三个相互连接的表进行连接查询

java - 暂时禁用 Action 监听器

sql - 从表中复制 "sliding window"数据的好策略?

mysql - mysql奇怪的 "Duplicate entry"错误

PHP 重置 $POST 值并列出所有结果