如何将查询对象转换为字符串列表?

时间:2014-06-17 14:41:35

标签: java sql arraylist

我有一个Login类:

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;
}

userdbId = loggedUser.get(0);生成错误:500

java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to java.lang.String
com.se.pl.actions.LoginAction.execute(LoginAction.java:95)

我不明白为什么会发生这种情况,因为4个字符串的列表将被放入4个变量中。

3 个答案:

答案 0 :(得分:0)

错误意味着你有一个Object而你正在对String进行隐式转换,这就是错误。

userdbId = loggedUser.get(0);

您可以通过添加toString()方法来解决这个问题,例如:

userdbId = loggedUser.get(0).toString();

当然,您将获得该对象的字符串表示形式。

请注意,如果您有自己的对象,则会获得以下表示:

getClass().getName() + '@' + Integer.toHexString(hashCode())

如果你有这个,你需要覆盖你班级的toString()方法

答案 1 :(得分:0)

您应该使用TypedQuery<T>而不是查询并创建用户实体类型的对象(如果您已定义它 - 您肯定应该有一个) - 它应该看起来像这样(不要使用此代码文学上!我主要使用OpenJPA

TypedQuery<UserEntity> query= session.createQuery("SELECT u FROM UserEntity u WHERE name=:name AND password=:password");
query.addParam("name",name);
query.addParam("password",password);

答案 2 :(得分:0)

这可能应该有所帮助:

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"));