Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将查询对象转换为字符串列表?_Java_Sql_Arraylist - Fatal编程技术网

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