我用一个Statement查询SQLServer 2000,连接数据库没有问题,查询数据库中的系统表也没有问题,但是查询我自己建的表“userInfo”时就爆出异常:“对象名 'userInfo' 无效”。各位高手,是怎么回事??

解决方案 »

  1.   

    要是select * from sysobjects 能成功,就代表一切都没问题
    如果上面没问题  请仔细检查你的数据库是否有userInfo这个表
      

  2.   

    我查过同一个数据库中的系统表,可以查出来。
    userInfo表是我建的,数据库总肯定有,而且我把表名复制到查询语句中也一样发生异常。
    异常的详细信息是:
    java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]对象名 'userInfo' 无效。是怎么回事?我查过其他数据库中的用户表,也一样都是说对象名无效。
      

  3.   

    查询分析器里可以运行。在程序中,我是用预备语句PreparedStatement来的:
    String Query="SELECT id from userInfo where name=? and password=?";
    PreparedStatement preStat=conn.prepareStatement(Query);会不会跟预备语句有关呢?
      

  4.   

    我试了一下,下面的SQL语句在查询分析器里可以运行的:
    SELECT id from userInfo where name='www 'and password='000000'但是复制到JAVA程序中查询时,就爆出了对象无效的错误了。
      

  5.   

    Still don't know why.
    Wating for someone to resolve it.
      

  6.   

    在JDBC里执行:
    SELECT filename FROM sysfiles1 
    打印出filename   ,数据库肯定不是你要连的那个   
      

  7.   

    现在我查pubs表里:SELECT filename FROM sysfiles1 
    打印出来结果是:
    D:\Program Files\Microsoft SQL Server\MSSQL\data\master.mdf                                   
    D:\Program Files\Microsoft SQL Server\MSSQL\data\mastlog.ldf  怎么回事呢?
      

  8.   

    在java中,你看一下的sql语句的书写字符串吧.
      

  9.   

    回timbear:我选的确实是自己建的库soku,我查询的也是soku库中的表userInfo。
               大小写和编码的什么地方出现问题了?
      

  10.   

    回zero1111(zero):
     sql语句的书写应该是没问题的。现在的问题是,我查询所有数据库中的系统表都没有问题,但是查用户表的时候就爆出错误。我试了SQL Server中好几个数据库了都一样。不知道是SQL Server配置有问题,还是SQL Server Driver配置有问题,或者是其他问题了。
      

  11.   

    应该是直连出现的问题,你可以在你的SQL SERVER 的用户里面设置一下你的SA,把SA下面的库改为你想操作的库,如果想设置密码也可以设置!
      

  12.   

    databasename和表的名字都没错吧。把同样的SQL语句放在MSSQL的查询分析器中看看。
      

  13.   

    最简单的办法是你把这个表删了重新建一下,也许问题就解决了,我以前遇到过这样的问题,不过不是在java中,是在查询分析器里直接搞的,把表删了重新建就可以用了,到现在都没有搞明白为什么,哪位高人能指点一下!
      

  14.   

    不过问题是,我在查询分析器中查询这个没有问题啊,就是在java中查询的时候就有无效了。
      

  15.   

    很简单的改下表名就可以了
    带有user字段的数据库经常会出现这样的错误
    还有带name的
      

  16.   

    解决了没有啊,我也遇到同样的问题?
    我用的是jdbc:jtds连接数据库
      

  17.   

    我解决了,原因是在连接的时候出问题了,把连接数据库的地方作修改:
    比如:"jdbc:jtds:sybase://10.200.4.193:5000; DatabaseName=GOLDSIGN“
    改为:"jdbc:jtds:sqlserver://127.0.0.1:1433/GOLDSIGN";
      

  18.   

    userInfo 或许是数据库 的一些备用的,特殊的字符所以尽量少使用那些字符串当作 表名和字段名称哦!
    从新建一个吧!加成 tb_userInfo
      

  19.   

    直接复制到java内部当然不行了,字符串复制过来与你在查询分析器里执行的语句不一致.修改你的查询语句至类似下面的语句
    str = " SELECT   id   from   userInfo   where   name= "+'strwww'+" and   password= "+str00000; 
      

  20.   

    在查询语句前添加use 数据库名 就可以解决此问题
      

  21.   

    java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]对象名 ‘xxx’ 无效
    根本原因:访问数据库的用户有登录权限,但无操作表的权限解决办法:1. 在[企业控制台]窗口–[树]子窗口–[安全性]子树–[登录]项里将你使用的登陆用户的默认数据库设为你所使用的数据库。2. 在[企业控制台]窗口–[树]子窗口–[安全性]子树–[登录]项里新增一个登录用户(在其中选择SQL Server 身份验证、服务器角色和要访问的数据库),以后便可用些新增用户访问你勾选的数据库了。楼主的问题我也遇到过了,感觉欲哭无泪,最后就是用这个方法解决的!!!!!!!!!!
      

  22.   

    java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]对象名 ‘xxx’ 无效 
    根本原因: 访问数据库的用户有登录权限,但无操作表的权限 解决办法: 1. 在[企业控制台]窗口–[树]子窗口–[安全性]子树–[登录]项里将你使用的登陆用户的默认数据库设为你所使用的数据库。 2. 在[企业控制台]窗口–[树]子窗口–[安全性]子树–[登录]项里新增一个登录用户(在其中选择SQL Server 身份验证、服务器角色和要访问的数据库),以后便可用些新增用户访问你勾选的数据库了。 解决方案来源: http://blog.163.com/cheche3835/blog/static/43995698200773064027363/楼主的问题我也遇到过了,感觉欲哭无泪,最后就是用这个方法解决的!!!!!!!!!!
      

  23.   

    说得对,就是修改登录用户的默认数据库!但是,这是为什么呢?url中已经明确指出了数据库的名称!为什么???
    求解......
      

  24.   

    肯定是楼主把java连接sql server的数据库名写错了。
      

  25.   

    急聘JAVA DEV 
    职位需求:                本科1年-5年 Java工作经验; 
                   有较强的需求分析和设计能力,较强的团队协作能力; 
                   英语熟练; 
                   工作地点:杭州 
    收到简历后我会尽快联系大家的,职位机会都很不错,有意者请尽快联系 有意者请将个人简历发至邮箱:[email protected] 
    或加我MSN:[email protected] 
    qq:1041785334
      

  26.   

    通用的错误。在SQL里面写这条语句
    use 数据库名运行之 OK
      

  27.   

    当一个非sysadmin 固定服务器角色成员(非DBA用户),在查询分析器或程序中(asp,vb等),新建一个数据库对象时,数据库对象的所有者为当前的登录的用户。如果程序下一次更改为以DBA身份或者其它身份运行时,就会提示找不到该数据库对象。例如: 如果用户Andrew 不是固定服务器角色 sysadmin 的成员,而只是固定数据库角色 db_owner 的成员,并创建表 T1,则 T1 属于 Andrew,并限定为 Andrew.T1。其它用户在查询分析器或程序中用SQL语句访问该表时需要在表前面加上所有者:                  select * from Andrew.T1               而不能直接                  select * from T1                   不然会提示找不了表对象。
     在[企业控制台]窗口–[树]子窗口–[安全性]子树–[登录]项里将你使用的登陆用户的默认数据库设为你所使用的数据库。
    服务器角色:不能勾选system administrator,否则查询表时要加所有者。(select * from Andrew.T1)
      

  28.   

    queryStr = "use AnyviewJ select *from Projects where project = '" + proName + "'";
    类似问题,加use 数据库名称
      

  29.   

    可能是默认的表是master,而不是你要查询的表,你仔细看下查询的标题名是不是真确