[英]MSSQL - Invalid column name with Java/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()));
任何想法?
从您的发言中可以看出,有3种可能性。
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()));
我不确定如何发生,但是您可以尝试在代码中转义所有'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()));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.