我使用以下代码
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con = DriverManager.getConnection("jdbc:odbc:access");
String sql = "Select * from table";
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery( sql );
ResultSetMetaData md = rs.getMetaData();
int columns = md.getColumnCount();
for (int i = 1; i <= columns; i++) {
columnNames.addElement( md.getColumnName(i) );
}
while (rs.next()) {
Vector row = new Vector(columns);
for (int i = 1; i <= columns; i++){
row.addElement( rs.getObject(i) );
}
data.addElement( row );
}
rs.close();
stmt.close();
}catch(Exception e){
System.out.println(e);
}
Run Code Online (Sandbox Code Playgroud)
它显示:
java.sql.SQLException:[Microsoft][ODBC Driver Manager] Invalid descriptor index
Run Code Online (Sandbox Code Playgroud)
这是怎么造成的,我该如何解决?
Vin*_*lds 10
我怀疑发布的代码中的一行是抛出异常.我有理由说明这一点.
当您错误地读取结果集时,通常会获得带有"无效描述符索引"消息的SQLException.此方案可以通过多种方式显示:
如果您需要解决它,您需要知道上述哪个条件在您的代码中是正确的,并相应地纠正.
Rem*_*mco 10
我有一个完全相同的错误,这是用于Delphi的ODBC Express驱动程序.
我找到的解决方案是:
将varchar(max)和/ varbinary(max)字段放在select Query的末尾.(表定义中的顺序无关紧要).
这真的为我们修好了,想与你们分享.
多年来,我通过使用PHP驱动程序来了解这个错误.尝试将文本和图像列放在选择列表的末尾.
不要用
select * from t
Run Code Online (Sandbox Code Playgroud)
但是要严格列举
select plain_column1, plain_column2, .... image_column from t
Run Code Online (Sandbox Code Playgroud)
不幸的是,微软不会因为修复bug而感到厌倦.JDBC驱动程序工作正常.
| 归档时间: |
|
| 查看次数: |
42344 次 |
| 最近记录: |