连接数据库查询问题

Mythbignose 2009-12-16 05:40:33
import java.sql.*;
public class SqlServerTest {

/**
* @param args
*/
public static Connection connection() throws SQLException, ClassNotFoundException
{
Connection conn = null;


Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

conn = DriverManager.getConnection("jdbc:odbc:Beloria;uid = sa;pid=123");

return conn;


}
public static void main(String[] args) {
// TODO Auto-generated method stub

Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try
{
conn = connection();
System.out.println("Success!");
//PreparedStatement ps = conn.prepareStatement("select * from users");

//rs = ps.executeQuery();
stmt = conn.createStatement();
rs = stmt.executeQuery("select * from users");

System.out.println(rs);
}
catch(Exception e)
{
System.out.println(e);
}
}

}
输出结果:
Success!
java.sql.SQLException: [Microsoft][ODBC SQL Server Driver][SQL Server]对象名 'users' 无效。

我在数据库里建了users这个表,在数据库里可以用这个select * from users查询到,为什么在程序里不行?
...全文
177 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
Mythbignose 2009-12-17
  • 打赏
  • 举报
回复
问题已找到,rs默认游标为-1,需要rs.next(),谢谢各位热心帮助。
Mythbignose 2009-12-16
  • 打赏
  • 举报
回复
import java.sql.*;
public class SqlServerTest {

/**
* @param args
*/
public static Connection connection() throws SQLException, ClassNotFoundException
{
Connection conn = null;


Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

conn = DriverManager.getConnection("jdbc:odbc:Beloria;uid = sa;pid=123");

return conn;


}
public static void main(String[] args) {
// TODO Auto-generated method stub

Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try
{
conn = connection();
System.out.println("Success!"); //如果输出Success说明连接数据库成功
//PreparedStatement ps = conn.prepareStatement("select * from users");

//rs = ps.executeQuery();
stmt = conn.createStatement();
rs = stmt.executeQuery("select * from users");

System.out.println(rs.getString(1)); //这里出现异常,如果改用System.out.println(rs);则输出sun.jdbc.odbc.JdbcOdbcResultSet@2e7263
//说明上面的查询语句没有抛出异常
}
catch(Exception e)
{
System.out.println(e);
}
}

}

控制台运行结果:
Success!
java.sql.SQLException: [Microsoft][ODBC 驱动程序管理器] 无效的游标状态
Mythbignose 2009-12-16
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 crazylaa 的回复:]
users是哪个用户的表,就用哪个用户登录,表名前面可以不加 用户名,否则要用 用户名.表名
[/Quote]
呃,前表找不到users对象的问题已经解决了,是在odbc里设置了默认数据库解决的,现在结果是这样的:
Success!
java.sql.SQLException: [Microsoft][ODBC 驱动程序管理器] 无效的描述器索引
这个异常是在输出结果的时候出现的,对应的语句是
System.out.println(rs.getString(0));
索引值换成1也一样,换成列名也是这个结果。
crazylaa 2009-12-16
  • 打赏
  • 举报
回复
users是哪个用户的表,就用哪个用户登录,表名前面可以不加 用户名,否则要用 用户名.表名
Mythbignose 2009-12-16
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 godismydaughter 的回复:]
没认真看你的异常信息,我还以为你是用oracle的。
[/Quote]
呵呵,感觉不是个大问题,就是解决不了。起码说明我的查询语句没出现异常。
godismydaughter 2009-12-16
  • 打赏
  • 举报
回复

没认真看你的异常信息,我还以为你是用oracle的。
weihthchk 2009-12-16
  • 打赏
  • 举报
回复
那位说的schema就是你的数据库名称。
dbname..users
jdbc的ResultSet在取值前要先调用next(),返回true才会有值。
另外,根据jdbc的规定,用getString()一类的方法,取指定字段的值时,是从1开始的。
godismydaughter 2009-12-16
  • 打赏
  • 举报
