无法显示我数据库中的名称

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

我想在另一个JFrame中使用其ID登录后打印用户名

我遵循了此方法,但是不起作用

//this class to login
 public mClass() {
// Frame build :
        setSize(800, 600);
        setTitle(" page1  ");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        Toolkit toolkit = getToolkit();
        Dimension size = toolkit.getScreenSize();
        setLocation(size.width / 2 - getWidth() / 2,
                size.height / 3 - getHeight() / 3);
        //Panel & BackGround :
        JPanel panel = new JPanel();
        getContentPane().add(panel);
        panel.setLayout(null);
        panel.setBackground(Color.decode("#DFDDCE"));

        // text box
        JTextField user = new JTextField();
        user.setBounds(245, 300, 300, 40);
        user.setFont(newFonts);
        user.setForeground(Color.decode("#5195E1"));
        panel.add(user);
        // text for box :
        JLabel tx = new JLabel(" Enter your ID to login.");
        tx.setBounds(245, 30, size.width, size.height);
        panel.add(tx);
        //submit button :
        JButton login = new JButton(" login ");
        login.setBounds(245, 355, 300, 40);
        login.setBorder(new LineBorder(Color.decode("#5195E1")));
           login.addActionListener(new ActionListener() {
                    @Override
                    public void actionPerformed(ActionEvent e) {
                        try {
                            // Class.forName("com.mysql.jdbc.Driver");
                            String host = "jdbc:mysql://localhost:3306/mybase?serverTimezone=UTC";
                            String uName = "root"; String uPass = "dataroot";
                            Connection con = DriverManager.getConnection(host, uName, uPass);
                            String password=user.getText();
                            String sql = "SELECT * FROM mstable where m_pass=? ";
                            PreparedStatement pst = con.prepareStatement(sql);
                            pst.setString(1,password);
                            ResultSet rs = pst.executeQuery();
                            if(rs.next()) {
                                new welcomeMs();
                                dispose();
                            }
                            else { JOptionPane.showMessageDialog(null,"wrong id , Please try again ");
                                 } }
                        catch ( SQLException ex) { System.out.println(ex); }
                       } });
           panel.add(login);
        //back button :
        setVisible(true);

    }
    public String getuserName() {
        return this.user;
    }
}


我想在此类中显示姓名

// i extend this class to the last Class
try {
            // Class.forName("com.mysql.jdbc.Driver");
            String host = "jdbc:mysql://localhost:3306/mybase?serverTimezone=UTC";
            String uName = "root";
            String uPass = "dataroot";
            Connection con = DriverManager.getConnection(host, uName, uPass);
            String sql = "SELECT m_name FROM mstable where m_pass = 'getuserName()' ";
            PreparedStatement pst = con.prepareStatement(sql);
            //pst.setString(1, getuserName());
            ResultSet rs = pst.executeQuery();
            rs.next();
                JLabel label = new JLabel();
                label.setText(rs.getString(1) + " welcome ");
                label.setBounds(402, -295, size.width, size.height);
                panel.add(label);
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null,ex);
        }
f.setVisible(true);

[当我尝试登录时,出现此消息“对空结果集的非法操作”或当我删除//“参数索引超出范围(1>参数数,为0)。”我认为错误在

 pst.setString(1, getuserName());

//或

  label.setText(rs.getString(1) + " welcome ");
java sql sql-server swing swingworker
1个回答
0
投票

从您的错误消息中很明显,您的查询正在返回包含0行和1列的结果集。我假设您想将列m_pass与JAVA函数getuserName()的返回值进行比较(或者您可能希望与用户密码进行比较)。

您可以尝试以下操作:

  1. 将查询代码更新为此:
String sql = "SELECT m_name FROM mstable where m_pass = ?";
PreparedStatement pst = con.prepareStatement(sql);
pst.setString(1, getuserName()); //Or any string that you want to compare
  1. 使用前,应始终检查结果集中是否存在记录。你可以通过
  2. 来做到这一点
if (rs.next()) {
   // record found 
}
else {
  // record not found
}
  1. 尝试直接使用SQL Sever Management Studio或任何等效的IDE在数据库上执行相同的查询,并查看它是否返回任何行。

阅读有关PreparedStatementJDBC ResultSet的更多信息。希望对您有所帮助!

© www.soinside.com 2019 - 2024. All rights reserved.