You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将查询结果赋值给用户ID?附KullaniciBean.java代码片段

解决查询用户ID并赋值的问题

嘿,我来帮你搞定把查询到的用户ID赋值给变量的事儿~先看看你的代码里需要调整的地方,再一步步给你解决方案:

首先,先把SQL注入的坑填上(重中之重!)

你现在直接把用户名和密码拼进SQL语句里,这可是个大漏洞——坏人很容易通过SQL注入攻击你的系统。赶紧改成参数绑定的方式,安全又规范:

// 用占位符代替直接拼接字符串
SQLQuery kuidQuery = session.createSQLQuery("select id from kullanici where kadi = :kadi and ksifre = :ksifre");
kuidQuery.setParameter("kadi", kullanici.getKadi());
kuidQuery.setParameter("ksifre", kullanici.getKsifre());

然后,获取ID并赋值

接下来就可以从查询结果里拿到用户ID,赋值给你的Kullanici对象或者单独的变量啦:

// 因为用户名+密码应该唯一,用uniqueResult()拿单个结果就行
Integer userId = (Integer) kuidQuery.uniqueResult();

// 要是想把ID赋值给你的kullanici对象
if(userId != null) {
    kullanici.setId(userId);
}

给你优化后的完整方法

另外,你的代码里没正确处理事务,还查了两次数据库,太浪费啦!我给你整理了个完整的优化版girisKontrol()方法,把这些问题都解决了:

public String girisKontrol() {
    SessionFactory factory = HibernateUtil.getSessionFactory();
    Session session = null;
    Transaction tx = null;
    try {
        session = factory.openSession();
        tx = session.beginTransaction(); // 记得开启事务

        // 直接查询ID,一步到位
        SQLQuery query = session.createSQLQuery("select id from kullanici where kadi = :kadi and ksifre = :ksifre");
        query.setParameter("kadi", kullanici.getKadi());
        query.setParameter("ksifre", kullanici.getKsifre());

        Integer userId = (Integer) query.uniqueResult();

        if(userId != null) {
            kullanici.setId(userId); // 成功赋值用户ID
            tx.commit(); // 提交事务
            return "success"; // 返回登录成功的标记
        } else {
            // 用户名或密码错了,回滚事务
            tx.rollback();
            return "error";
        }
    } catch (Exception e) {
        // 出异常了一定要回滚事务
        if(tx != null) tx.rollback();
        e.printStackTrace();
        return "error";
    } finally {
        // 用完session记得关闭
        if(session != null) session.close();
    }
}

更推荐的HQL写法

要是你用HQL(Hibernate查询语言)代替原生SQL,代码会更贴合面向对象的风格,也更省心:

Query hqlQuery = session.createQuery("select k.id from Kullanici k where k.kadi = :kadi and k.ksifre = :ksifre");
hqlQuery.setParameter("kadi", kullanici.getKadi());
hqlQuery.setParameter("ksifre", kullanici.getKsifre());
Integer userId = (Integer) hqlQuery.uniqueResult();

最后提醒你两点:

  • 要确保Kullanici实体类里的id字段类型和数据库里的匹配,比如数据库是int的话,Java里用Integer就行,转换的时候别出错。
  • 要是不确定查询结果会不会有多个,就别用uniqueResult(),改用list()然后取第一个元素,避免抛出异常。

内容的提问来源于stack exchange,提问作者Mustafa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:59:17