下面是我的登录用户界面代码。我正在尝试创建用户验证。我已经完成了我应该做的所有事情,但是在控制台中按下“登录”按钮后,我的代码没有显示任何内容。这段代码出了什么问题?
import javax.swing.*; // For Frame
import java.awt.event.*; // For action Listener
import java.sql.*; // For Database
public class Login {
/* Three instance varaibles */
Connection con;
Statement st;
ResultSet rs;
JFrame f = new JFrame("User Login");
JLabel l = new JLabel("Username:");
JLabel l1 = new JLabel("Password:");
JTextField t = new JTextField(10);
JTextField t1 = new JTextField(10);
JButton b = new JButton("Login");
/* CONSTRUCTOR */
public Login() {
/* METHODS */
connect();
frame();
}
public void connect() {
try {
/* DECLARING DRIVER */
String driver = "sun.jdbc.odbc.JdbcOdbcDriver";
Class.forName(driver);
String db = "jdbc:odbc:Database1";
/* THIS WILL GET A CONNECTION TO OUR DATABASE */
con = DriverManager.getConnection(db);
st = con.createStatement();
} catch (Exception ex) {
}
}
public void frame() {
f.setSize(600, 400);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
JPanel p = new JPanel();
p.add(l);
p.add(t);
p.add(l1);
p.add(t1);
p.add(b);
f.add(p);
b.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
String user = t.getText().trim();
String pass = t1.getText().trim();
String sql = "select user,pass from Table2 where user='"
+ user + "'and pass='" + pass + "'";
rs = st.executeQuery(sql);
int count = 0;
while (rs.next()) {
count = count + 1;
}
if (count == 1) {
JOptionPane.showMessageDialog(null,
"User found, Access granted! ");
} else if (count > 1) {
JOptionPane.showMessageDialog(null,
"Duplicate user, Access denied! ");
} else {
JOptionPane.showMessageDialog(null,
"User not found! ");
}
} catch (Exception ex) {
}
}
});
}
public static void main(String[] args) {
new Login();
}
}
答案 0 :(得分:1)
System.out.println("Driver Loaded")
之后放置Class.forName()
以查看驱动程序是否已加载System.out.printlnt("Connected to Database")
以查看其是否已连接ex.printStackTrace()
放入所有空的catch块中,以便查看错误发生的位置。ClassNotFoundException
。确保在项目中包含jar。添加jar之后,代码就可以了。我确实将数据库切换到了MySql,因为那是我使用的那个添加到数字3.如果您得到ClassNotFoundExceptio
,则可能需要将驱动程序jar添加到库中。如果您得到SQLException
连接语法或查询语法有问题。除此之外,我不会在其他任何地方发生异常,因为我自己运行它。
答案 1 :(得分:1)
有三件事情浮现在脑海中。第一个已经突出显示的是不要盲目地消费异常
try
{
String driver = "sun.jdbc.odbc.JdbcOdbcDriver";
Class.forName(driver);
String db = "jdbc:odbc:Database1";
con = DriverManager.getConnection(db);
st = con.createStatement();
}
catch(Exception ex)
{
// This is a bad idea...
}
你应该避免捕捉“所有”异常,而是专注于那些已知被抛出的异常。
至少,您应该以某种方式记录异常和/或重新抛出或引发新异常,以便调用者知道出现了问题
其次,在您添加任何内容之前,您正在使窗口可见...
f.setSize(600, 400);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
JPanel p = new JPanel();
p.add(l);
p.add(t);
p.add(l1);
p.add(t1);
p.add(b);
//...
相反,您应该准备用户界面,然后让它可见......
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel p = new JPanel();
p.add(l);
p.add(t);
p.add(l1);
p.add(t1);
p.add(b);
//...
f.pack();
f.setVisible(true);
第三,你没有在事件调度线程的上下文中启动你的UI,从长远来看可能会导致各种各样的怪异......
EventQueue.invokeLater(new Runnable() {
public void run() {
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel p = new JPanel();
p.add(l);
p.add(t);
p.add(l1);
p.add(t1);
p.add(b);
//...
f.pack();
f.setVisible(true);
}
}
有关详细信息,请参阅Initial Threads
答案 2 :(得分:0)
您的代码似乎在执行期间抛出异常。可以与您的数据库相关的代码。您正在代码中输入catch块,并且没有任何操作。打印堆栈跟踪以检查错误。
catch (Exception ex) {
ex.printStackTrace ();
}
在两个例外块中添加以下行,显示消息“错误!”在面板上,这意味着您的面板相关代码工作正常。
JOptionPane.showMessageDialog (null, "error! ");