我数据库内容很简单:
列名|数据类型|长度
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
这个是为什么?
我还用其他的试了下,也一样
列名|数据类型|长度
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
这个是为什么?
我还用其他的试了下,也一样
你可以用以下办法,将查询结果的字段名输出出来看看.看看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));
}
resultSet.getShort("creditgradeid");
把sqlst="select ? from creditgrade"; 改为sqlst="select creditgrade.? from creditgrade";
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)。结果是个空白
因为不执行这句话的时候,游标是处在第一个记录的前面。所以会抱错