try{
      //connection BookDb(ODBC DATA SOURCE)
      String strODBCConnection = "jdbc:odbc:BookDb";
      Class.forName ("sun.jdbc.odbc.JdbcOdbcDriver");
      connection = DriverManager.getConnection(strODBCConnection);      //execute sql statement
      statement = connection.createStatement();
      strSql = new String("select BookId from Book");
      resultset = statement.executeQuery(strSql);
      
      while(resultset.next())                        //add this    
      { 
      //display query result
         System.out.println(resultset.getString(1));
      }    }catch(Exception e){
      System.out.println("Error:"+e.getMessage());
    }

解决方案 »

  1.   

    System.out.println(resultset.getString(1));
    改为
    System.out.println(resultset.getString(0));
      

  2.   

    while(resultset.next())       ?
    这一句有什么作用???
      

  3.   

    判断resultset里还有没有数据,如果有返回true,并且指针下移,没有返回false
      

  4.   

    //ResultsTableModel.java
    package dbmscommand;import java.sql.*;
    import javax.swing.table.*;
    import java.util.*;
    import javax.swing.event.*;
    //结果集表模型,继承了类AbstractTableModel
    public class ResultsTableModel extends AbstractTableModel{
            //定义字符串数组存储列名
    String[] columnNames = new String[0];
    //定义具体的数据对象数组,存储结果集中的数据
    Object[][] dataRows;
    //定义表模型的事件
    TableModelEvent e1;
    //定义变量存储行数
    int rowsCount;


    //设置从数据库返回的结果集的具体信息
    //参数results是结果集对象
    public void setResultSet(ResultSet results){
    try{
    //定义结果集的具体数据信息,从参数里面把数据全部信息存入定义的结果集数据信息
    ResultSetMetaData metadata = results.getMetaData();
    //定义变量存储列数
    int columnsCount = metadata.getColumnCount(); 
    //定义数组变量存储列名
    columnNames = new String[columnsCount]; 


    // 一一得到列名
    for(int i = 0; i < columnsCount; i++)
    {
    //使用数据具体信息的方法getColumnLabel把列名赋值给数组
    columnNames[i] = metadata.getColumnLabel(i+1);
    }

    //定义一个变量来暂时存储结果集行数
    int i=0;

    //获取行数
    while(results.next()) 
    {
    i++;
    }

    //把行数保存到rowsCount
    rowsCount=i;

    //把i赋0以把结果集给dataRows赋值的时候,作为循环变量使用
    i=0;
    //把光标移到第一行
    results.beforeFirst();
    dataRows=new Object [rowsCount][columnsCount];


    while(results.next()) // 行的改变
    {
    for(int j = 0; j < columnsCount; j++) // 每一列的改变
    {
    //把参数结果集的数据信息一一赋给dataRows
    dataRows[i][j]= results.getString(j+1);

    }
    //循环变量增加
    i++;
    }
    // 表的信息改变
    fireTableChanged(e1);
    }
    //SQL异常抛出
    catch (SQLException sqle)
    {
    System.err.println(sqle);
    }
    }


    //获取列数
    public int getColumnCount(){
    //返回列的长度
    return columnNames.length;
    }


    //获取行数
    public int getRowCount(){
    return rowsCount;
    }


    //获取结果集中的数据
    public Object getValueAt(int row, int column){
    //一字符串的形式返回结果集中的数
    Object aa=new Object();
    try{
           aa= ((String)(dataRows[row][column])); 
    }catch(ArrayIndexOutOfBoundsException e){
    //System.err.println(e.getMessage());
    }
    return aa;
    }


    //获取列名
    public String getColumnName(int column){
    //使用三目运算符,当列名为空的时候
    //返回No Name否则使用返回columnNames[column],即列名数组的内同
    return columnNames[column] == null ? "No Name" : columnNames[column];
    }
    }