请各位高人指点一下我,以下是一段很短的有错误的程序,应该不会阻你们太多时间的!!!

Battle1982101 2005-04-19 01:34:14
import java.sql.*;

public class NorthwindSQLServerODBCDemo {
public static void main(String[] args) throws Exception {
//更新数据库的名字,便可以建立对SQLServer的联接
String url = "jdbc:odbc:bookshopdatabase";
Connection conn;
String output = new String();
int count = 0;
//建立连接类
try{
//告诉程序使用jdbc与odbc桥创建数据库联接
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
System.out.println("JDBC-ODBC的驱动程序注册成功");
}catch(Exception e){
System.out.println("找不到JDBC-ODBC的驱动程序");
}
try{
//使用DriverManager类的getConnection()方法建立联接,第一个字符参数定义用户名,
//第二个字符参数定义密码
conn = DriverManager.getConnection(url, "sa", "1982101");
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("select * from book");
while(rs.next()){
count += rs.getInt(3);
output += rs.getString(1)+"\t"+rs.getString(2)+"\t"+rs.getString(3)+"\n";
}
System.out.println(count);
System.out.println(output);
}catch(Exception e){
e.printStackTrace();
}
}
}

以上代码能通过编译,运行是发生了异常:
java.sql.SQLException: [Microsoft][ODBC SQL Server Driver]无效的描述符索引
at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6958)
at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7115)
at sun.jdbc.odbc.JdbcOdbc.SQLGetDataString(JdbcOdbc.java:3908)
at sun.jdbc.odbc.JdbcOdbcResultSet.getDataString(JdbcOdbcResultSet.java
5702)
at sun.jdbc.odbc.JdbcOdbcResultSet.getString(JdbcOdbcResultSet.java:356

at NorthwindSQLServerODBCDemo.main(NorthwindSQLServerODBCDemo.java:26)

但是如果我把while循环体中的语句"output+=rs.getString(1)+"\t"+..."不要就可以正常运行!
所以我觉得问题就发生在这个循环体里面的两条语句有冲突,请个位高手帮我解答一下,数据库的表book里的字段都是文本形,查过书,可以用ResultSet.getInt();来获得!
...全文
93 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Battle1982101 2005-04-19
  • 打赏
  • 举报
回复
import java.sql.*;

public class NorthwindSQLServerODBCDemo {
public static void main(String[] args) throws Exception {
//更新数据库的名字,便可以建立对SQLServer的联接
String url = "jdbc:odbc:bookshopdatabase";
Connection conn;
String output = new String();
int count = 0;
//建立连接类
try{
//告诉程序使用jdbc与odbc桥创建数据库联接
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
System.out.println("JDBC-ODBC的驱动程序注册成功");
}catch(Exception e){
System.out.println("找不到JDBC-ODBC的驱动程序");
}
try{
//使用DriverManager类的getConnection()方法建立联接,第一个字符参数定义用户名,
//第二个字符参数定义密码
conn = DriverManager.getConnection(url, "sa", "1982101");
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("select * from book");
while(rs.next()){
//数据库表book的第三个字段是书的价格,count是取得每一本书的价格总和
count += rs.getInt(3);
output += rs.getString(1)+"\t"+rs.getString(2)+"\t"+rs.getString(3)+"\n";
}
System.out.println(count);
System.out.println(output);
}catch(Exception e){
e.printStackTrace();
}
}
}

以上代码能通过编译,运行是发生了异常:
java.sql.SQLException: [Microsoft][ODBC SQL Server Driver]无效的描述符索引
at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6958)
at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7115)
at sun.jdbc.odbc.JdbcOdbc.SQLGetDataString(JdbcOdbc.java:3908)
at sun.jdbc.odbc.JdbcOdbcResultSet.getDataString(JdbcOdbcResultSet.java
5702)
at sun.jdbc.odbc.JdbcOdbcResultSet.getString(JdbcOdbcResultSet.java:356

at NorthwindSQLServerODBCDemo.main(NorthwindSQLServerODBCDemo.java:26)

但是如果我把while循环体中的语句"output+=rs.getString(1)+"\t"+..."不要就可以正常运行!
所以我觉得问题就发生在这个循环体里面的两条语句有冲突,请个位高手帮我解答一下,数据库的表book里的字段都是文本形,查过书,可以用ResultSet.getInt();来获得!
hesi726 2005-04-19
  • 打赏
  • 举报
回复
count += rs.getInt(3);
output += rs.getString(1)+"\t"+rs.getString(2)+"\t"+rs.getString(3)+"\n";
改成
output += rs.getString(1)+"\t"+rs.getString(2)+"\t"+rs.getString(3)+"\n";
count += rs.getInt(3);
试试。
rower203 2005-04-19
  • 打赏
  • 举报
回复
rs.getInt(3);rs.getString(3)
对(3)不能get两次。
飞行的兔子 2005-04-19
  • 打赏
  • 举报
回复
rs.getString(3)将这个去掉看看
jFresH_MaN 2005-04-19
  • 打赏
  • 举报
回复
count += rs.getInt(3);
output += rs.getString(1)+"\t"+rs.getString(2)+"\t"+rs.getString(3)+"\n";
第一句是干吗用的?
文本型的用getString()

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