【问题标题】:ArrayIndexOutOfBoundsException inserting JTable data to SQL databaseArrayIndexOutOfBoundsException 将 JTable 数据插入 SQL 数据库
【发布时间】:2015-02-19 15:50:10
【问题描述】:

我做了一个铁路管理系统项目,想将文本字段和 Java 表中的值插入 MySQL 数据库。我怎样才能摆脱这个错误?请帮忙!!

int rows = jTable1.getRowCount();
for(int row = 0; row<rows ; row++){
    int index=1;
    String S_No = (String) jTable1.getValueAt(row, 1);
    String Name = (String) jTable1.getValueAt(row, 2);
    String Age = (String) jTable1.getValueAt(row, 3);
    String Gender = (String) jTable1.getValueAt(row, 4);
    String berth_preference = (String) jTable1.getValueAt(row, 5);
    String Quota = (String) jTable1.getValueAt(row, 6);
    String tno =(String) cb1.getSelectedItem();
    String tname =(String) cb2.getSelectedItem();
    String clas =(String) cb3.getSelectedItem();
    String tic= tick.getText();
    String frms=frm.getText();
    String tos=to.getText();
    String boarding=bp.getText();
    String reser=ru.getText();
    String jdate=date.getText();
    String pnr=l1.getText();

    try{
        Class.forName("java.sql.Driver");
        con=DriverManager.getConnection("jdbc:mysql://localhost/railway","root","ridhi");
        st =con.prepareStatement("INSERT INTO pnr(pnr_no,Train_Number,Train_Name,From_m,T_o,Date,Class,Reserved_Upto,Boarding_Pt,no_tickets,S_No,Name,Age,Gender,berth_preference,Quota) values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)");

        st.setString(1, S_No);
        st.setString(2, Name);
        st.setString(3, Age);
        st.setString(4, Gender);
        st.setString(5, berth_preference);
        st.setString(6, Quota);

        st.executeUpdate();
        index++;

        this.setVisible(true);
        new payment().setVisible(true);
    }
    catch(Exception e){
        JOptionPane.showMessageDialog(null,e.getMessage());

    }
}

错误:

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 6 >= 6
at java.util.Vector.elementAt(Vector.java:427)
at javax.swing.table.DefaultTableColumnModel.getColumn(DefaultTableColumnModel.java:277)
at javax.swing.JTable.convertColumnIndexToModel(JTable.java:2553)
at javax.swing.JTable.getValueAt(JTable.java:2695)
at reservation.reservationActionPerformed(reservation.java:341)
at reservation.access$100(reservation.java:21)
at reservation$2.actionPerformed(reservation.java:245)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:6216)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)
at java.awt.Component.processEvent(Component.java:5981)
at java.awt.Container.processEvent(Container.java:2041)
at java.awt.Component.dispatchEventImpl(Component.java:4583)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Component.dispatchEvent(Component.java:4413)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4556)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4220)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4150)
at java.awt.Container.dispatchEventImpl(Container.java:2085)
at java.awt.Window.dispatchEventImpl(Window.java:2475)
at java.awt.Component.dispatchEvent(Component.java:4413)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

现在我收到一个新错误:

java.sql.SQLException: Parameter index out of range (0 < 1 ).
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:926)
at com.mysql.jdbc.PreparedStatement.checkBounds(PreparedStatement.java:3283)
at com.mysql.jdbc.PreparedStatement.setInternal(PreparedStatement.java:3272)
at com.mysql.jdbc.PreparedStatement.setString(PreparedStatement.java:4108)
at reservation.reservationActionPerformed(reservation.java:358)
at reservation.access$100(reservation.java:21)
at reservation$2.actionPerformed(reservation.java:245)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:6216)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)
at java.awt.Component.processEvent(Component.java:5981)
at java.awt.Container.processEvent(Container.java:2041)
at java.awt.Component.dispatchEventImpl(Component.java:4583)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Component.dispatchEvent(Component.java:4413)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4556)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4220)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4150)
at java.awt.Container.dispatchEventImpl(Container.java:2085)
at java.awt.Window.dispatchEventImpl(Window.java:2475)
at java.awt.Component.dispatchEvent(Component.java:4413)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

【问题讨论】:

    标签: java sql jdbc jtable


    【解决方案1】:

    将此更改为此 jtable 列是基于零索引的。如果您有 6 个 jtable 列,则最大列索引是 5 而不是 6 。错误是因为这个,但如果您想获得第一行,则关心行索引 2 然后@ 987654321@不是getValueAt(1, n);

    String S_No = (String) jTable1.getValueAt(row, 0);
    String Name = (String) jTable1.getValueAt(row, 1);
    String Age = (String) jTable1.getValueAt(row, 2);
    String Gender = (String) jTable1.getValueAt(row, 3);
    String berth_preference = (String) jTable1.getValueAt(row, 4);
    String Quota = (String) jTable1.getValueAt(row, 5);// 5 not 6
    

    您也应该在准备好的语句中具有相同的列数。

     st =con.prepareStatement("INSERT INTO pnr(pnr_no,Train_Number,Train_Name,From_m,T_o,Date,Class,Reserved_Upto,Boarding_Pt,no_tickets,S_No,Name,Age,Gender,berth_preference,Quota) values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)");
    

    .................................................. ....................................

     st.setString(1, S_No);
     st.setString(2, Name);
     st.setString(3, Age);
     st.setString(4, Gender);
     st.setString(5, berth_preference);
     st.setString(6, Quota);
    

    你应该有,你错过了列电话号码火车号码

     st.setString(1, pnr);
     st.setString(2, tno );
    

    【讨论】:

    • @ridhi 是的对不起 6 列表示第 0,1,2,3,4,5 列不是 1,2,3,4,5,6
    • @ridhi 将 6 更改为 5 后,能否发布新的错误消息。也可以将 JOptionPane.showMessageDialog(null,e.getMessage()); 更改为 e.printStackTrace(); 以避免弹出
    • @ridhi 如果你的 mysql 表有 10 列,那么你准备好的也应该有 10 个准备好的语句应该有。在你的代码中只有 6 个 st.setString() 你应该添加所有列,比如 setString 或 int对于电话号码?火车号码
    • @ridhi 是的,但是对应于st =con.prepareStatement("INSERT INTO pnr(pnr_no,Train_Number,Train_Name,From_m,T_o,Date,Class,Reserved_Upto,Boarding_Pt,no_tickets,S_No,Name,Age,Gender,berth_preference,Quota) values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"); st.setString(1,x) 的值,x 应该是 pnr_no 的值,即 pnr st.setString(2,x) ,x 应该是 pTrain_Number 的值,即 tno
    • @ridhi 它是st.setString(1,x) 因为它不是 jtable 它是用于准备好的语句,它从索引 1 开始
    【解决方案2】:

    当显示 ArrayIndexOutOfBoundsException 时:如果我们请求的索引为负数,或者大于或等于数组的大小,则 ArrayIndexOutOfBoundsException 被抛出。 在你的情况下,java.lang.ArrayIndexOutOfBoundsException: 6 &gt;= 6

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-26
      • 2011-05-20
      • 2014-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多