JLabel jname,mima; JTextField j1,j2; JButton b1; Connection con=null; Statement sql; ResultSet rs; zhuce() { jname=new JLabel("用户名"); mima=new JLabel("密码"); j1=new JTextField(10); j2=new JTextField(10); b1=new JButton("提交"); add(jname); add(j1); add(mima); add(j2); add(b1); b1.addActionListener(this); this.setTitle("注册界面"); this.setLayout(new FlowLayout()); this.setBounds(200,200,300,200); this.setVisible(true); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public void actionPerformed(ActionEvent e) {if(e.getSource()==b1) { Dblink dlink=new Dblink(); con=dlink.connectDB("xqcwglxt", "root", "abc123"); try { String s1=j1.getText(); String s2=j2.getText(); String sqlStr="insert into user values("+"'"+s1+"'"+","+"'"+s2+"'"+")"; System.out.println(sqlStr); sql=con.createStatement(); int ok = sql.executeUpdate(sqlStr); con.close(); } catch(Exception ee) { ee.printStackTrace(); } } } }
时间: 2024-04-17 20:22:50 浏览: 22
这段代码是一个简单的注册界面,包括用户名、密码的输入框和一个提交按钮。当用户点击提交按钮时,会将用户名和密码插入到数据库的user表中。
在构造函数中,首先创建了用户名和密码的标签(jname、mima),以及对应的文本输入框(j1、j2)和提交按钮(b1)。然后将它们添加到界面中,并为提交按钮添加了一个事件监听器(ActionListener)。
当用户点击提交按钮时,会触发actionPerformed方法。在该方法中,通过Dblink类建立与数据库的连接,并获取用户输入的用户名和密码。然后构造插入语句(sqlStr),并通过Connection对象的createStatement方法创建一个Statement对象(sql)。最后调用Statement对象的executeUpdate方法执行插入操作,并关闭数据库连接。
需要注意的是,该代码中使用了一个名为Dblink的类来建立数据库连接,请确保该类已经定义并正确导入。
相关问题
create database student; use student; create table users( uname varchar(10) primary key, upwd varchar(10) ); insert into users values('admin','1234'); insert into users values('zhou','zhou');package homework7_二_2_20221548; import javax.swing.; import java.awt.; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.sql.*; public class Demo { public static void main(String args[]){ MyWindow win=new MyWindow(); } } class MyWindow extends JFrame{ JLabel lbl_name=new JLabel("username"); JLabel lbl_password=new JLabel("password"); JTextField txt_name=new JTextField(15); JTextField txt_password=new JTextField(15); JButton btn1=new JButton("confirm"); JButton btn2=new JButton("cancel"); MyWindow(){ JPanel jp1=new JPanel(); jp1.setLayout(new FlowLayout()); jp1.add(lbl_name); jp1.add(txt_name); jp1.add(lbl_password); jp1.add(txt_password); add(jp1,BorderLayout.CENTER); JPanel jp2=new JPanel(); jp2.setLayout(new FlowLayout()); jp2.add(btn1); jp2.add(btn2); btn1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { String txt1=txt_name.getText(); String txt2=txt_password.getText(); String[] username=new String[2]; String[] password=new String[2]; new DemoQuery(username,password); if(txt1.equals(username[0])&&txt2.equals(password[0])) { JOptionPane.showMessageDialog(null,"欢迎您,"+username[0]+"登录"); } else if(txt1.equals(username[1])&&txt2.equals(password[1])){ JOptionPane.showMessageDialog(null,"欢迎您,"+username[1]+"登录"); } else { JOptionPane.showMessageDialog(null,"用户名和密码错误"); txt_name.setText(""); txt_password.setText(""); } } }); add(jp2,BorderLayout.SOUTH); setSize(300,150); setVisible(true); setTitle("the login window"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } } class DemoQuery { public DemoQuery(String[] username,String[] password){ String url = "jdbc:mysql://127.0.0.1:3306/student"; String user = "root", pwd = ""; Connection con; Statement sql; ResultSet rs; try { Class.forName("com.mysql.jdbc.Driver"); } catch (ClassNotFoundException e) { System.out.println("test" + e); } try { con = DriverManager.getConnection(url, user, pwd); sql = con.createStatement(); String sqlStatement; sqlStatement = "SELECT * From users"; rs = sql.executeQuery(sqlStatement); while (rs.next()) { int i = 0; username[i] = rs.getString("uname"); password[i] = rs.getString("upwd"); System.out.println(username[i]+" "+password[i]); i++; } con.close(); } catch (SQLException e) { System.out.println("数据库操作失败" + e); } } }为什么用户名输入admin,密码输入1234显示登录失败?
在 DemoQuery 类里的 while 循环中,每次遍历结果集时都会将 username 和 password 数组的第一个元素赋值为当前行的 uname 和 upwd,但是在下一次遍历时,又会将其覆盖为当前行的 uname 和 upwd,因此最终 username 和 password 数组中只保存了最后一行的数据,而不是所有行的数据。因此,在 MyWindow 类中判断用户名和密码是否正确时,只能匹配到最后一行的数据,而无法匹配到第一行的数据。解决方法是将数组的定义和 i 的初始化放在 while 循环之前,每次遍历结果集时让 i 加 1,这样就可以保存所有行的数据了。修改后的 DemoQuery 类代码如下:
```java
class DemoQuery {
public DemoQuery(String[] username,String[] password){
String url = "jdbc:mysql://127.0.0.1:3306/student";
String user = "root", pwd = "";
Connection con;
Statement sql;
ResultSet rs;
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
System.out.println("test" + e);
}
try {
con = DriverManager.getConnection(url, user, pwd);
sql = con.createStatement();
String sqlStatement;
sqlStatement = "SELECT * From users";
rs = sql.executeQuery(sqlStatement);
int i = 0;
while (rs.next()) {
username[i] = rs.getString("uname");
password[i] = rs.getString("upwd");
System.out.println(username[i]+" "+password[i]);
i++;
}
con.close();
} catch (SQLException e) {
System.out.println("数据库操作失败" + e);
}
}
}
```
另外,还需要把 MyWindow 类中的判断条件改为:
```java
if(txt1.equals(username[0])&&txt2.equals(password[0])) {
JOptionPane.showMessageDialog(null,"欢迎您,"+username[0]+"登录");
} else if(txt1.equals(username[1])&&txt2.equals(password[1])){
JOptionPane.showMessageDialog(null,"欢迎您,"+username[1]+"登录");
} else {
JOptionPane.showMessageDialog(null,"用户名和密码错误");
txt_name.setText("");
txt_password.setText("");
}
```
因为现在 username 和 password 数组中保存了所有行的数据,所以需要逐一判断每个元素是否与输入的用户名和密码匹配。如果匹配成功,则弹出欢迎对话框,否则弹出错误提示,并清空用户名和密码输入框。
package text6; import java.sql.*; import java.awt.*; import java.awt.event.*; import javax.swing.*; public class domo extends JFrame implements ActionListener{ Connection con; Statement cmd; ResultSet rs; String url="jdbc:mysql://127.0.0.1:3306/support"; String driver="com.mysql.jdbc.Driver"; JPanel jp1=new JPanel(); JPanel jp2=new JPanel(); JLabel lbl_no=new JLabel("学号"); JLabel lbl_name=new JLabel("姓名"); JLabel lbl_birth=new JLabel("生日"); JLabel lbl_sex=new JLabel("性别"); JLabel lbl_study=new JLabel("学情"); JLabel lbl_live=new JLabel("宿舍"); JTextField txt_no=new JTextField(20); JTextField txt_name=new JTextField(20); JTextField txt_birth=new JTextField(20); JTextField txt_sex=new JTextField(20); JTextField txt_study=new JTextField(20); JTextField txt_live=new JTextField(20); JButton btn_add=new JButton("新增"); JButton btn_delete=new JButton("删除"); JButton btn_update=new JButton("更新"); public domo(){ jp1.add(lbl_no); jp1.add(txt_no); jp1.add(lbl_name); jp1.add(txt_name); jp1.add(lbl_birth); jp1.add(txt_birth); jp1.add(lbl_sex); jp1.add(txt_sex); jp1.add(lbl_study); jp1.add(txt_study); jp1.add(lbl_live); jp1.add(txt_live); add(jp1,BorderLayout.CENTER); jp2.add(btn_add); jp2.add(btn_delete); jp2.add(btn_update); add(jp2,BorderLayout.SOUTH); btn_add.addActionListener(this); btn_delete.addActionListener(this); btn_update.addActionListener(this); setBounds(250,250,250,250); setVisible(true); setDefaultCloseOperation(DISPOSE_ON_CLOSE); } public void actionPerformed(ActionEvent e) { if(btn_add.isSelected()) { try { Class.forName(driver); con=DriverManager.getConnection(url,"root",""); cmd=con.createStatement(); String sql="select * from student where sno='" + txt_no.getText() + "'";//查看是否存在已有的uno rs=cmd.executeQuery(sql); if(rs.next()) if(rs.getString(1).equals(txt_no.getText())==false) JOptionPane.showMessageDialog(null, "成功","成功",JOptionPane.PLAIN_MESSAGE); con.close(); }catch(Exception e1) { System.out.print(e1); } } } public static void main(String args[]) { JFrame.setDefaultLookAndFeelDecorated(true); new domo(); } }改错
1. 按钮的判断应该使用 `if(e.getSource() == btn_add)`,而不是 `if(btn_add.isSelected())`。
2. 在查询语句中应该使用 `where sno='" + txt_no.getText() + "'"`,而不是 `where uno='" + txt_no.getText() + "'"`。
3. 在成功提示框中,应该显示“成功”,而不是“失败”。
4. 在异常处理中,应该使用 `e1.printStackTrace()`,而不是 `System.out.print(e1)`。
5. 在按钮的事件处理中,应该加入删除和更新按钮的处理代码。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)