gpt4 book ai didi

java - 使用 HibernateTemplate 时无法获取列名称

转载 作者:行者123 更新时间:2023-12-02 07:47:17 25 4
gpt4 key购买 nike

我使用 Spring-orm 和 HibernateTemplate 来执行 native SQL 查询(数据库是 Oracle 11 作为引用),如下所示:

@Override
public List<Object> executeNativeQuery(final String queryStr, final Map<String, String> params) {

List<Object> results = this.template.execute(new HibernateCallback<List<Object>>() {
@Override
public List<Object> doInHibernate(Session session) throws HibernateException, SQLException {
// Get the query
Query query = session.createSQLQuery(queryStr);

// Assign parameters to the query, if any
if (params != null) {
for (Map.Entry<String, String> entry : params.entrySet()) {
query.setString(entry.getKey(), entry.getValue());
}
}

// fire the query
@SuppressWarnings("unchecked")
List<Object> res = query.list();

return res;
}
});

return results;
}

我已成功执行查询并获取结果。但我无法找到一种方法来获取结果列名称,并且我开始认为使用这种方法是不可能的。我的问题是我必须执行来自用户输入的查询,并且我对参数名称没有任何线索。

有什么想法吗?

最佳答案

我终于找到了解决方法,所以我发布它希望对其他人有用。我的做法是错误的,正确的方法(至少满足我的需求)是使用 doWork

代替:

session.createSQLQuery(queryStr);

我必须像这样获得连接:

session.doWork(new Work() {
@Override
public void execute(Connection con) throws SQLException {

try {
Statement st = con.createStatement();
ResultSet rs = st.executeQuery(queryStr);
ResultSetMetaData md = rs.getMetaData();
int col = md.getColumnCount();
System.out.println("Number of Column : " + col);
System.out.println("Columns Name: ");
for (int i = 1; i <= col; i++) {
String col_name = md.getColumnName(i);
System.out.println(col_name);
}
} catch (SQLException s) {
System.out.println("SQL statement is not executed!");
}
}
});

关于java - 使用 HibernateTemplate 时无法获取列名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10651151/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com