首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >java.sql.SQLException:参数索引越界(2 >参数个数,为0)

java.sql.SQLException:参数索引越界(2 >参数个数,为0)
EN

Stack Overflow用户
提问于 2013-04-24 23:54:53
回答 5查看 61.1K关注 0票数 4
代码语言:javascript
运行
复制
public class Brothers extends javax.swing.JFrame {

    /**
     * declaring connection and SQL statement
     */

    Connection cn;
    Statement st;
    PreparedStatement pstmt=null;
    PreparedStatement pst;
    ResultSet rs;
    Object fname, mname, lname, bdate, nation, statusq,InstNo,  photo, combo, place, mimi; 
    int status;



    public Brothers() {        
        dbconnect _db = new dbconnect();

/*//////////////the above is just to show that I have two prepared statement each for each sql statement that i have //////////*/
        try {
            Class.forName("com.mysql.jdbc.Driver");
            //String unicode= "?useUnicode=yes&characterEncoding=UTF-8";
            cn = DriverManager.getConnection(_db.getHost(), _db.getUsername(), _db.getPassword());
            st=cn.createStatement(); 

 try{

        String Sql="INSERT INTO brothers(FirstName, MiddleName, LastName, BirthDate, BirthPlace, Nationality, InstituteNumber, Status, Picture) VALUES(?,?,?,?,?,?,?,?,?)";  
        pstmt=cn.prepareStatement(Sql);
        //pstmt.setString(1,txtTrial.getText());('?','?','?','?','?','?','?','?','?')
        pstmt.setString(2,txtFirtsName.getText());
        pstmt.setString(3,txtMiddleName.getText());
        pstmt.setString(4,txtLastName.getText());
        pstmt.setString(5,((JTextField)chooserBirthDate.getDateEditor().getUiComponent()).getText());
        pstmt.setString(6,txtPlacBirth.getText());

        String nations=combonation.getSelectedItem().toString();
        pstmt.setString(7,nations);
        pstmt.setString(8,txtInstituteNo.getText());


        pstmt.setObject(9,combostatus.getSelectedItem());
        pstmt.setBytes(10, person_image);

      pstmt.executeUpdate(Sql);

        JOptionPane.showMessageDialog(null, "Saving Successfull");

        }

        catch(Exception e){

          //JOptionPane.showMessageDialog(null, e);
          e.printStackTrace(); 
    }  

当我尝试使用上面的代码插入数据时,它抛出了一个异常:

代码语言:javascript
运行
复制
java.sql.SQLException: Parameter index out of range (10 > number of parameters, which is 9).
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1078)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:975)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:920)
    at com.mysql.jdbc.PreparedStatement.checkBounds(PreparedStatement.java:3813)
    at com.mysql.jdbc.PreparedStatement.setInternal(PreparedStatement.java:3795)

我已经检查过了,但是我找不到问题所在,请帮帮我!

EN

回答 5

Stack Overflow用户

发布于 2013-04-24 23:58:26

您将在位置%2而不是%1处开始插入

代码语言:javascript
运行
复制
 pstmt.setString(2,txtFirtsName.getText());

将其更改为

代码语言:javascript
运行
复制
pstmt.setString(1,txtFirtsName.getText());

对最后一个将出现的其他对象执行相同的操作

代码语言:javascript
运行
复制
pstmt.setBytes(9, person_image);
票数 6
EN

Stack Overflow用户

发布于 2014-06-18 19:52:14

问号?的数量必须等于该参数。

如果你有7个参数,那么你的语句中应该有7个问号,即insert into table name values(?,?,?,?,?,?,?)

票数 3
EN

Stack Overflow用户

发布于 2013-04-24 23:56:41

您的SQL语句中只有9个参数。

代码语言:javascript
运行
复制
String Sql="INSERT INTO brothers(FirstName, MiddleName, LastName, BirthDate, BirthPlace, Nationality, InstituteNumber, Status, Picture) VALUES(?,?,?,?,?,?,?,?,?)";

当您注释掉第一个setString方法调用时,您应该已经为后面的调用重新编号了参数索引。它们的编号应该是1- 9,而不是2- 10。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16196670

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档