我数据库内容很简单:
列名|数据类型|长度
creditgradeid|tinyint|1/主键
creditgradename|varchar|20
相关内容:
creditgradeid:0|1|2|3|4|5
creditgradename:Stranger|Freshman|Familer|creditable|vip|topvip
因为有问题,所以写了个测试程序
package asd;
import java.sql.*;
public class asdf {
 public static void main(String[] args) {
  String url,userid,password,sqlst,col1;
  Connection conet = null;
  PreparedStatement pstm;
  Statement stm;
  ResultSet rs;
  url="jdbc:odbc:et";
  userid="bishidll";
  password="301415926";
  try {//建立连接
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    conet=DriverManager.getConnection(url,userid,password);
  }catch (ClassNotFoundException e) {
    e.printStackTrace();
  }catch (SQLException e) {
    e.printStackTrace();
  }
//取数据
  try{//use  preparedstatement first
    sqlst="select ? from creditgrade";
    col1="creditgradeid";
    pstm=conet.prepareStatement(sqlst);
    pstm.setString(1, col1);
    rs=pstm.executeQuery();
  while(rs.next())
    System.out.println(rs.getString(1));
//这里我试过用"creditgradeid"做参数,出错“java.sql.SQLException: Column not found”
//如果用rs.getInt("creditgradeid"),还是报“java.sql.SQLException: Column not found”
//如果用rs.getInt(1)方法,就说“[Microsoft][ODBC SQL Server Driver]对于造型说明无效的字符值”
  pstm.close();
//use statement then
  sqlst="select creditgradeid from creditgrade";
  stm=conet.createStatement();
  rs=stm.executeQuery(sqlst);
  while(rs.next())
  System.out.println(rs.getString("creditgradeid"));
//这里呢无论用rs.getString()还是rs.getInt()都可以得到结果
  }catch (SQLException e) {
   e.printStackTrace();
  }
 }
}
这个程序结果:
creditgradeid
creditgradeid
creditgradeid
creditgradeid
creditgradeid
creditgradeid 
//上面只是名字,下面就输出正确结果了
0
1
2
3
4
5
这个是为什么?
我还用其他的试了下,也一样

解决方案 »

  1.   

    没遇到过lz的这个问题.可能是你所取的字段名时参数形式的问题.
    你可以用以下办法,将查询结果的字段名输出出来看看.看看result
    结果集里面字段名到底是什么?
     ResultSetMetaData   rsm   =   rs.getMetaData();   
      int   colNum   =   0;   
      colNum   =   rsm.getColumnCount();   
      for(int   i   =   1;i   <=   colNum;i++)   
      {   
        Stirng   name   =   rsm.getColumnName(i);  
       System.out.println(rs.getString(name)); 
     
      }
      

  2.   

    因为楼主的creditgradeid字段是tinyint型的。所以要用这个方法试试。
    resultSet.getShort("creditgradeid");
      

  3.   

    creditgradeid 的数据类型 tinyint 改为number,
    把sqlst="select   ?   from   creditgrade"; 改为sqlst="select   creditgrade.?   from   creditgrade"; 
      

  4.   

    你就查一条记录,只有getString(0),哪来的getString(1)呢??!!!!!!!!!
      

  5.   

    关于一楼的方法,我刚才试了下,“java.sql.SQLException: [Microsoft][ODBC 驱动程序管理器] 无效的游标状态
    at sun.jdbc.odbc.JdbcOdbc.createSQLException(Unknown Source)
    at sun.jdbc.odbc.JdbcOdbc.standardError(Unknown Source)
    at sun.jdbc.odbc.JdbcOdbc.SQLGetDataString(Unknown Source)
    at sun.jdbc.odbc.JdbcOdbcResultSet.getDataString(Unknown Source)
    at sun.jdbc.odbc.JdbcOdbcResultSet.getString(Unknown Source)
    at sun.jdbc.odbc.JdbcOdbcResultSet.getString(Unknown Source)
    at asd.asdf.main(asdf.java:35)
    我还顺便打印了列名(name)。结果是个空白
      

  6.   

    请问你的DB是什么?access???
      

  7.   

    而关于m2shuai的方法,却是说我的语句rs=pstm.executeQuery(); 有错,具体是”第 1 行: '@P1' 附近有语法错误“
      

  8.   

    “对于造型说明无效的字符值”这个是用# TerryLhw1983的方法做的时候给出的结果
      

  9.   

    哦。想起来了和db没有关系。在执行我给你的那段代码前,要先执行rs.next()
    因为不执行这句话的时候,游标是处在第一个记录的前面。所以会抱错
      

  10.   

    我本地没有java的开发环境。不能写源码帮你验证:(
      

  11.   

    额。执行了rs.next()后它告诉没数据No data found