如何将 Hibernate 列表转换为字符串?
How to convert Hibernate List to String?
下面的方法打开会话,正确执行 hql 和 returns 字符串列表。我想要 return 一个 "String" 结果而不是列表。
public List<String> getStates() throws Exception {
try
{
Session session = sessionFactory.openSession();
return session.createQuery("from States").list();
}
catch(Exception e)
{
//Logging
}
finally
{
if(session !=null && session.isOpen())
{
session.close();
session=null;
}
}
return null;
}
这是我目前所拥有的,但我注意到我不能在这里使用 toString 方法。如何 return 字符串而不是字符串列表?
public String getStates() throws Exception {
try
Session session = sessionFactory.openSession();
Query q = session.createQuery("from States");
List<String> list = (List<String>) q.list();
return list.toString();
尝试下面的代码后,我得到一个 .domain.States cannot be cast to java.lang.String ClassCastException。所以我改变了我的查询。当我 运行 这个查询
(select a.stateName,来自 a 国)
我得到了 statename,但我也想要 stateCode。当我 运行 这个查询
("select a.stateName, a.stateCode from States a") 我再次收到 ClassCastException。
我是否必须迭代这些值?
StringBuilder sb = new StringBuilder();
for (String s : aisLines)
{
sb.append(s);
sb.append("\n");
}
String string = sb.toString();
StringBuffer sb = new StringBuffer();
for (String str : list)
{
sb.append(str);
sb.append("\n"); // or sb.append(" ");
}
sb.deleteCharAt(sb.length() - 1);
String string = sb.toString();
您可以简单地使用 String
,遍历您的 list
元素并将它们附加到此 String
:
Session session = sessionFactory.openSession();
Query q = session.createQuery("from States");
List<String> list = (List<String>) q.list();
String listAsString = "";
for (String str : list) {
listAsString += str + "\n";
}
return listAsString;
您也可以使用 StringBuilder
作为替代方法。
Java8 解法:
在java 8中你可以使用StringJoiner and Collectors将List<String>
转换成String
:
String listAsString = list.stream()
.map(Object::toString)
.collect(Collectors.joining(", ")); // you can change the delimiter to '\n' here to get new line
编辑:
关于你的上次编辑,你说你得到了一个 ClassCastException
那是因为你从你的查询中得到了一个 Object[]
数组(一对名称,代码)并且你想存储它作为 String
的列表,您应该遍历这些对象并提取数据,您必须像这样更新代码
String listAsString = "";
List<Object[]> list = (List<Object[]>) q.list();
Iterator iter = list.iterator();
while(iter.hasNext()) {
Object[] result = (Object[]) iter.next();
listAsString += "Name: "+result[0]+" and code: "+result[1]+ "\n";
}
return listAsString;
下面的方法打开会话,正确执行 hql 和 returns 字符串列表。我想要 return 一个 "String" 结果而不是列表。
public List<String> getStates() throws Exception {
try
{
Session session = sessionFactory.openSession();
return session.createQuery("from States").list();
}
catch(Exception e)
{
//Logging
}
finally
{
if(session !=null && session.isOpen())
{
session.close();
session=null;
}
}
return null;
}
这是我目前所拥有的,但我注意到我不能在这里使用 toString 方法。如何 return 字符串而不是字符串列表?
public String getStates() throws Exception {
try
Session session = sessionFactory.openSession();
Query q = session.createQuery("from States");
List<String> list = (List<String>) q.list();
return list.toString();
尝试下面的代码后,我得到一个 .domain.States cannot be cast to java.lang.String ClassCastException。所以我改变了我的查询。当我 运行 这个查询 (select a.stateName,来自 a 国) 我得到了 statename,但我也想要 stateCode。当我 运行 这个查询 ("select a.stateName, a.stateCode from States a") 我再次收到 ClassCastException。
我是否必须迭代这些值?
StringBuilder sb = new StringBuilder();
for (String s : aisLines)
{
sb.append(s);
sb.append("\n");
}
String string = sb.toString();
StringBuffer sb = new StringBuffer();
for (String str : list)
{
sb.append(str);
sb.append("\n"); // or sb.append(" ");
}
sb.deleteCharAt(sb.length() - 1);
String string = sb.toString();
您可以简单地使用 String
,遍历您的 list
元素并将它们附加到此 String
:
Session session = sessionFactory.openSession();
Query q = session.createQuery("from States");
List<String> list = (List<String>) q.list();
String listAsString = "";
for (String str : list) {
listAsString += str + "\n";
}
return listAsString;
您也可以使用 StringBuilder
作为替代方法。
Java8 解法:
在java 8中你可以使用StringJoiner and Collectors将List<String>
转换成String
:
String listAsString = list.stream()
.map(Object::toString)
.collect(Collectors.joining(", ")); // you can change the delimiter to '\n' here to get new line
编辑:
关于你的上次编辑,你说你得到了一个 ClassCastException
那是因为你从你的查询中得到了一个 Object[]
数组(一对名称,代码)并且你想存储它作为 String
的列表,您应该遍历这些对象并提取数据,您必须像这样更新代码
String listAsString = "";
List<Object[]> list = (List<Object[]>) q.list();
Iterator iter = list.iterator();
while(iter.hasNext()) {
Object[] result = (Object[]) iter.next();
listAsString += "Name: "+result[0]+" and code: "+result[1]+ "\n";
}
return listAsString;