Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.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 从JTableA中选择记录时,尝试在JTableB中显示与JTableA相关的数据时发生IndexOutOfBoundsException_Java_Sql_Swing_Indexoutofboundsexception - Fatal编程技术网

Java 从JTableA中选择记录时,尝试在JTableB中显示与JTableA相关的数据时发生IndexOutOfBoundsException

Java 从JTableA中选择记录时,尝试在JTableB中显示与JTableA相关的数据时发生IndexOutOfBoundsException,java,sql,swing,indexoutofboundsexception,Java,Sql,Swing,Indexoutofboundsexception,我试图传入一个JTable对象,该对象包含DiscountID和Name列。我基本上是在尝试获取JTable a(折扣ID)中选择的第一列的一行,以及rs.next()循环中与JTable B中选择的记录相关的这组数据。问题是我得到了以下错误: Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: -1 at java.util.Vector.elementData(Vector.java

我试图传入一个JTable对象,该对象包含DiscountID和Name列。我基本上是在尝试获取JTable a(折扣ID)中选择的第一列的一行,以及rs.next()循环中与
JTable B
中选择的记录相关的这组数据。问题是我得到了以下错误:

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: -1
at java.util.Vector.elementData(Vector.java:730)
at java.util.Vector.elementAt(Vector.java:473)
at javax.swing.table.DefaultTableModel.getValueAt(DefaultTableModel.java:649)
at javax.swing.JTable.getValueAt(JTable.java:2717)
at airvia.Model.setFlexiBands(Model.java:688)
指的是这一行:

stmt.setObject(1, table.getValueAt(row, 0));
以下是相关方法的代码:

 public static void setFlexiBands(JTable table) {

    try {
        DiscountGUIView dgv = new DiscountGUIView();
        Connection con = null;
        PreparedStatement stmt = null;
        ResultSet rs = null;

        con = DriverManager.getConnection("jdbc:mysql://localhost:3306/abpp034?user=abpp034&password=120001772");



        stmt = con.prepareStatement("SELECT UpperBound, PercentageRate FROM FlexiBand WHERE DiscountID = ?");
        int row = table.getSelectedRow();
        stmt.setObject(1, table.getValueAt(row, 0));
        rs = stmt.executeQuery();
        try {
            int i = 0;
            while (rs.next()) {

                dgv.getjTable5().setValueAt(rs.getInt("UpperBound"), i, 0);
                dgv.getjTable5().setValueAt(rs.getInt("PercentageRate"), i, 1);

                i++;
            }

        } finally {

            if (rs != null) {
                try {
                    rs.close();
                } catch (SQLException se) {
                    System.out.println(se.getErrorCode());
                }
            }
            if (stmt != null) {
                try {
                    stmt.close();
                } catch (SQLException se) {
                    System.out.println(se.getErrorCode());
                }
            }
            if (con != null) {
                try {
                    con.close();
                } catch (SQLException se) {
                    System.out.println(se.getErrorCode());
                }
            }
        }

    } catch (SQLException ex) {
        Logger.getLogger(Model.class.getName()).log(Level.SEVERE, null, ex);
    }

}

我对如何解决这个问题感到困惑,因为我在别处调用了一个JTable对象,与此相同,使用变量
int row=table.getSelectedRow()
并将其传递给stmt.setObject(1,table.getValueAt(行,0))并且我没有从中得到任何异常。错误发生在我运行程序时,因此我无法看到带有2个JTables的GUI,因此请选择任何行。

返回第一个选定行的索引,如果未选择任何行,则返回-1。@donfuxx有什么问题吗?它会立即给我错误,GUI不会为我从表中选择行而启动。有办法解决这个问题吗?我真的想得到选中的行,如果没有选中任何行,那么什么也不会发生。在调用此方法时,还没有选中任何行。因此,您将在此处将行设置为-1:
int row=table.getSelectedRow()@donfuxx我明白了,但是如果我在执行语句后移动它,那么问题是通过sql语句传递的折扣Id将是未知的,实际上获取Id的唯一方法是通过选择表中的一行,我真的很难找到解决方法。作为一个快速修复方法,您可以设置您的行如果为-1,则为0