import java.sql.*;
import java.awt.*;
class Jdbcesp{
public static void main(String[] args){
   String divername="sun.jdbc.odbc.JdbcOdbcDriver";
   String database="jdbc:odbc:www";
   String user=null;
   String password=null;
   String sqlstr="select * from cheng where Number_id=200166004";
   //连接ODBC
   try{
   Class.forName(divername);
   System.out.println("成功加载JDBC-ODBC驱动程序");
   }catch(ClassNotFoundException e){
    System.out.println("加载JDBC-ODBC驱动程序失败");
    System.out.println(e.getMessage());
    return;
   }
   //连接数据库
   try{
   Connection con=DriverManager.getConnection(database);
   System.out.println("连接db_suit数据库成功");
   Statement stmt=con.createStatement();
   try{
   ResultSet result =stmt.executeQuery(sqlstr);//查询语句 stmt 
   System.out.println("成功");
//
   try{
       while(result.next()){
                int Number_id=result.getInt(4);
                String telephone=result.getString(30);
       String Email_address=result.getString(30);
       int student_number=result.getInt(4);
       System.out.println("Number_id"+Number_id);
       System.out.println("telephone"+telephone);
       System.out.println("Email_address"+Email_address);
       System.out.println("student_number"+student_number);
           }
   }catch(SQLException ex1){
     System.out.println("失败1");
         System.out.println(ex1.getMessage());
   }
//。
   }catch(SQLException ex){
    System.out.println("失败");
    System.out.println(ex.getMessage());
   }
     //关闭创建对象
     con.close();
   }catch(SQLException e){
   System.out.println("连接db_suit数据库失败");
    System.out.println(e.getMessage());
    return;
   }
}
}在两个标记中的代码:如果不要的话就正确并显示成功加载JDBC-ODBC
连接数据库成功
成功而要了中间的代码就不正确并显示成功加载JDBC-ODBC
连接数据库成功
成功
失败1
[Microsoft][odbc sql server driver]无效的描述符索引

解决方案 »

  1.   

    int Number_id=result.getInt(4);
    String telephone=result.getString(30);
    String Email_address=result.getString(30);
    int student_number=result.getInt(4);result.getInt(4);不能用两次的。
    这样:
    int intTemp = result.getInt(4);
    String strTemp = result.getString(30);int Number_id= intTemp;
    String telephone=strTemp ;
    String Email_address=strTemp;
    int student_number=intTemp ;
      

  2.   

    int Number_id=result.getInt(4);
                    String telephone=result.getString(30);
           String Email_address=result.getString(30);
           int student_number=result.getInt(4);这几个方法中的数字表示数据库表中字段在数据表中的序号,你确认你的数据表有30个字段吗?估计是这里的数字太大了
      

  3.   

    我看了!!
    我建立的表是:
    create table cheng
    (
        Number_id int null,
        telephone varchar(20) null,
        Email_address varchar(30),
        student_number int null,
    );
    在问一下  int Number_id=result.getInt(4);  的那个4可以不给它初始值不阿??
      

  4.   

    既然你的表只有4个字段,所以你调用result.getString(30);肯定会出错!至于你刚才的问题,没怎么听懂,总之这个数字就是对应数据库表里面的字段序号,你想取第几个字段,你就给哪个数字!当然,也可以通过数据表的属性名来取值,如: result.getString("telephone");等
      

  5.   

    我还是不大明白!!
    您说的意思是在getString(30) 中的30是她的第几字段嘛??
    通过数据表的属性名来取值,如: result.getString("telephone");等  ------这个我不大明白什么意思啊 ~~
    您能在看了我的表和程序 直接帮我改了吧!!
      

  6.   

    对的,那个数字就是对应数据表中的字段顺序!
    因此你的程序可以作如下修改(只是部分代码):int Number_id=0;
    String telephone="";
    String Email_address="";
    int student_number=0;
    while(result.next()){
                    Number_id=result.getInt(1);
                    telephone=result.getString(2);
           Email_address=result.getString(3);
           student_number=result.getInt(4);
           System.out.println("Number_id"+Number_id);
           System.out.println("telephone"+telephone);
           System.out.println("Email_address"+Email_address);
           System.out.println("student_number"+student_number);
               }