什么(com.microsoft.sqlserver.jdbc.SQLServerException:索引0超出范围)异常意味着什么

时间:2014-05-04 09:04:26

标签: java sql-server sql-server-2005 jdbc exception-handling

  import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.PrintWriter;
import java.sql.*;
import java.net.*;

public class connection {
    JTextField textfeild;
    JButton button;
    String text;
    Socket sock;
    PrintWriter writer;
    JButton button1;

    public static void main(String[] args) {
        connection user1 = new connection();
        user1.go();
    }//main method close

    public void go() {
        JFrame frame12 = new JFrame();
        JPanel centerpanel12 = new JPanel();
        centerpanel12.setLayout(new BoxLayout(centerpanel12, BoxLayout.Y_AXIS));
        textfeild = new JTextField(20);
        centerpanel12.add(textfeild);
        //textfeild.addActionListener(new textfeildlitner());
        frame12.add(centerpanel12);
        button = new JButton("Click Me");
        centerpanel12.add(button);
        button.addActionListener(new buttonlitner());
        button1 = new JButton("DataDisplay");
        centerpanel12.add(button1);
        button1.addActionListener(new buttonlitner1());

        frame12.getContentPane().add(BorderLayout.CENTER, centerpanel12);
        frame12.pack();
        frame12.setVisible(true);
        frame12.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }//go method close

      /*class textfeildlitner implements ActionListener{
          public void actionPerformed(ActionEvent ev){

          }
      }//inner class textfeildlitner close*/

    class buttonlitner implements ActionListener {
        public void actionPerformed(ActionEvent ev) {
            button.setText("I AM Clicked");
            String name = textfeild.getText();
            System.out.println(name);
            textfeild.setText("");
            textfeild.requestFocus();
        }//method close
    }//inner class close


    class buttonlitner1 implements ActionListener {
        void connection() {
            try {
                String user = "SQlUI";
                String pass = "123456";
                String db = "jdbc:sqlserver://localhost:1234;" + ";databaseName=SQlUI";
                Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
                Connection con = DriverManager.getConnection(db, user, pass);
                Statement s1 = con.createStatement();
                ResultSet r1 = s1.executeQuery("select * from Table_1");
                String[] result = new String[20];
                if (r1 != null) {
                    while (r1.next()) {
                        for (int i = 0; i < result.length; i++) {
                            for (int j = 0; j < result.length; j++) {
                                result[j] = r1.getString(i);
                                System.out.println(result[j]);
                                break;
                            }//for j close
                        }//for i close
                    }//if closeclose
                }//try close
            } catch (Exception ex) {
                ex.printStackTrace();
            }//catch close
        }//connection() close     

        public void actionPerformed(ActionEvent ev) {
            button1.setText("Processing");
            new buttonlitner1().connection();
        }//method close
    }//inner class close
}//outer class close

我为此代码获取的异常 -

com.microsoft.sqlserver.jdbc.SQLServerException: The index 0 is out of range.
    at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:190)
    at com.microsoft.sqlserver.jdbc.SQLServerResultSet.verifyValidColumnIndex(SQLServerResultSet.java:531)
    at com.microsoft.sqlserver.jdbc.SQLServerResultSet.getterGetColumn(SQLServerResultSet.java:2049)
    at com.microsoft.sqlserver.jdbc.SQLServerResultSet.getValue(SQLServerResultSet.java:2082)
    at com.microsoft.sqlserver.jdbc.SQLServerResultSet.getValue(SQLServerResultSet.java:2067)
    at com.microsoft.sqlserver.jdbc.SQLServerResultSet.getString(SQLServerResultSet.java:2392)
    at connection$buttonlitner1.connection(connection.java:76)
    at connection$buttonlitner1.actionPerformed(connection.java:89)
    at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
    at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
    at java.awt.Component.processMouseEvent(Unknown Source)
    at javax.swing.JComponent.processMouseEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access$200(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)

当我将i的值从0更改为1时,它会显示第1行的结果,但同样会抛出异常,表示索引3超出范围。 我发布了相同的代码并在进行更改后(正如stackoverflow专家建议的那样)它给了我一种新的异常类型。 我正在提出上一个问题的链接 - Getting Checked Exception while running a SQL Program,问题是在运行SQL程序时获得检查异常

1 个答案:

答案 0 :(得分:5)

在SQL中(与Java中的一般不同),evrything从1开始索引 - 包括行和列。

为什么r1.next()循环中有2个循环?

想想你的代码

for (int j = 0; j < result.length; j++) {
    result[j] = r1.getString(i);
    System.out.println(result[j]);
    break;
}
实际上确实如此。