Java/MSSQL: java.sql.SQLException 无效的对象名称 'TableName'

4
我正在尝试将一个Java应用程序从旧服务器迁移到新服务器。该应用程序在Tomcat上运行,使用Microsoft SQL Server作为后端数据库,并使用在数据源(ODBC)中定义的系统DSN来确定连接位置。旧服务器使用Windows 2000 / SQL Server 2000,而新服务器使用Windows 2003 / SQL Server 2005。
ODBC定义在服务器之间是相同的,并定义了要使用的数据库。
当用户尝试登录时,在新服务器的stdout.log中出现以下内容:
正在检查用户 错误:java.sql.SQLException:[Microsoft] [ODBC SQL Server Driver] [SQL Server]无效的对象名称“UserTable”。
数据库中确实存在名为“UserTable”的表,但通过管理界面显示为“dbo.USerTable”。
是否有某个MSSQL设置需要调整才能使其忽略缺少“dbo。”前缀,或者我错过了其他什么东西?
[编辑]使用Windows身份验证,并且已经将公共和访客角色赋予DB完全权限以进行故障排除。
2个回答

5

数据库登录信息是否不同?dbo “前缀”只是对象定义所在的模式。因此,如果您的ODBC连接器使用dbo凭据进行登录,则该对象应位于其默认模式中。


将sa帐户的默认DB设置为固定值后,问题得到了解决,即使sa帐户没有用于登录(并且应用程序无法知道sa凭据)。虽然这很奇怪,但考虑到这是一个独立系统,而且这个应用程序是所有DB将托管的唯一应用程序,因此这是一个可接受的解决方法。 - DrStalker

2
你首先必须使用ODBC吗?根据我的经验,“本地”(类型4)SQL Server驱动程序更好。有一个Microsoft驱动程序jTDS。我对MS驱动程序没有太多经验,但jTDS驱动程序很好。
当然,如果你被其他因素迫使使用ODBC,这对你没有任何用处-但是如果你有选择的话,值得一试。这将是在Windows框中需要配置的少数事项之一。

我宁愿不重新编写应用程序 - 它是一个旧的遗留工具,在当前服务器上使用ODBC运行良好,因此很难证明重新做DB代码的时间,特别是因为所有参与其创建的人都已经离开了,所以我们需要花费大量时间弄清楚他们做了什么。从头开始重新做整个东西可能是一个更好的选择,但看起来这不会发生。 :-( - DrStalker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接