回复
这个是SqlServer 2005的吗?Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
不是吧。我记得这个是oracle的。
SqlServer 2005是这样的:com.microsoft.sqlserver.jdbc.SQLServerDriver
Mythbignose 2009-12-16
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 godismydaughter 的回复:]
System.out.println( rs.getString("users") ); 这句肯定不行。
System.out.println(rs.getString(0));我不记得oracle是从0开始还是从1 开始的了。你试下这样:System.out.println(rs.getString(1));

[/Quote]
我是SqlServer 2005,试了1,跟0的结果一样,无奈了。
Mythbignose 2009-12-16
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 ephram 的回复:]
你看下是不是"select * from users"要加一个schema 就是模式名 select * from schema.users
这个users是这个schema下的表
[/Quote]
我试过了,是这样的结果:
Success!
java.sql.SQLException: [Microsoft][ODBC SQL Server Driver][SQL Server]关键字 'schema' 附近有语法错误。
ephram 2009-12-16
  • 打赏
  • 举报
回复
你看下是不是"select * from users"要加一个schema 就是模式名 select * from schema.users
这个users是这个schema下的表
godismydaughter 2009-12-16
  • 打赏
  • 举报
回复
System.out.println( rs.getString("users") ); 这句肯定不行。
System.out.println(rs.getString(0));我不记得oracle是从0开始还是从1 开始的了。你试下这样:System.out.println(rs.getString(1));
Mythbignose 2009-12-16
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 godismydaughter 的回复:]
引用 7 楼 mythbignose 的回复:

刚刚在odbc里重新配置了下,指定了这个数据库,输出变成了这样:
Success!
sun.jdbc.odbc.JdbcOdbcResultSet@863399

System.out.println(rs);

取数据不是这样取的吧。
[/Quote]
嗯,我写错了,改过之后这样:
System.out.println( rs.getString("users") );
输出是:
Success!
java.sql.SQLException: [Microsoft][ODBC 驱动程序管理器] 无效的游标状态
我改成System.out.println(rs.getString(0));也是一样的输出。
hqsq_love 2009-12-16
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 mythbignose 的回复:]
引用 6 楼 lovepay1413 的回复:
问个问题。。。你指定数据库了么。。。。比如我这边的数据库就有名为SF的跟LG的不同两个,连接连上的是SF的话当然查不了LG的表。。。

刚刚在odbc里重新配置了下,指定了这个数据库,输出变成了这样:
Success!
sun.jdbc.odbc.JdbcOdbcResultSet@863399
[/Quote]

rs 是个结果集。打出的是存储地址。
godismydaughter 2009-12-16
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 mythbignose 的回复:]

刚刚在odbc里重新配置了下,指定了这个数据库,输出变成了这样:
Success!
sun.jdbc.odbc.JdbcOdbcResultSet@863399
[/Quote]
System.out.println(rs);

取数据不是这样取的吧。
Sucreri 2009-12-16
  • 打赏
  • 举报
回复
真恐怖勒
Mythbignose 2009-12-16
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 lovepay1413 的回复:]
问个问题。。。你指定数据库了么。。。。比如我这边的数据库就有名为SF的跟LG的不同两个,连接连上的是SF的话当然查不了LG的表。。。
[/Quote]
刚刚在odbc里重新配置了下,指定了这个数据库,输出变成了这样:
Success!
sun.jdbc.odbc.JdbcOdbcResultSet@863399
lovepay1413 2009-12-16
  • 打赏
  • 举报
回复
问个问题。。。你指定数据库了么。。。。比如我这边的数据库就有名为SF的跟LG的不同两个,连接连上的是SF的话当然查不了LG的表。。。
Mythbignose 2009-12-16
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 guo624587253 的回复:]
你的数据库连接对吗
[/Quote]
数据库连接应该是对的,因为我在conn = connection()后面输出了一个Success
Mythbignose 2009-12-16
  • 打赏
  • 举报
回复
这个表不是,我用sa用户新建了一个users2,试了一下也不行。
加载更多回复(3)

62,615

社区成员

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

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