MSSQL - 使用Java / JTDS的列名无效

时间:2014-06-24 15:26:19

标签: java sql-server jdbc jtds

我已经阅读了有关我的问题的所有主题,所有这些主题都没有解决方案...... 无论如何,我希望更幸运......

我尝试使用JDBC连接到MSSQL数据库。 我使用了Microsoft sqljdbc4.jar的驱动程序,我没有问题。 由于我必须切换到JTDS(我使用1.2.8),当我尝试运行相同的SQL字符串时,我遇到了这个异常:

java.sql.SQLException: Invalid column name 'id'.    at
net.sourceforge.jtds.jdbc.SQLDiagnostic.addDiagnostic(SQLDiagnostic.java:372)
    at net.sourceforge.jtds.jdbc.TdsCore.tdsErrorToken(TdsCore.java:2894)
    at net.sourceforge.jtds.jdbc.TdsCore.nextToken(TdsCore.java:2334)   at
net.sourceforge.jtds.jdbc.TdsCore.getMoreResults(TdsCore.java:643)  at
net.sourceforge.jtds.jdbc.JtdsStatement.executeSQLQuery(JtdsStatement.java:506)
    at
net.sourceforge.jtds.jdbc.JtdsStatement.executeQuery(JtdsStatement.java:1433)

字符串是

SELECT tabledatastoreitem.name, tabledatastoreitem.path
FROM tabledatastoreitem, store, service, serviceprovider
WHERE tabledatastoreitem.store_id = store.id
    AND store.service_store_id = service.id
    AND service.serviceprovider_id = serviceprovider.id
    AND serviceprovider.name = 'SystemIService'
    AND store.createdttm < CONVERT(varchar(100), DATEADD(MI, -7, GETDATE()));

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

从你在陈述中我所看到的,有三种可能性。

store.id
service.id
serviceprovider.id

通过删除部分语句或在命令行中执行它来调试此问题,直到找出.id引用您的问题为止。我强烈建议使用诸如

这样的命名
store.store_id
service.service_id
serviceprovider.serviceprovider_id

它使您的调试和可读性在未来变得更加容易。

编辑:

尝试使用以下语句。它与您的相同(我可以说),但使用JOINS代替CROSSES。它可以使您的调试更容易。

SELECT tabledatastoreitem.name, tabledatastoreitem.path
FROM tabledatastoreitem
JOIN store ON store.id=tabledatastoreitem.store_id
JOIN service ON service.id = store.service_store_id
JOIN serviceprovider ON service.serviceprovider_id = serviceprovider.id
WHERE serviceprovider.name = 'SystemIService'
  AND store.createdttm < CONVERT(varchar(100), DATEADD(MI, -7, GETDATE()));

答案 1 :(得分:0)

我不确定这是怎么发生的,但你可以试着逃避所有&#39; id&#39;在代码中查看是否修复它:

SELECT tabledatastoreitem.name, tabledatastoreitem.path
FROM tabledatastoreitem, store, service, serviceprovider
WHERE tabledatastoreitem.store_id = store.[id]
    AND store.service_store_id = service.[id]
    AND service.serviceprovider_id = serviceprovider.[id]
    AND serviceprovider.name = 'SystemIService'
    AND store.createdttm < CONVERT(varchar(100), DATEADD(MI, -7, GETDATE()));