GUI界面连接Mysql数据库
GUI程序不仅界面美观,而且使用方便,各种软件的操作上也可统一,本实验通过Java来编写GUI程序。Java提供了编写GUI程序所需要的各种类,其中在本次实验中用到了java swing 用来设计登录、注册、修改密码、删除用户等界面,其中还用到了ActionListener接口来监听界面内的组件事件,用来触发事件作出反应。其中在本实验中我给主框的背景设置了绿色背景,并且增加了一个重复密码框,为了保证信息的安全性。button设计了不同的功能,如弹出dialog对话框、调用新的JFrame界面,通过GUI程序实现了图形化界面,然后在本实验中利用Mysql数据库,建立了数据库通过JDBC实现了GUI界面连接数据库,并对数据库中的内容进行查询等操作。
源码如下:
——————————————————————————ZJdbcs——————————
package chunlan;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.swing.JOptionPane;
public class ZJdbcs {
Connection con = null;
Statement statement = null;
ResultSet res = null;
String driver = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://localhost:3306/zhangchunlan";
String name = "root";
String passwd = "123456";
public ZJdbcs() {
try{
Class.forName(driver).newInstance();
con = DriverManager.getConnection(url,name,passwd);
statement = con.createStatement();
}
catch(ClassNotFoundException e){
System.out.println("对不起,找不到这个Driver");
e.printStackTrace();
e.printStackTrace();
}
catch(Exception e){
e.printStackTrace();
}
}
public boolean update(String username,String password1,String newpassword ){
boolean judge = false;
boolean s = compare(username,password1);
if(s){
String sql = "update user set password=\""+newpassword+"\"where username=\""+username+"\"";
try{
int a = statement.executeUpdate(sql);
if(a==1){
JOptionPane.showMessageDialog(null,"密码修改成功!");
judge = true;
}
}
catch (SQLException e){
JOptionPane.showMessageDialog(null, "用户不存在!");
}
}
else{
JOptionPane.showMessageDialog(null, "修改失败");
}
return judge;
}
public void delete(String username,String password){
if(compare(username,password)){
JOptionPane.showMessageDialog(null, "已经完成删除");
}
else{
return ;
}
String sql="delete from user where username=\""+username+"\"";
try{
int a=statement.executeUpdate(sql);
}
catch(SQLException e){
JOptionPane.showMessageDialog(null, "不存在该用户!");
e.printStackTrace();
}
}
public void insert(String username,String password){
String sql="insert into user(username,password)values(\""+username+"\",\""+password+"\")";
try {
int a=statement.executeUpdate(sql);
if(a==1){
JOptionPane.showMessageDialog(null, "注册成功!");
}
}
catch (SQLException e){
JOptionPane.showMessageDialog(null,"对不起该用户名有了!");
}
}
public boolean compare(String username,String password){
boolean m=false;
String sql="select password from user where username=\""+username+"\"";
try {
res=statement.executeQuery(sql);
if(res.next()){
String pa=res.getString(1);
System.out.println(pa+" "+password);
if(pa.equals(password)){
m=true;
}
else {
JOptionPane.showMessageDialog(null, "密码错误!");
}
}
else {
JOptionPane.showMessageDialog(null, "用户名不存在!");
}
}
catch (SQLException e) {
JOptionPane.showMessageDialog(null,"对不起,没有查询到该用户名!");
}
return m;
}
public void releaseConnection(){
try{
if(statement !=null){
statement.close();
}
if(con !=null){
con.close();
}
}
catch (Exception e){
JOptionPane.showMessageDialog(null, "数据库未成功关闭!");
}
}
}
————————————————————————————Login类————————
package chunlan;
import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class Login extends JFrame implements ActionListener{
private JPanel pan = new JPanel();//创建一个面板,再向这个面板添加组件,然后把这个面板添加到其他容器。
private JLabel namelab = new JLabel("用户名");//创建标签
private JLabel passlab = new JLabel("密 码");
private JLabel passlabs = new JLabel("重复密码");
private JTextField nametext = new JTextField();//创建密码框
private JPasswordField passtext = new JPasswordField();
private JPasswordField passtexts = new JPasswordField();
public JButton denglu = new JButton("登录");//JButton 创建按钮
public JButton zhuce = new JButton("注册");
public JButton updatepass = new JButton("修改密码");
public JButton deleteuser = new JButton("删除用户");
public Login() {
Font font = new Font("宋体", Font.BOLD, 12);//Font.awt.font是指提供与字体相关的类和接口,设计字体显示效果(String 字体,int 风格,int 字号);
//Font.PLAIN(普通) Font.BOLD(加粗) Font.ITALIC(斜体)
//Font.BOLD+Font.ITALIC(粗斜体)
super.setTitle("欢迎登录本系统");//设置窗口的标题
super.setBounds(1000,500,800,800);
pan.setLayout(null);//不设置布局管理器
namelab.setBounds(20, 20, 60, 30);//setBounds(int x,int y,int width,int height)前两个组件左上角在容器中的坐标,后两个是组件的宽度和高度
nametext.setBounds(90, 20, 140, 30);
passlab.setBounds(20, 60, 60, 30);
passtext.setBounds(90, 60, 140, 30);
passlabs.setBounds(20, 100, 60, 30);
passtexts.setBounds(90, 100, 140, 30);
denglu.setBounds(30, 140, 90, 20);
zhuce.setBounds(140, 140, 90, 20);
updatepass.setBounds(30, 180, 90, 20);
deleteuser.setBounds(140, 180, 90, 20);
pan.add(namelab);//添加按钮
pan.add(nametext);
pan.add(passlab);
pan.add(passtext);
pan.add(passlabs);
pan.add(passtexts);
pan.add(denglu);
pan.add(zhuce);
pan.add(updatepass);
pan.add(deleteuser);
pan.setBackground(Color.GREEN);
passtexts.setFont(font);
passtext.setFont(font);
zhuce.setFont(font);
updatepass.setFont(font);
deleteuser.setFont(font);
denglu.addActionListener(this);//添加监听
zhuce.addActionListener(this);
updatepass.addActionListener(this);
deleteuser.addActionListener(this);
super.add(pan);//super关键字来引用父类的成分
super.setSize(300, 250);
super.setVisible(true);//窗口是否可见
}
public static void main(String[] args) {
new Login();
}
@Override
public void actionPerformed(ActionEvent arg0) {
if (arg0.getSource() == denglu) {
denglu();
} else if (arg0.getSource() == zhuce) {
zhuce();
} else if (arg0.getSource() == updatepass) {
updatepass();
} else if (arg0.getSource() == deleteuser) {
deleteuser();
}
}
// 登录按钮的事件处理函数
public void denglu() {
ZJdbcs d = new ZJdbcs();
String username = nametext.getText();
String password = passtext.getText();
if (d.compare(username, password)) {
JOptionPane.showMessageDialog(null, "登录成功!");
super.setVisible(false);
}
d.releaseConnection();
}
// 注册按钮触发后的事件处理函数
public void zhuce() {
ZJdbcs d = new ZJdbcs();
String username = nametext.getText();
String password = passtext.getText();
d.insert(username, password);
d.releaseConnection();
}
// 修改密码按钮触发后的事件处理函数
public void updatepass() {
pan.setEnabled(false);
JFrame frame1 = new JFrame("密码修改");
frame1.setSize(250, 200);
JPanel updatepass = new JPanel();
JLabel namelab1 = new JLabel("用户名");
JLabel passlab1 = new JLabel("旧密码");
JLabel newpasslab = new JLabel("新密码");
JTextField nametext1 = new JTextField("" + nametext.getText());
JPasswordField passtext1 = new JPasswordField();
JPasswordField newpasstext = new JPasswordField();
JButton ok = new JButton("修改");
JButton resert = new JButton("重
updatepass.setLayout(null);
namelab1.setBounds(5, 5, 70, 20);
nametext1.setBounds(80, 5, 120, 20);
passlab1.setBounds(5, 30, 70, 20);
passtext1.setBounds(80, 30, 120, 20);
newpasslab.setBounds(5, 60, 70, 20);
newpasstext.setBounds(80, 60, 120, 20);
ok.setBounds(10, 110, 60, 20);
resert.setBounds(90, 110, 60, 20);
updatepass.add(namelab1);
updatepass.add(nametext1);
updatepass.add(passlab1);
updatepass.add(passtext1);
updatepass.add(newpasslab);
updatepass.add(newpasstext);
updatepass.add(ok);
updatepass.add(resert);
frame1.add(updatepass);
frame1.setVisible(true);
ok.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
ZJdbcs d = new ZJdbcs();
String username = nametext1.getText();
String password1 = passtext1.getText();
String newpassword = newpasstext.getText();
if (d.update(username, password1, newpassword)) {
frame1.setVisible(false);
d.releaseConnection();
}
}
});
// 重置文本框 里的内容
resert.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
nametext1.setText("");
passtext1.setText("");
newpasstext.setText("");
}
});
}
// 删除用户按钮触发后的事件处理函数
/*public void deleteuser() {
String username = nametext.getText();
String password = passtext.getText();
ZJdbcs d = new ZJdbcs();
d.delete(username, password);
d.releaseConnection();
}*/
public void deleteuser() {
pan.setEnabled(false);
JFrame frame1 = new JFrame("删除用户");
frame1.setSize(250, 200);
JPanel delete = new JPanel();
JLabel namelab1 = new JLabel("用户名");
JLabel passlab1 = new JLabel("密码");
JTextField nametext1 = new JTextField();
JPasswordField passtext1 = new JPasswordField();
JButton ok = new JButton("确认删除");
delete.setLayout(null);//你定义了个叫delete的pabel存放控件
namelab1.setBounds(5, 5, 70, 20);
nametext1.setBounds(80, 5, 120, 20);
passlab1.setBounds(5, 30, 70, 20);
passtext1.setBounds(80, 30, 120, 20);
ok.setBounds(80, 110, 100, 20);
delete.add(namelab1);
delete.add(nametext1);
delete.add(passlab1);
delete.add(passtext1);
delete.add(ok);
frame1.add(delete);
frame1.setVisible(true);
ok.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
ZJdbcs s = new ZJdbcs();
String username1 = nametext1.getText();
String password1 = passtext1.getText();
s.delete(username1, password1);
frame1.setVisible(false);//如果删除成功,删除界面要置为不可见
s.releaseConnection();
}
});
}
}
实验结构如下:
(1)在MySQL数据库中创建如下数据表:
(2)登录功能的实现如下图:
(3)注册功能的实现如下图:
(4)对数据库中用户的密码进行修改,如下图:
(5)删除数据库中的用户如下图: