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

Java数据库验证无法返回true,请求排查问题

问题分析与修复方案

核心问题总结

你的代码始终无法返回true并显示正确提示,根源是以下几个关键错误:

1. 变量作用域错误

类成员变量private boolean ahmet;在while循环中被重新声明为局部变量,导致类成员变量从未被正确赋值,始终保持默认的false:

// 这里声明的是局部变量,和类成员变量ahmet无关
if(id == 1){ boolean ahmet = ekle == true; } else if (id == 0 ){boolean ahmet = ekle == false;}

修正写法:直接修改类成员变量,不要重新声明

if(id == 1){ 
    ahmet = true; 
} else {
    ahmet = false;
}

注:ekle初始值为false,ekle == true的结果永远是false,属于逻辑错误,应直接赋值true/false

2. SQL语法问题

MySQL中逻辑与的标准关键字是AND,而非&&(虽部分环境兼容,但不符合标准),修正后的SQL语句:

rs = oku.executeQuery("SELECT count(id) as `giris` FROM dbkullanici.kullanicilar WHERE id ="+ cevrilenid +" AND sifre = '"+sifrebilgisi+"'");

建议用反引号包裹别名,避免关键字冲突

3. SQL注入风险(严重)

直接拼接用户输入到SQL语句中,存在极高的SQL注入风险,必须改用PreparedStatement:

String sql = "SELECT count(id) as `giris` FROM dbkullanici.kullanicilar WHERE id = ? AND sifre = ?";
PreparedStatement pstmt = connect.prepareStatement(sql);
pstmt.setInt(1, cevrilenid);
pstmt.setString(2, sifrebilgisi);
ResultSet rs = pstmt.executeQuery();

4. 资源泄漏问题

Connection、Statement、ResultSet使用后未关闭,会导致数据库连接耗尽,建议用try-with-resources自动关闭资源:

try (Connection connect = db.getConnection();
     PreparedStatement pstmt = connect.prepareStatement(sql)) {
    // 执行数据库操作
} catch (SQLException e) {
    // 异常处理
}

5. 复制粘贴错误

你错误地将idtext4的值赋值给了tutarbilgisi,应该取tutartext的内容:

// 原错误代码
String tutarbilgisi = idtext4.getText();
// 修正后
String tutarbilgisi = tutartext.getText();

完整修复后的kontrol()方法示例

public void kontrol() {
    boolean ahmet = false; // 初始化默认值
    String sql = "SELECT count(id) as `giris` FROM dbkullanici.kullanicilar WHERE id = ? AND sifre = ?";
    
    try (Connection connect = new dbbaglanti().getConnection();
         PreparedStatement pstmt = connect.prepareStatement(sql)) {

        String cekilenid = idtext4.getText();
        int cevrilenid = Integer.parseInt(cekilenid);
        String sifrebilgisi = sifretext4.getText();
        // 修正tutartext的取值
        String tutarbilgisi = tutartext.getText();
        int cevrilentutar = Integer.parseInt(tutarbilgisi);

        pstmt.setInt(1, cevrilenid);
        pstmt.setString(2, sifrebilgisi);
        
        try (ResultSet rs = pstmt.executeQuery()) {
            if (rs.next()) {
                int count = rs.getInt("giris");
                ahmet = count == 1;
            }
        }

        if (ahmet) {
            erortext.setText("verilerdogru");
        } else {
            erortext.setText("Bilgileriniz Veritabanımızda ki veriler ile eşleşmedi");
        }

    } catch (NumberFormatException e) {
        JOptionPane.showMessageDialog(null, "Lütfen geçerli sayısal değer giriniz!");
    } catch (SQLException e) {
        JOptionPane.showMessageDialog(null, "Veritabanı bağlantı hatası: " + e.getMessage());
        Logger.getLogger(para_ekle.class.getName()).log(Level.SEVERE, null, e);
    }
}

内容的提问来源于stack exchange,提问作者İki Dost

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 08:35:22