我已经阅读了有关我的问题的所有主题,所有这些主题都没有解决方案...... 无论如何,我希望更幸运......
我尝试使用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()));
有什么想法吗?
答案 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()));