Java 如何将查询对象转换为字符串列表?
我得到了一个登录类:Java 如何将查询对象转换为字符串列表?,java,sql,arraylist,Java,Sql,Arraylist,我得到了一个登录类: if((!(name.equals(null) || name.equals("")) && !(password.equals(null) || password.equals("")))) { try{ loggedUser = checkLogin(name, hexPass.toString()); if(!loggedUser.isEmpty
if((!(name.equals(null) || name.equals("")) && !(password.equals(null) || password.equals(""))))
{
try{
loggedUser = checkLogin(name, hexPass.toString());
if(!loggedUser.isEmpty())
{
userdbId = loggedUser.get(0);
userdbName = loggedUser.get(1);
userdbPsw = loggedUser.get(2);
userdbType = loggedUser.get(3);
...
和一个用户DAO:
public List<String> checkLogin(String uname, String password) {
Session session = null;
List<String> lst = new ArrayList<String>();
try {
session = getSession();
String sql = "select * from user where uname='" + uname + "' and password='" + password + "'";
Query query = session.createSQLQuery(sql)
.addScalar("Id", StringType.INSTANCE)
.addScalar("uname", StringType.INSTANCE)
.addScalar("password", StringType.INSTANCE)
.addScalar("utype", StringType.INSTANCE);
lst = query.list();
}
catch (Exception e){
e.printStackTrace();
}
return lst;
}
我不明白为什么会发生这种情况,因为4个字符串的列表将被放入4个变量。错误意味着您有一个对象,并且正在对字符串进行隐式转换,所以这就是错误
userdbId = loggedUser.get(0);
您可以通过添加toString()方法来解决此问题,如:
userdbId = loggedUser.get(0).toString();
当然,您将获得该对象的字符串表示形式
请注意,如果您有自己的对象,您将获得以下表示:
getClass().getName() + '@' + Integer.toHexString(hashCode())
如果有这种情况,您需要重写类中的
toString()
方法您应该使用TypedQuery
而不是query,并创建用户实体类型的对象(如果您定义了它-您肯定应该有一个)-它应该是这样的(不要把这段代码写成文字!我主要使用OpenJPA)
TypedQuery query=session.createQuery(“从UserEntity u中选择u,其中name=:name和password=:password”);
query.addParam(“name”,name);
query.addParam(“密码”,password);
这可能会有帮助:
Query query = session.createSQLQuery(sql)
.addScalar("Id", StringType.INSTANCE)
.addScalar("uname", StringType.INSTANCE)
.addScalar("password", StringType.INSTANCE)
.addScalar("utype", StringType.INSTANCE)
.setResultTransformer(org.hibernate.Criteria.ALIAS_TO_ENTITY_MAP);
Map row = (Map) query.uniqueResult();
lst.add((String) row.get("Id"));
lst.add((String) row.get("uname"));
lst.add((String) row.get("password"));
lst.add((String) row.get("utype"));
有了这些代码,你就不会得到字符串列表,而是有四个属性的对象列表。你能告诉我们你是否使用ORM框架,以及你使用的是哪种类型和版本吗?你能给我一些建议吗?我是一个noob程序员。@fallenPhantasm我不使用这个框架看起来你使用的是Hibernate ORM框架以下错误:(java.lang.ClassCastException)java.lang.ClassCastException:[Ljava.lang.Object;无法转换为java.util。Map@TheKolanN我添加了
.setResultTransformer(org.hibernate.Criteria.ALIAS_TO_ENTITY_MAP);
请尝试使用againuserdbId=loggedUser.get(0).toString();不工作,因为用户嵌套在列表中的第一个对象中,我无法访问它。
TypedQuery<UserEntity> query= session.createQuery("SELECT u FROM UserEntity u WHERE name=:name AND password=:password");
query.addParam("name",name);
query.addParam("password",password);
Query query = session.createSQLQuery(sql)
.addScalar("Id", StringType.INSTANCE)
.addScalar("uname", StringType.INSTANCE)
.addScalar("password", StringType.INSTANCE)
.addScalar("utype", StringType.INSTANCE)
.setResultTransformer(org.hibernate.Criteria.ALIAS_TO_ENTITY_MAP);
Map row = (Map) query.uniqueResult();
lst.add((String) row.get("Id"));
lst.add((String) row.get("uname"));
lst.add((String) row.get("password"));
lst.add((String) row.get("utype"));