使用Java来撷取数据库的记录时,提示“string index out of range:-1”怎么处理?

解决方案 »

  1.   

    import java.awt.*;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    import java.awt.event.WindowListener;import javax.swing.*;
    import java.sql.*;
    public class db2 extends JFrame
    {
    Connection ConnObj;
    Statement SQLStatement;
    ResultSet RS;
    JPanel ContentPane;
    Panel Panel1;
    Label L1,L2,L3,L4;
    TextField T1,T2,T3,T4;
    Button B1,B2,B3,B4;
    public db2()
    {
    ContentPane=(JPanel)this.getContentPane();
    ContentPane.setLayout(null);
    Panel1=new Panel();
    Panel1.setBounds(0,0,290,130);
    Panel1.setLayout(null);
    Panel1.setEnabled(false);
    ContentPane.add(Panel1);
    L1=new Label("ISBN:");
    L1.setBounds(20,10,50,25);
    Panel1.add(L1);
    L2=new Label("书名:");
    L2.setBounds(20, 40, 50, 25);
    Panel1.add(L2);
    L3=new Label("作者:");
    L3.setBounds(20, 70, 50, 25);
    Panel1.add(L3);
    L4=new Label("价格:");
    L4.setBounds(20, 100, 50, 25);
    Panel1.add(L4);
    T1=new TextField();
    T1.setBounds(70,10,200,25);
    Panel1.add(T1);
    T2=new TextField();
    T2.setBounds(70,40,200,25);
    Panel1.add(T2);
    T3=new TextField();
    T3.setBounds(70,70,200,25);
    Panel1.add(T3);
    T4=new TextField();
    T4.setBounds(70,100,200,25);
    Panel1.add(T4);
    B1=new Button("第一条");
    B1.setBounds(new Rectangle(10,150,65,20) );
    B1.addMouseListener(new MouseAdapter()
    {
    public void mouseClicked(MouseEvent e)
    {
    B1_mouseClicked(e);
    }
    }
    );
    ContentPane.add(B1);
    B2=new Button("上一条");
    B2.setBounds(80,150,65,20);
    B2.addMouseListener(new MouseAdapter()
    {
    public void mouseClicked(MouseEvent e)
    {
    B2_mouseClicked(e);
    }
    }
    );
    ContentPane.add(B2);
    B3=new Button("下一条");
    B3.setBounds(150,150,65,20);
    B3.addMouseListener(new MouseAdapter()
    {
    public void mouseClicked(MouseEvent e)
    {
    B3_mouseClicked(e);
    }
    }
    );
    ContentPane.add(B3);
    B4=new Button ("最末条");
    B4.setBounds(220,150,65,20);
    B4.addMouseListener(new MouseAdapter()
    {
    public void mouseClicked(MouseEvent e)
    {
    B4_mouseClicked(e);
    }
    }
    );
    ContentPane.add(B4);
    this.setBounds(200, 100, 310, 210);
    this.setTitle("使用select语句");
    this.addWindowListener(new WindowAdapter()
    {
    public void windowClosing(WindowEvent e)
    {
    System.exit(0);
    }
    }
    );
    this.setVisible(true);
    try
    {
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    ConnObj=DriverManager.getConnection("jdbc:odbc:db2");
    SQLStatement=ConnObj.createStatement(
    ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
    RS=SQLStatement.executeQuery("SELECT*FROM BookData1");
    if(RS.next())
    {
    T1.setText(RS.getString("ISBN"));
    T2.setText(RS.getString("BookName"));
    T3.setText(RS.getString("Author"));
    T4.setText(String.valueOf(RS.getInt("Price")));
    }
    else
    JOptionPane.showMessageDialog(this,"myBook数据库内,无任何数据");
    }
    catch (Exception ecp)
    {
    JOptionPane.showMessageDialog(this,ecp.getMessage());

    }
    }
    void B1_mouseClicked(MouseEvent e)
    {
    try
    {
    RS.first();
    T1.setText(RS.getString("ISBN"));
    T2.setText(RS.getString("BookName"));
    T3.setText(RS.getString("Author"));
    T4.setText(String.valueOf(RS.getInt("Price")));
    }
    catch(SQLException ecp)
    {

    }
    }

    void B2_mouseClicked(MouseEvent e)

    {
    try
    {
    if(RS.previous())
    {
    T1.setText(RS.getString("ISBN"));
    T2.setText(RS.getString("BookName"));
    T3.setText(RS.getString("Author"));
    T4.setText(String.valueOf(RS.getInt("Price")));
    }
    else
    {
    RS.first();
    JOptionPane.showMessageDialog(B2, "已到第一条");

    }
    }
    catch (Exception ecp)
    {

    }

    }
    void B3_mouseClicked(MouseEvent e)

    {
    try
    {
    if(RS.next())
    {
    T1.setText(RS.getString("ISBN"));
    T2.setText(RS.getString("BookName"));
    T3.setText(RS.getString("Author"));
    T4.setText(String.valueOf(RS.getInt("Price")));
    }
    else
    {
    RS.last();
    JOptionPane.showMessageDialog(B3, "已到最末条");

    }
    }
    catch (Exception ecp)
    {

    }

    }
    void B4_mouseClicked(MouseEvent e)

    {
    try
    {
    RS.last();
    T1.setText(RS.getString("ISBN"));
    T2.setText(RS.getString("BookName"));
    T3.setText(RS.getString("Author"));
    T4.setText(String.valueOf(RS.getInt("Price")));
    }
    catch(SQLException ecp) 
    {

    }
    }

    public static void main(String[] args)
    {
    new db2();
    }

    }
      

  2.   

    没有你的数据库。用 h2 建立了一个表,试了一下,没遇到你说的问题。ps.位于第一或末尾 时 通过禁用jbutton 前一个/后一个 而不是弹出对话框