首页 > 解决方案 > 如何在 JAVA 程序中根据用户名(VARCHAR)从 mySQL 检索用户 ID(INT)?

问题描述

所以,我正在使用JAVAmySQL制作登录系统。我想根据用户名(字符串数据类型)检索userID(int 数据类型)的值。

谁能给我一个关于如何解决这个问题的想法,谢谢。

这是我的表(logindb)结构:

  1. 用户名 -- VARCHAR(20)
  2. 名字——VARCHAR(20)
  3. 姓氏 -- VARCHAR(20)
  4. 用户 ID -- INT(5)
public class LoginFrame extends javax.swing.JFrame {
       
       String username;
       Connection connectDB = null;
       PreparedStatement statementDB = null;

private void buttonLoginActionPerformed(java.awt.event.ActionEvent evt) {                                                          
        // TODO add your handling code here:      
        
            try{
                connectDB = DriverManager.getConnection("jdbc:mysql://localhost/fyploginsystemdb", "root", "");
                String query = "SELECT `userID` FROM `logindb` WHERE username ='"+username+"'";               
                statementDB = connectDB.prepareStatement(query);
                

            }catch(Exception ex){
                //stuff 
                }
           
        }       
    } 
}

标签: javamysqlsqljdbc

解决方案


您需要阅读一些教程,下面的代码块可以作为您的参考,需要注意两点:

  1. 使用PreparedStatement来避免sql注入,在这种情况下你需要通过传递参数?
  2. 使用try-with-resource如果您的 jdk 高于 jdk6 以确保它们可以自动关闭
public class LoginFrame extends javax.swing.JFrame {

    String username;

    private void buttonLoginActionPerformed(java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:

        String query = "SELECT `userID` FROM `logindb` WHERE username = ? ";
        try (Connection connectDB = DriverManager.getConnection("jdbc:mysql://localhost/fyploginsystemdb", "root", "");
             PreparedStatement statementDB = connectDB.prepareStatement(query);) {

            statementDB.setString(1, username);
            try (ResultSet resultSet = statementDB.executeQuery()) {
                while (resultSet.next()) {
                    System.out.println(resultSet.getInt("userID"));
                }
            }
        } catch (Exception ex) {
            //stuff
        }

    }
}

推荐阅读