簡體   English   中英

ResultSet 總是返回 null,不管 JDBC/MySQL、Java 有什么變化

[英]ResultSet always returns null, no matter what the changes are in JDBC/MySQL, Java

我有一個帶有登錄表單的應用程序。 我想要的只是檢索登錄用戶的憑據,即從登錄表單中選擇用戶名和密碼並進行簡單的選擇查詢。 但是,無論我做了什么更改,結果集始終返回 null。 我想問一下可能是什么問題? 出於測試的目的,我創建了 2 個靜態變量,我將檢索到的用戶名和密碼存儲在其中(我將在 1 類用戶中的這些字段旁邊創建另一個,但在我修復此問題后)。 代碼如下:/數據庫中的字段和getString()方法括號里寫的一模一樣/

package graphical_interface;
import business_logic.User;
import javafx.application.Platform;
import javafx.fxml.FXML;
import javafx.scene.Parent;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

public class Controller {
    @FXML
    public Button loginB;
    public Button exitB;
    public TextField userinp;
    public TextField passinp;
    public Parent pr;
    public static String s1 = null;
    public static String s2 = null;
    @FXML
    private void closeApp() {
        Platform.exit();
    }
    String username = null;
    String password = null;
    @FXML
    private void checkB(){

            try {
                PreparedStatement pstmt2 = null;
                Class.forName("com.mysql.jdbc.Driver");
                Connection conn = DriverManager.getConnection("jdbc:mysql://remotemysql.com/CXcocPWj6l", "CXcocPWj6l", "czNrEV9umD");
                String query  = "select * from User where Username = ? and PassWord = ?";
                pstmt2.setString(1,userinp.getText());
                pstmt2.setString(2,passinp.getText());
                ResultSet valueExist = pstmt2.executeQuery(query);
                if(valueExist.next()){
                    s1 = valueExist.getString("Username");
                    s2 = valueExist.getString("PassWord");
                   // System.out.println(valueExist.getString("PassWord");
                }
                conn.close();
                System.out.println(s1);
                System.out.println(s2);

            } catch (Exception exp){
                System.out.println(exp.getLocalizedMessage());
            }
    }
}

SQL 語法似乎是正確的,所以問題很少:您確定該表包含您要查找的記錄嗎? 您確定“userinp.getText()”和“passinp.getText()”返回的不是空值嗎?

最后兩個建議:對資源使用 try 或至少使用 finally 塊。

用 columnIndex 替換 columnLabel 即替換

if(valueExist.next()){
    s1 = valueExist.getString("Username");
    s2 = valueExist.getString("PassWord");
}

if(valueExist!=null && valueExist.next()){
    s1 = valueExist.getString(columnIndex-of-Username);
    s2 = valueExist.getString(columnIndex-of-PassWord);
}

其中columnIndex-of-UsernamecolumnIndex-of-PassWord是分別UsernamePassWord的 columnIndex 的整數值。

注意:第一列是 1,第二列是 2,...

如果您在 columnLabels 中有任何拼寫錯誤,它可能有助於解決您的問題。 使用columnIndex而不是columnLabel具有性能改進的另一個優勢(檢查https://www.ibm.com/support/knowledgecenter/en/ssw_ibm_i_72/rzaha/jdbcperf.htm

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM