3.2 数据库连接类
我们先写一个数据库连接类,测试一下和数据库的连接。这里使用Proxool配置了一个数据库连接池,简单地使用了Log4J。
package org.ygy.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.apache.log4j.Logger;
import org.logicalcobwebs.proxool.ProxoolException;
import org.logicalcobwebs.proxool.configuration.PropertyConfigurator;
public class DBUtil {
private static Logger logger = Logger.getLogger(DBUtil.class);
static {
try {
PropertyConfigurator.configure("src/org/ygy/configuration/proxool.properties");
} catch (ProxoolException e) {
e.printStackTrace();
}
}
private DBUtil() {
}
public static Connection getConnection() {
logger.info("getConection() start.");
Connection con = null;
try {
con = DriverManager.getConnection("proxool.stu_pool");
logger.info("getConnection() ok");
} catch (SQLException e) {
logger.error(e.getMessage());
}
return con;
}
public static void close(Connection con) {
if(con != null) {
try {
con.close();
con = null;
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public static void close(Connection con , PreparedStatement pstmt) {
if(pstmt != null) {
try {
pstmt.close();
pstmt = null;
} catch (SQLException e) {
e.printStackTrace();
}
}
close(con);
}
public static void close(Connection con , PreparedStatement pstmt , ResultSet rs) {
if(rs != null) {
try {
rs.close();
rs = null;
} catch (SQLException e) {
e.printStackTrace();
}
}
close(con , pstmt);
}
}
Proxool的配置文件:
jdbc-0.proxool.alias=stu_pool
jdbc-0.proxool.driver-url=jdbc:mysql://localhost/StudentManageSystem
jdbc-0.proxool.driver-class=com.mysql.jdbc.Driver
jdbc-0.user=root
jdbc-0.password=5210
jdbc-0.proxool.maximum-connection-count=50
jdbc-0.proxool.minimum-connection-count=5
jdbc-0.proxool.house-keeping-test-sql=select CURRENT_DATE
我们测试一下:
@Test
public void testGetConnection() {
Connection con = DBUtil.getConnection();
assertNotNull(con);
DBUtil.close(con);
}
3.3 登录模块-管理员
我们先写一个登录界面:先实现了管理员的登录,对界面不是很擅长,简单地做了一个。
注:数据库中的密码,没有进行处理,都是明文。
图1 登录界面
package org.ygy.view;
import java.awt.Container;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JRadioButton;
import javax.swing.JTextField;
import org.ygy.exception.ServiceException;
import org.ygy.service.IAdminService;
import org.ygy.service.impl.AdminService;
/**
* 登录时的选择登录类型界面
*
* @author Administrator
*
*/
public class StartFrame extends JFrame {
private static final long serialVersionUID = -1264932141929172778L;
private Container container = null;
private JPanel inputPanel = null;
private JPanel buttonPanel = null;
private JPanel typePanel = null;
private JLabel idLabel = null;
private JLabel pwdLabel = null;
private JLabel typeLabel = null;
private JRadioButton studentRadio = null;
private JRadioButton adminRadio = null;
private JTextField idText = null;
private JPasswordField pwdText = null;
private JButton loginButton = null;
private JButton resetButton = null;
private int width = 460;
private int height = 270;
private int locationX = 0;
private int locationY = 0;
public StartFrame() {
setTitle("登录界面");
//设置居中显示
locationX = (Toolkit.getDefaultToolkit().getScreenSize().width - width) / 2;
locationY = (Toolkit.getDefaultToolkit().getScreenSize().height - height) / 2;
setBounds(locationX, locationY , width , height);
container = this.getContentPane();
container.setLayout(null);
initialInputPanel();
initialRadioPanel();
initialButtonPanel();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
/**
* 初始化输入面板
*/
private void initialInputPanel() {
inputPanel = new JPanel();
inputPanel.setLayout(null);
inputPanel.setBounds(0 , 0 , width , height * 2 / 4);
idLabel = new JLabel("账号:");
pwdLabel = new JLabel("密码:");
idText = new JTextField(10);
pwdText = new JPasswordField(10);
inputPanel.add(idLabel);
inputPanel.add(idText);
inputPanel.add(pwdLabel);
inputPanel.add(pwdText);
container.add(inputPanel);
}
/**
* 初始化按钮面板
*/
private void initialButtonPanel() {
buttonPanel = new JPanel();
buttonPanel.setLayout(null);
buttonPanel.setBounds(0 , height * 3 / 4 , width , height/ 4);
loginButton = new JButton("登录");
loginButton.addActionListener(new LoginListener());
resetButton = new JButton("重置");
resetButton.addActionListener(new LoginListener());
idLabel.setBounds(50, 50, 30, 30);
pwdLabel.setBounds(50, 100, 30, 30);
idText.setBounds(150, 50, 170, 30);
pwdText.setBounds(150, 100, 170, 30);
loginButton.setBounds(70, 0, 130, 30);
resetButton.setBounds(230 ,0 , 130 , 30);
buttonPanel.add(loginButton);
buttonPanel.add(resetButton);
container.add(buttonPanel);
}
/**
* 初始化单选面板
*/
private void initialRadioPanel() {
studentRadio = new JRadioButton("学生");
studentRadio.setBounds(200 , 17 , 80 , height/ 8);
studentRadio.setSelected(true);
adminRadio = new JRadioButton("管理员");
adminRadio.setBounds(300 , 17 , 100 , height/ 8);
ButtonGroup loginGroup = new ButtonGroup();
loginGroup.add(studentRadio);
loginGroup.add(adminRadio);
typeLabel = new JLabel("请选择登录类型:");
typeLabel.setBounds(50 , 0, 100 , height/ 4);
typePanel = new JPanel();
typePanel.setBounds(0 , height * 2 / 4 , width , height/ 4);
typePanel.setLayout(null);
typePanel.add(typeLabel);
typePanel.add(studentRadio);
typePanel.add(adminRadio);
container.add(typePanel);
}
/**
* 按钮的监听器
*
* @author Administrator
*
*/
class LoginListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
if("登录".equals(e.getActionCommand())) {
if(validateNotNull()) {
if(studentLogin()) {
System.out.println("su login");
} else {
IAdminService adminService = new AdminService();
try {
adminService.login(idText.getText(), new String(pwdText.getPassword()));
StartFrame.this.setVisible(false);
StartFrame.this.dispose();
} catch (ServiceException e1) {
display(e1.getMessage() , "错误提示");
}
}
}
} else if("重置".equals(e.getActionCommand())) {
clearInput();
}
}
}
/**
* 清空输入信息
*/
private void clearInput() {
idText.setText("");
pwdText.setText("");
studentRadio.setSelected(true);
}
/**
* 验证登录信息不为空
*
* @return
*/
private boolean validateNotNull() {
boolean result = true;
String id = idText.getText();
String password = new String(pwdText.getPassword());
if(id == null || "".equals(id.trim())) {
display("账号不能为空!" , "错误提示");
result = false;
} else if(password == null || "".equals(password.trim())) {
display("密码不能为空" , "错误提示");
result = false;
}
return result;
}
private boolean studentLogin() {
boolean result = false;
if(studentRadio.isSelected()) {
result = true;
}
return result;
}
/**
* 显示提示框,显示信息
*
* @param message 要显示的内容
* @param title 提示框标题
*/
private void display(String message , String title) {
JOptionPane.showMessageDialog(container, message, title, JOptionPane.INFORMATION_MESSAGE);
}
public static void main(String[] args) {
new StartFrame();
}
}
package org.ygy.service;
import org.ygy.exception.ServiceException;
public interface IAdminService {
public void login(String name , String password) throws ServiceException;
}
package org.ygy.service.impl;
import org.apache.log4j.Logger;
import org.ygy.dao.IAdminDao;
import org.ygy.dao.impl.AdminDao;
import org.ygy.exception.DaoException;
import org.ygy.exception.ServiceException;
import org.ygy.model.Administrator;
import org.ygy.service.IAdminService;
public class AdminService implements IAdminService {
private Logger logger = Logger.getLogger(AdminService.class);
private IAdminDao adminDao = null;
public AdminService () {
adminDao = new AdminDao();
}
@Override
public void login(String name, String password) throws ServiceException {
try {
Administrator admin = adminDao.findByName(name);
if(admin == null) {
logger.debug("账户不存在!");
throw new ServiceException("该账户不存在!");
} else {
if(password.equals(admin.getPassword())) {
logger.debug("成功登录!");
return;
} else {
logger.debug("密码不正确!");
throw new ServiceException("密码不正确!");
}
}
} catch (DaoException e) {
logger.debug(e.getMessage());
throw new ServiceException(e.getMessage());
}
}
}
package org.ygy.dao;
import org.ygy.exception.DaoException;
import org.ygy.model.Administrator;
public interface IAdminDao {
public Administrator findByName(String name) throws DaoException;
}
package org.ygy.dao.impl;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.apache.log4j.Logger;
import org.ygy.dao.IAdminDao;
import org.ygy.exception.DaoException;
import org.ygy.model.Administrator;
import org.ygy.util.DBUtil;
public class AdminDao implements IAdminDao {
private Logger logger = Logger.getLogger(AdminDao.class);
private Connection con = null;
private PreparedStatement pstmt = null;
private ResultSet rs = null;
@Override
public Administrator findByName(String name) throws DaoException {
String sql = "select password from t_administrator where name=?";
Administrator admin = null;
con = DBUtil.getConnection();
try {
pstmt = con.prepareStatement(sql);
pstmt.setString(1 , name);
rs = pstmt.executeQuery();
if(rs.next()) {
admin = new Administrator();
admin.setName(name);
admin.setPassword(rs.getString("password"));
}
} catch (SQLException e) {
logger.debug(e.getMessage());
throw new DaoException(e.getMessage());
} finally {
DBUtil.close(con, pstmt, rs);
}
return admin;
}
}