“已准备好”的语句参数错误;JAVA参数索引超出范围(1>;参数数量,即0)";

“已准备好”的语句参数错误;JAVA参数索引超出范围(1>;参数数量,即0)";,java,Java,我试图在数据库中插入一个变量 这是我的密码: public static void main(String[] args) throws SQLException { Connection connection =null; DBhelper helper = new DBhelper(); PreparedStatement statement = null; ResultSet resultSet; try{ connection= h

我试图在数据库中插入一个变量

这是我的密码:

public static void main(String[] args) throws SQLException {
    Connection connection =null;
    DBhelper helper = new DBhelper();
    PreparedStatement statement = null;
    ResultSet resultSet;
    try{
        connection= helper.getConnection();

        System.out.println("baglantı olustu");

        String sql = "INSERT INTO pandemi(toplamvirus) VALUES ('?') ";
        statement = connection.prepareStatement(sql);
        statement.setInt(1,2);
        statement.executeUpdate(sql);
        int result = statement.executeUpdate();
    }
    catch (SQLException exception){
        helper.showErrorMessage(exception);
    }
    finally {
        statement.close();
        connection.close();
    }



    //String sql = "UPDATE pandemi SET toplamvirus='ff' ";





}
错误是:

baglantı olustu
Error: Parameter index out of range (1 > number of parameters, which is 0).
Error code : 0
数据库是:

将参数序号和值传递给
setInt
您使用的方法不正确。第一个参数是序号(在Javadoc中作为索引错误地记录)。第一个占位符是#1,第二个占位符是#2,依此类推。您只有一个
占位符。或者您试图传递一个值2以插入数据库?你的问题不清楚

使用裸体
此外,您还需要删除文件中
占位符周围的单引号。使用
“?”
意味着您希望在数据库中插入一个由问号组成的字符串。有了单引号,SQL语句中就没有占位符了。因此,您的
setInt
方法将失败。如果使用裸
,则问号将被识别为占位符

顺便说一下,我建议养成使用SQL语句终止符(分号)的习惯

String sql = "INSERT INTO pandemi ( toplamvirus ) VALUES ( ? ) ; ";
有关更多信息,请参见使用H2数据库引擎的完整示例应用程序,演示在准备好的语句中使用占位符的
INSERT

将参数序号和值传递给
setInt
您使用的方法不正确。第一个参数是序号(在Javadoc中作为索引错误地记录)。第一个占位符是#1,第二个占位符是#2,依此类推。您只有一个
占位符。或者您试图传递一个值2以插入数据库?你的问题不清楚

使用裸体
此外,您还需要删除文件中
占位符周围的单引号。使用
“?”
意味着您希望在数据库中插入一个由问号组成的字符串。有了单引号,SQL语句中就没有占位符了。因此,您的
setInt
方法将失败。如果使用裸
,则问号将被识别为占位符

顺便说一下,我建议养成使用SQL语句终止符(分号)的习惯

String sql = "INSERT INTO pandemi ( toplamvirus ) VALUES ( ? ) ; ";


有关更多信息,请参见使用H2数据库引擎的完整示例应用程序,该应用程序演示了在准备好的语句中使用占位符的
INSERT

非常确定偏移量是基于零的,即正确的调用是
statement.setInt(0,2)使用字符串sql=“插入pandemi(toplamvirus)值(?”;没有撇号。它认为你插入了?查拉特按照你的建议做了。但是现在,这里有另一个错误:错误:您的SQL语法有一个错误;请查看与MySQL服务器版本对应的手册,以了解在“?)”附近使用的正确语法排队1@ggb667我想我做到了。。错误消失了!!但变量并没有插入到数据库中。不管怎样,非常感谢SQL,偏移量是基于1的。另外,您正在调用update两次。语句执行更新(sql)//不要这样做,您已经将SQL设置为该语句要在构造函数中处理的SQL。int result=statement.executeUpdate();您应该消除“围绕的字符”,确保偏移量是基于零的,即正确的调用是
statement.setInt(0,2)使用字符串sql=“插入pandemi(toplamvirus)值(?”;没有撇号。它认为你插入了?查拉特按照你的建议做了。但是现在,这里有另一个错误:错误:您的SQL语法有一个错误;请查看与MySQL服务器版本对应的手册,以了解在“?)”附近使用的正确语法排队1@ggb667我想我做到了。。错误消失了!!但变量并没有插入到数据库中。不管怎样,非常感谢SQL,偏移量是基于1的。另外,您正在调用update两次。语句执行更新(sql)//不要这样做,您已经将SQL设置为该语句要在构造函数中处理的SQL。int result=statement.executeUpdate();你应该去掉“周围的人物”?我按照你的建议做了。但不是,我得到了这个错误:错误:您的SQL语法有一个错误;请查看与MySQL服务器版本对应的手册,以了解在“?)”附近使用的正确语法排队1@Emre将SQL的文本打印到控制台,并与其他示例进行比较。请参阅。并将该SQL文本从控制台复制到管理员应用程序,然后手动运行以消除问题中的Java,并集中精力理解正确的SQL语法。请尝试以下操作:
String SQL=“INSERT INTO pandemi(toplamvirus)VALUES(?)
换句话说,在字符串文本中删除分号。(也许我应该投票反对一个错误的答案;-)@Abra你是说分号不是SQL中的语句终止符吗?我按照你的建议做了。但不是,我得到了这个错误:错误:您的SQL语法有一个错误;请查看与MySQL服务器版本对应的手册,以了解在“?)”附近使用的正确语法排队1@Emre将SQL的文本打印到控制台,并与其他示例进行比较。请参阅。并将该SQL文本从控制台复制到管理员应用程序,然后手动运行以消除问题中的Java,并集中精力理解正确的SQL语法。请尝试以下操作:
String SQL=“INSERT INTO pandemi(toplamvirus)VALUES(?)
换句话说,在字符串文本中删除分号。(也许我应该投票反对一个错误的答案;-)@Abra你是说分号不是SQL中的语句终止符?