java.sql.SQLException [Microsoft] [ODBC SQL Server驱动程序] [SQL Server]无效的对象名称'表名'

时间:2012-05-16 11:35:19

标签: java sql-server jdbc

使用JDBC ODBC驱动程序将Java连接到Mssql时

try 
{
    ps=conn.prepareStatement("UPDATE products SET stock=? WHERE id=?");

    ps.setInt(1, prods.getStock());
    ps.setInt(2, prods.getId());

    int b = ps.executeUpdate();

    if(b!=0)
    {
        System.out.println("success");
    }
    else
    {
        System.out.println("Fail");
    } 
}
catch(SQLException e)
{
    System.out.println(e);
}

此catch块会引发此异常

java.sql.SQLException [Microsoft] [ODBC SQL Server Driver]
  [SQL Server] Invalid object name 'products'

我从最近2天开始研究这个部分。我将如何解决这个例外?

4 个答案:

答案 0 :(得分:5)

无法找到表时抛出此错误消息。这有几个原因:

  • 您正在连接到其他数据库
  • 表格已删除
  • 该表位于另一个数据库架构
  • 您的用户不再拥有该表的读取权限

答案 1 :(得分:1)

我想你的连接字符串没有默认数据库 - 你可能连接到'master',在这种情况下上面的代码不起作用

您可以通过使用数据库和模式名称限定查询来测试这一点:

e.g。

ps=conn.prepareStatement("UPDATE [YourDatabaseName].[schema].products SET stock=? WHERE id=?"); 

将您的值放在需要的位置(标准默认架构为'dbo',例如ProductsDatabase.dbo.products)

如果这样做,那么您的连接字符串不正确

答案 2 :(得分:0)

通常,如果表不存在,或者连接字符串出错,则抛出此异常。也许没有连接到正确的数据库?

答案 3 :(得分:0)

我遇到了类似的问题。我的问题的原因是运行报告的用户将DEFAULT_DATABASE指向master数据库,在将其更改为正确的数据库后,它能够找到该对象。

谢谢