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查询到,为什么在程序里不行?

解决方案 »

  1.   

    这个表不是,我用sa用户新建了一个users2,试了一下也不行。
      

  2.   

    数据库连接应该是对的,因为我在conn = connection()后面输出了一个Success
      

  3.   

    问个问题你指定数据库了么。比如我这边的数据库就有名为SF的跟LG的不同两个,连接连上的是SF的话当然查不了LG的表
      

  4.   

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

  5.   

     System.out.println(rs);取数据不是这样取的吧。
      

  6.   

    嗯,我写错了,改过之后这样:
    System.out.println( rs.getString("users") );
    输出是:
    Success!
    java.sql.SQLException: [Microsoft][ODBC 驱动程序管理器] 无效的游标状态
    我改成System.out.println(rs.getString(0));也是一样的输出。
      

  7.   

    System.out.println( rs.getString("users") ); 这句肯定不行。
    System.out.println(rs.getString(0));我不记得oracle是从0开始还是从1 开始的了。你试下这样:System.out.println(rs.getString(1));
      

  8.   

    你看下是不是"select * from users"要加一个schema 就是模式名 select * from schema.users
    这个users是这个schema下的表
      

  9.   

    我试过了,是这样的结果:
    Success!
    java.sql.SQLException: [Microsoft][ODBC SQL Server Driver][SQL Server]关键字 'schema' 附近有语法错误。
      

  10.   

    我是SqlServer 2005,试了1,跟0的结果一样,无奈了。
      

  11.   

    这个是SqlServer 2005的吗?Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    不是吧。我记得这个是oracle的。
    SqlServer 2005是这样的:com.microsoft.sqlserver.jdbc.SQLServerDriver
      

  12.   

    那位说的schema就是你的数据库名称。
    dbname..users
    jdbc的ResultSet在取值前要先调用next(),返回true才会有值。
    另外,根据jdbc的规定,用getString()一类的方法,取指定字段的值时,是从1开始的。
      

  13.   


    没认真看你的异常信息,我还以为你是用oracle的。
      

  14.   

    users是哪个用户的表,就用哪个用户登录,表名前面可以不加 用户名,否则要用 用户名.表名
      

  15.   

    呃,前表找不到users对象的问题已经解决了,是在odbc里设置了默认数据库解决的,现在结果是这样的:
    Success!
    java.sql.SQLException: [Microsoft][ODBC 驱动程序管理器] 无效的描述器索引
    这个异常是在输出结果的时候出现的,对应的语句是
    System.out.println(rs.getString(0));
    索引值换成1也一样,换成列名也是这个结果。
      

  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 驱动程序管理器] 无效的游标状态
      

  17.   

    问题已找到,rs默认游标为-1,需要rs.next(),谢谢各位热心帮助。