JDBCUtils:
package cn.itcase.jdbcutils;
import javax.sql.DataSource;
import org.apache.commons.dbcp.BasicDataSource;
/*
* 使用DBCP实现数据库的连接池
* 连接池配置,自定义类
* 最基本四项完整
* 对于数据库连接池其他配置,自定义
*/
public class JDBCUtils {
private static BasicDataSource datasource = new BasicDataSource();
static {
datasource.setDriverClassName("com.mysql.jdbc.Driver");
datasource.setUrl("jdbc:mysql://localhost:3306/day33_user");
datasource.setUsername("root");
datasource.setPassword("123456");
//对象连接池中的连接数量配置
datasource.setInitialSize(10);//初始化的连接数
datasource.setMaxActive(8);//最大连接数量
datasource.setMaxIdle(5);//最大空闲数
datasource.setMinIdle(1);//最小空闲数
}
//定义静态方法,返回BasicDataSource类的对象
public static DataSource getDataSource() {
return datasource;
}
}
UserDao.java:
package cn.itcase.dao;
import java.sql.SQLException;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.ArrayHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import cn.itcase.jdbcutils.JDBCUtils;
/*
* 操作数据库中的表 day33 表 users
* 两个方法,实现用户的注册和登录
*/
public class UsersDao {
//创建QueryRunner类的对象,构造方法中,传递工具类获取的数据源
private QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource());
/*
* 创建注册功能,接收用户的输入用户名和密码
* 返回注册结果 true 注册成功 false 注册失败,用户名被占
*/
public boolean register(String username,String password) {
try {
//拼写SQL语句,检查用户是否被占,用户名作为条件查询
String sql = "SELECT username FROM users WHERE username=?";
//调用qr对象方法query查询结果集,ScalarHandler 一个结果集
String user = qr.query(sql, new ScalarHandler<String>(), username);
//如果用户名存在,user变量,表示一个用户名,用户名不存在,user变量结果null
if(user!=null)
return false;
//用户名可以使用
//拼写添加用户密码的SQL语句
sql="INSERT INTO users (username,PASSWORD) VALUES (?,?)";
//创建对象数组,保存?占位符的实际参数
Object[] params = {username,password};
//调用qr对象方法update写入数据
qr.update(sql, params);
return true;
}catch (SQLException ex) {
System.out.println(ex);
throw new RuntimeException("登录查询失败");
}
}
/*
* 创建登录功能,接收用户的输入的用户名和密码
* 返回登录的结果true 登录成功 false 登录失败
*/
public boolean login(String username,String password) {
try {
//拼写查询数据表的SQL
String sql = "SELECT * FROM users WHERE username=? and password=?";
Object[] params = {username,password};
//调用qr方法query查询数据表
Object[] result=qr.query(sql, new ArrayHandler(), params);
//对数组进行判断
if(result.length==0) {
return false;
}
return true;
}catch(SQLException ex) {
System.out.println(ex);
throw new RuntimeException("登录查询失败");
}
}
}
UserOperator.java:
package cn.itcase.ui;
import java.util.Scanner;
import cn.itcase.dao.UsersDao;
/*
* 实现和用户的交互部分
* 提供菜单,让用户选择菜单,根据菜单,调用不同的功能
*/
public class UserOperator {
private static Scanner sc = new Scanner(System.in);
public static void main(String[] args) {
UsersDao dao = new UsersDao();
//调用选择方法,获取用户的选择内容
while(true) {
String number=chooser();
//对选择序号判断
switch(number) {
case "1":
//接收键盘输入,调用登录功能
System.out.println("选择的是登录,请输入用户名");
String username = sc.next();
System.out.println("输入密码");
String password = sc.next();
//调用Dao包中的UserDao类中的方法login传递用户名密码
boolean b = dao.login(username, password);
if(b)
System.out.println("登录成功");
else
System.out.println("登录失败,检查你的用户名和密码");
break;
case "2":
//接收键盘输入,调用注册功能
System.out.println("选择的是注册,请输入用户名");
username = sc.next();
System.out.println("请输入密码");
password = sc.next();
//调用Dao包中的UserDao类中的方法register传递用户名密码
b =dao.register(username, password);
if(b)
System.out.println("注册成功");
else
System.out.println("注册失败,用户名被占用,请尝试"+username+"_123");
break;
case "3":
System.exit(0);
default:
System.out.println("没有此功能");
break;
}
}
}
/*
* 定义方法,选择功能菜单的
* 返回选择内容
*/
public static String chooser() {
System.out.println("欢迎光临");
System.out.println("请选择功能菜单");
System.out.println("1 登录 2 注册 3 退出");
return sc.next();
}
}