首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MSSQL -带有Java/JTDS的无效列名

MSSQL -带有Java/JTDS的无效列名
EN

Stack Overflow用户
提问于 2014-06-24 15:26:18
回答 2查看 1.1K关注 0票数 0

我读过所有关于我的问题的文章,但都没有解决.总之我希望能更幸运..。

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

代码语言:javascript
复制
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)

字符串是

代码语言:javascript
复制
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()));

有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-24 15:33:23

从你的陈述中我可以看出,有三种可能性。

代码语言:javascript
复制
store.id
service.id
serviceprovider.id

通过删除语句的部分内容,或者在命令行中执行语句来调试这一点,直到您找出导致您发出.id的引用为止。我强烈建议使用命名,例如

代码语言:javascript
复制
store.store_id
service.service_id
serviceprovider.serviceprovider_id

它使调试和可读性在将来对您来说更加容易。

编辑:

尝试使用以下语句。它的功能与您的相同(据我所知),但是使用JOINS而不是CROSSES。它可以使您的调试更容易一些。

代码语言:javascript
复制
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()));
票数 0
EN

Stack Overflow用户

发布于 2014-06-24 15:40:12

我不知道这种情况是如何发生的,但您可以尝试转义代码中的所有“id”实例,看看是否修复了它:

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24390567

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档