try
     {
     String theUrl=("jdbc:odbc:chessDB");
     Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
     Connection dbConn=DriverManager.getConnection(theUrl,"sa","");
     Statement sqlStmt=dbConn.createStatement();
     ResultSet rSet=sqlStmt.executeQuery("SELECT * FROM userInfo");
     //建立数据库连接
     while(rSet.next()){
      String Name=rSet.getString("Name").trim();  //左右有空格
      String Password=rSet.getString("Password");
   /*   int id=rSet.getInt("ID");
      System.out.println(id);
      int s=rSet.getInt("Marks");
      System.out.println(s);
      int win=rSet.getInt("WIN");
      System.out.println(win);   */
      //int fail=rSet.getInt(8);
     // System.out.println("失败"+fail);
      //int level=rSet.getInt("Levl");
     // System.out.println("等级"+level);
      
      if(logininfo[0].equals(Name.trim())&&logininfo[1].equals(Password.trim()))
       {  System.out.println(11);
        SendData btclient=new SendData();
          btclient.Head1=("loginok");
          oos.writeObject(btclient);
          oos.flush();     //发送验证通过信息
        UserInfo myuf=new UserInfo();
          System.out.println("3ok");
          myuf.setUserInfo(id,name,level,s,win,fail,0);

解决方案 »

  1.   

    我就是要得到id,win,fail等数据库里面的相关信息,如果用户通过验证则构造一个UserInfo类的实例,现在就是不能同时得到id,win fail的信息,单独得到任何一个都没有问题。
      

  2.   

    name在数据库里面是char类型,java里相关类型是String,我得到的必须是 Name=rSet.getString("Name").trim(); 以carmon这个名字为例,如果我不在String rSet.getString("Name")后面加trim(),那么Name.equals("carmon")就不为true.大家帮帮忙给点意见~   
      

  3.   

    在数据库中的整型是用的 int 还是 long 啊?如果是 long 的话可能不能用 getInt() 来读了。试试 getBytes() 方法。
      

  4.   

    /*
    文件名:JdbcBean.java
    作  者:counter (何明)
    创建时间:2000/12/02

    功能
    1. 装载 JDBC 驱动方式
    2. 连接数据库
    3. 读取数据库中存储的数据,并存储在数组中
    4. 对数据库修改
    5. 对数据库修改操作提交、回滚
    6. 关闭数据库连接
    6. 返回操作结果*/
    package heming;import java.io.*;
    import java.util.*;
    import java.sql.*;public class JdbcBean
    {
    String URL; //数据库连接地址
    Connection conn;        //数据库连接句柄
    Statement stmt;         //得到数据库的信息
    ResultSet rs;           //执行SQL 语句得到结果集合
    String strUpdate;
    String strQuery;
    ResultSetMetaData rsmd; //数据结果集合
    int cols;
    int rows;
    Vector result;

    public void setConnect(String Driver,String URL)
    throws Exception , SQLException
    {
    // Load the "Driver" driver方式
    Class.forName(Driver);
    // 连接到数据库
    conn = DriverManager.getConnection(URL);
    // 设定数据库连接 的提交方式 (是否自动提交)
    conn.setAutoCommit(false);
    // 得到数据库的信息
    stmt = conn.createStatement();
    }

    public void JdbcBean(String Driver,String Protocol,String Host,String Port,
      String User,String Password,String Database)
    throws Exception , SQLException
    {
    // Load the "Driver" driver方式
    Class.forName(Driver);
    URL=Protocol+":"+User+"/"+Password+"@"+Host+":"+Port+":"+Database;
    // 连接到数据库
    conn = DriverManager.getConnection(URL);
    // 设定数据库连接 的提交方式 (是否自动提交)
    conn.setAutoCommit(false);
    // 得到数据库的信息
    stmt = conn.createStatement();
    }

    public Connection getConnection()
    throws SQLException,IOException,Exception
    {
    return conn;
    }

    public String getURL()
    throws IOException
    {
    return URL;
    }

    public Statement createStatement()
    throws SQLException,Exception
    {
    return stmt;
    }

    public void setQuery(String strQuery) 
    throws SQLException , Exception ,Exception
    {
    // 执行SQL 语句得到结果集合
    rs = stmt.executeQuery(strQuery);
    // 获得数据结果集合
    rsmd = rs.getMetaData();
    // 确定数据集的列数,亦字段数
    cols = rsmd.getColumnCount();
    rows = 0;
    result = new Vector();
    // 将每一个数据值按顺序存储到数组中
    String s[] = new String[cols];
    for (int i=1; i<=cols; i++)
    {
         s[i-1] = rsmd.getColumnLabel(i) ;
    }
    result.addElement(s);
    rows ++;
    while (rs.next())
    {
         s = new String[cols];
         // for one row
         for (int i=1; i<=cols; i++) 
         {     
    s[i-1] = helper(rs, rsmd.getColumnType(i), i);
         }
         // 将每一条纪录信息存储到数组中
         result.addElement(s);
         rows ++;
    }
    }

    public void executeUpdate(String strUpdate)
    throws SQLException
    {
    // 对数据库记录进行修改、添加
    stmt.executeUpdate(strUpdate);
    }

    public void RollBack()
    throws SQLException
    {
    // 回滚对数据库的修改操作
    conn.rollback();
    }

    public void setCommit()
    throws SQLException
    {
    // 提交对数据库的修改操作
    conn.commit();
    }

    public void Close()
    throws SQLException
    {
    // 关闭数据库连接
    if ( stmt != null)
    stmt.close();
    if ( conn != null )
    conn.close();
    }

         public int getColumnCount() 
         {
    return cols;
         }     public int getRowCount() {
    return rows;
         }     public String getColumnLabels(int col) {
    String[] s = (String[])result.firstElement();
    return s[col];
         }     public String getCell(int col, int row) {
    String[] s = (String[])result.elementAt(row);
    return s[col];
         }      protected String helper (ResultSet rs, int dataType, int col) 
    throws SQLException
         {
    String retVal = null;
    Integer intObj; // ask for data depending on the datatype
    switch(dataType) 
    {
    case Types.DATE:
         java.sql.Date date_ = rs.getDate(col);
         if (date_==null)
         return null;
         retVal = date_.toString();
         break;
    case Types.TIME:
         java.sql.Time time_ = rs.getTime(col);
         if (time_==null)
         return null;
         retVal = time_.toString();
         break;
    case Types.TIMESTAMP:
         java.sql.Timestamp timestamp_ = rs.getTimestamp(col);
         if (timestamp_==null)
         return null;
         retVal = timestamp_.toString();
         break;
    case Types.CHAR:
    case Types.VARCHAR:
    case Types.LONGVARCHAR:
         retVal = rs.getString(col);
         break;
    case Types.NUMERIC:
    case Types.DECIMAL:
         java.math.BigDecimal numeric = rs.getBigDecimal(col,10);
         if (numeric==null)
         return null;
         retVal = numeric.toString();
         break;
    case Types.BIT:
         boolean bit = rs.getBoolean(col);
         Boolean boolObj = new Boolean(bit);
         if (boolObj==null)
         return null;
         retVal = boolObj.toString();
         break;
    case Types.TINYINT:
         byte tinyint = rs.getByte(col);
         intObj = new Integer(tinyint);
         if (intObj==null)
         return null;
         retVal = intObj.toString();
         break;
    case Types.SMALLINT:
         short smallint = rs.getShort(col);     
         intObj = new Integer(smallint);
         if (intObj==null)
         return null;
         retVal = intObj.toString();
         break;
    case Types.INTEGER:
         int integer_ = rs.getInt(col);     
         intObj = new Integer(integer_);
         if (intObj==null)
         return null;     
         retVal = intObj.toString();
         break;
    case Types.BIGINT:
         long bigint = rs.getLong(col);     
         Long longObj = new Long(bigint);
         retVal = longObj.toString();
         break;
    case Types.REAL:
         float real = rs.getFloat(col);
         Float floatObj = new Float(real);
         retVal = floatObj.toString();
       break;
    case Types.FLOAT:
    case Types.DOUBLE:
       double longreal = rs.getDouble(col);
         Double doubleObj = new Double(longreal);
       retVal = doubleObj.toString();
       break;
    case Types.BINARY:
    case Types.VARBINARY:
    case Types.LONGVARBINARY:
       byte[] binary = rs.getBytes(col);
       if (binary==null)
         return null;     
       retVal = new String(binary);
       break;
    }
    return retVal;
    }
    }
      

  5.   

    ID,WIN,FAIL在数据库里都是int,我单独用getInt("ID")也可以得到值,但是如果同时getString("Name")和getInt("ID"),异常就是EXCEPTION:[Microsoft][ODBC SQL Server Driver]Invalid Descriptor Index
      

  6.   

    对,这是问题所在,从报错看来,你的sql语句别用select *吧,试试把各字段名称写出来试试。有可能是名称上的问题,则可以用列序号来取。再试试吧。
      

  7.   

    我找到原因了。
    之前我一直以为是类型的问题,后来我又尝试了 short ,byte可是依然不行,仔细想想是因为ResultSet类的访问指针协议规定的比较死,我在数据库里定义顺序是id,name,win fail...那么rSet访问的顺序也只能是这个顺序,于是我在得到name,password以后再回头调用id自然索引无效了,也是怪自己写程序不规范,绕了半天,不过我觉得还是值得的,加深了理解记住了教训:)
    也把这次的一点体会与大家分享。
    别急,来者有分,嘿嘿~~
      

  8.   

    lmy2000我还想问你一个问题,上面的程序我想通过select * from userinfo where Name=得到用户的名字  and Password=得到用户的密码 ,然后判断返回rSet是否为空来验证密码,这样就可以把程序搜索的负担交给数据库来完成,就上面的程序,我的"select ..." sql语句如何写?
    主要是sql语句和得到Name,Password如何写到一个String里面,我不会用分隔符表示,'"&%都不行。
      

  9.   

    lmy2000(pluto)我给了你两份的分,快回答~~
      

  10.   

    呵呵,试试。
    String sql="select * from userinfo where Name='"+name+"' and Password='"+password+"'";
    ResultSet rSet=sqlStmt.executeQuery(sql);
      

  11.   

    上面的name和password为你得到的名字和密码的变量名
    对了还有判断为空:
    if(!rSet.next()){
      ...             //返回为空,没此用户/密码对
    }
    else{
      ...  //不为空继续处理。
    }