Java H2数据库别名_COLUMN_NAME=TRUE似乎不起作用
将ALIAS_COLUMN_NAME=TRUE添加到JDBC url应该意味着h2允许在列名中使用“别名”,即您可以执行以下操作:Java H2数据库别名_COLUMN_NAME=TRUE似乎不起作用,java,h2,spring-jdbc,Java,H2,Spring Jdbc,将ALIAS_COLUMN_NAME=TRUE添加到JDBC url应该意味着h2允许在列名中使用“别名”,即您可以执行以下操作: resultSet.getString("p.first_name") 如果p是某个表的别名。这似乎不适用于我,如以下代码所示: package com.example; import junit.framework.TestCase; import org.apache.commons.dbcp.BasicDataSource; import org.h2.D
resultSet.getString("p.first_name")
如果p是某个表的别名。这似乎不适用于我,如以下代码所示:
package com.example;
import junit.framework.TestCase;
import org.apache.commons.dbcp.BasicDataSource;
import org.h2.Driver;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowCallbackHandler;
import org.springframework.jdbc.core.simple.SimpleJdbcInsert;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashMap;
/**
* H2 Spring Test
*/
public class H2SelectTest extends TestCase {
public void testQuery() throws Exception {
BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName(Driver.class.getName());
dataSource.setUrl("jdbc:h2:mem:test;ALIAS_COLUMN_NAME=TRUE");
dataSource.setUsername("sa");
dataSource.setPassword("");
JdbcTemplate template = new JdbcTemplate(dataSource);
template.afterPropertiesSet();
template.execute("create table people(id int auto_increment, first_name varchar);");
SimpleJdbcInsert insert = new SimpleJdbcInsert(template).withTableName("people");
insert.setGeneratedKeyName("id");
insert.compile();
HashMap<String, Object> map = new HashMap<String, Object>();
map.put("first_name", "Bob");
insert.execute(map);
template.query("select p.first_name from people p", new RowCallbackHandler() {
public void processRow(ResultSet rs) throws SQLException {
String name = rs.getString("p.first_name");
}
});
}
}
以下是您正在寻找的答案: 根据以下文档,ALIAS_COLUMN_NAME用于列名,而不是表别名:
/**
* System property <code>h2.aliasColumnName</code>.<br />
* When enabled, aliased columns (as in SELECT ID AS I FROM TEST) return the
* alias (I in this case) in ResultSetMetaData.getColumnName() and 'null' in
* getTableName(). If disabled, the real column name (ID in this case) and
* table name is returned. This setting only affects the default mode.
**/
结果还表明,使用表别名查询结果集仅受MySQL支持,JDBC规范不支持。您可以通过在H2中使用完整的表名来消除列的歧义,例如resultSet.getString(“people.first_name”),但我担心,如果您使用H2对通常针对MySQL运行的代码进行内部测试,您必须找到另一种方法(例如,不要使用别名和完整的表名)
如果您需要任何其他帮助,请先告诉我。您列出的测试用例不使用
d.name
。你能更新测试用例或异常堆栈跟踪吗?哈哈。谢谢你,真漂亮!错误的堆栈跟踪。源于原始问题,而不是示例。已经修复了MySQL的有趣行为,我不知道这一点。谢谢
/**
* System property <code>h2.aliasColumnName</code>.<br />
* When enabled, aliased columns (as in SELECT ID AS I FROM TEST) return the
* alias (I in this case) in ResultSetMetaData.getColumnName() and 'null' in
* getTableName(). If disabled, the real column name (ID in this case) and
* table name is returned. This setting only affects the default mode.
**/