我读过所有关于我的问题的文章,但都没有解决.总之我希望能更幸运..。
我正在尝试使用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()));有什么想法吗?
发布于 2014-06-24 15:33:23
从你的陈述中我可以看出,有三种可能性。
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()));发布于 2014-06-24 15:40:12
我不知道这种情况是如何发生的,但您可以尝试转义代码中的所有“id”实例,看看是否修复了它:
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()));https://stackoverflow.com/questions/24390567
复制相似问题