ResultSet始终返回null,无论在JDBC / MySQL,Java中进行了什么更改

问题描述 投票:0回答:2

我有一个带有登录表单的应用程序。我想要的只是检索登录用户的凭据,即从登录表单中选择用户名和密码,然后进行简单的选择查询。但是,无论我做了什么更改,结果集始终返回null。我想问可能是什么问题?为了进行测试,我制作了2个静态变量,在其中存储了检索到的用户名和密码(我将在1类User中将这些字段与其他字段并排放置,但是在解决此问题之后)。这是代码:/数据库中的字段与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());
            }
    }
}
java mysql jdbc
2个回答
1
投票

SQL语法似乎是正确的,所以有几个问题:您确定该表包含要查找的记录吗?您确定“ userinp.getText()”和“ passinp.getText()”返回的值不为空吗?

最后两个建议:对资源使用try或至少使用finally块。


0
投票

用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的整数值。

Note:第一列为1,第二列为2,...

使用columnIndex代替columnLabel有两个优点:

  1. 性能改进-检查https://www.ibm.com/support/knowledgecenter/en/ssw_ibm_i_72/rzaha/jdbcperf.htm
  2. 避免在键入columnLabel时输入错误。>
© www.soinside.com 2019 - 2024. All rights reserved.