本例是创建用户注册和登录的数据库操作,通过Swing组件实现注册和登录界面的实现。本例相当于上一次数据库简单操作—注册和登录实例的优化,将界面中登录的方法提取出来单独封装。采用了MVC设计模式,将界面与方法分开。使代码更具可读性。
登录
功能实现
数据库中用户和密码的存储:
登录界面:
登录代码
//SQLManager类
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
//采用单例设计模式
public class SQLManager {
private Connection connection;
private Statement statement;
//获得statement
public Statement getStatement() {
return statement;
}
//赋值statement
public void setStatement(Statement statement) {
this.statement = statement;
}
//获得Connection
public Connection getConnection() {
return connection;
}
//赋值Connection
public void setConnection(Connection connection) {
this.connection = connection;
}
private static SQLManager manager;
private SQLManager() {
//连接数据库的驱动
String driver = "com.mysql.jdbc.Driver";
//指向数据库访问地址
String url = "jdbc:mysql://localhost:3306/clazz";
//数据库的用户名
String user = "root";
//数据库用户密码
String password = "123456";
try {
//加载驱动
Class.forName(driver);
//与数据库建立连接
connection = DriverManager.getConnection(url,user, password);
if(!connection.isClosed()){
//创建数据库操作类
statement = connection.createStatement();
}else{
System.out.println("请打开数据库!");
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* 创建该类的对象
* @return 返回SQLManager对象。
*/
public static synchronized SQLManager newInstance(){
if(manager==null){
manager = new SQLManager();
}
return manager;
}
}
//登录方法
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class SQLOperate {
private static SQLOperate operate;
/**
* 私有化构造方法,实现单例设计模式
*/
private SQLOperate() {
}
/**
* 实现公有的创建SQLOperate类的方法。
* @return 返回SQLOperate对象。
*/
public static synchronized SQLOperate newInstance(){
if(operate ==null){
operate = new SQLOperate();
}
return operate;
}
/**
* 实现登录的方法
* @param userName 传入用户名
* @param password 传入用户密码
* @return 如果用户存在,则返回true; 否则返回false。
*/
public static synchronized boolean signIn(String userName, String password){
//与数据库进行连接
Connection conn = SQLManager.newInstance().getConnection();
//创建查询语句
String sql = "select * from user where name= ? and password=? ";
try {
//创建预处理对象
PreparedStatement statement = conn.prepareStatement(sql);
//传递参数
statement.setString(1, userName);
statement.setString(2, password);
ResultSet set = statement.executeQuery();
set.last();//移动到最后一行。
int num = set.getRow();
if(num ==1){
return true;
}
} catch (SQLException e1) {
e1.printStackTrace();
}
return false;
}
}
//登录界面
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class Login extends JFrame {
private JPanel contentPane;
private JTextField textUserName;
private JTextField textPassword;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Login frame = new Login();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public Login() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 451, 410);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
JLabel lblLogin = new JLabel("登录界面");
lblLogin.setBounds(167, 57, 70, 31);
contentPane.add(lblLogin);
textUserName = new JTextField();
textUserName.setBounds(153, 115, 137, 21);
contentPane.add(textUserName);
textUserName.setColumns(10);
textPassword = new JTextField();
textPassword.setBounds(153, 168, 137, 21);
contentPane.add(textPassword);
textPassword.setColumns(10);
JButton btnNewButton = new JButton("登录");
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
//获取输入的用户名。
String userName = textUserName.getText();
//获取输入的密码
String password = textPassword.getText();
//创建SQLOperate对象。
SQLOperate Operate = SQLOperate.newInstance();
//调用SQLOperate中登录的方法。
boolean isSignIn = Operate.signIn(userName, password);
//如果返回为true则登入成功,否则登录失败。
if(isSignIn){
System.out.println("用户登录成功!");
textUserName.setText("");
textPassword.setText("");
}else{
System.out.println("用户登录失败!");
textUserName.setText("");
textPassword.setText("");
}
}
});
btnNewButton.setBounds(170, 246, 93, 23);
contentPane.add(btnNewButton);
JLabel lblUser = new JLabel("用户名:");
lblUser.setBounds(55, 118, 54, 15);
contentPane.add(lblUser);
JLabel lblPassword = new JLabel("密码:");
lblPassword.setBounds(55, 171, 54, 15);
contentPane.add(lblPassword);
}
}