在其他数据库语言中,您可以构建查询以定义表的实例,例如:

SELECT a.foo, a.bar FROM ACME a WHERE a.ID=1;


然后执行类似

rs.getInt("a.foo");


获取此表第一行的值。我在hsql中执行此看似基本的功能时遇到了麻烦,并且想知道是否有一个简单的解决方案,或者其他人是否经历过。如果执行以上查询并尝试访问“ a.foo”,则使用hsql会出现以下错误:

org.hsqldb.jdbc.Util.sqlException(Unknown Source)
org.hsqldb.jdbc.jdbcResultSet.findColumn(Unknown Source)
org.hsqldb.jdbc.jdbcResultSet.getInt(Unknown Source)


但是,如果我将访问权限更改为

rs.getInt("foo");


一切正常。是什么赋予了?为什么以这种方式定义查询时,hsql在检索“ a.foo”时遇到困难?这些命令系列在MySQL中工作正常。

最佳答案

我不知道使用这种语法的其他dbms行为如何,但是hsqldb行为似乎与的规范匹配

 int java.sql.ResultSet.getInt(String columnLabel) throws SQLException



  检索当前行中指定列的值
  此ResultSet对象作为Java编程语言中的int。


参数:


  columnLabel用SQL AS子句指定的列的标签。
  如果未指定SQL AS子句,则标签为
  该列返回:


在您的查询中,**a.fo**代表fo列。它不是别名。如果要使用别名,可以尝试:

SELECT a.foo as 'myFoo', a.bar FROM ACME a WHERE a.ID=1;


并获得这样的价值:

rs.getInt("myFoo");

09-27 15:39