两个模块:
1.管理员模块(注册、登录)
2.学生信息管理模块(增删改查)
maven的具体配置方法可以看帖子:
链接地址:maven下载配置
3.1 pom.xml
<dependencies>
<!--mysql驱动包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.35</version>
</dependency>
<!-- c3p0连接池 -->
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.2</version>
</dependency>
<!-- junit单元测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
<!-- 修改默认maven的JDK版本为1.8 -->
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
3.2 c3p0.properties
#c3p0DBPool
driverClass=com.mysql.jdbc.Driver
jdbcUrl=jdbc:mysql://localhost:3306/scy_stuSMS?useUnicode=true&characterEncoding=utf8&useSSL=false
user=root
password=password
3.3 JDBCUtils类
package cn.scy.utils;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;
import org.junit.Test;
import com.mchange.v2.c3p0.ComboPooledDataSource;
/**
* 此类是加载C3P0的properties文件配置
*/
public class JDBCUtils {
public static Connection conn=null;
public static PreparedStatement ps=null;
public static ResultSet rs=null;
public static ComboPooledDataSource dataSource =null;
/**
*利用静态代码块加载c3p0数据库连接池的配置
* @return
*/
static {
try {
//加载配置文件 import java.util.Properties;
Properties props = new Properties();
//通过输入流获取文件中的内容 反射机制
InputStream input =
JDBCUtils.class
.getClassLoader()
.getResourceAsStream(
"c3p0.properties");
//通过配置文件的类获取输入流中的文件内容
props.load(input);
//获取文件中的每一项配置
String dirverClass =
props.getProperty("dirverClass");
String jdbcUrl =
props.getProperty("jdbcUrl");
String user =
props.getProperty("user");
String password =
props.getProperty("password");
//创建连接池对象
dataSource = new ComboPooledDataSource();
//为数据库连接池设置管理值
dataSource.setDriverClass(dirverClass);
dataSource.setJdbcUrl(jdbcUrl);
dataSource.setUser(user);
dataSource.setPassword(password);
dataSource.setInitialPoolSize(10);
dataSource.setMaxPoolSize(100);
dataSource.setMinPoolSize(10);
} catch (Exception e) {
e.printStackTrace();
}
}
//获取连接
public static Connection getConn() {
try {
//获取连接池中的一个连接
conn = dataSource.getConnection();
} catch (SQLException e) {
e.printStackTrace();
}
//返回连接
return conn;
}
//关闭连接
//查询关闭连接
public static void close(Connection conn,PreparedStatement ps,ResultSet rs) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
//增删改关闭连接
public static void close(Connection conn,PreparedStatement ps) {
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
// 测试连接
//@Test
// public void test() {
// Connection con = getConn();
// System.out.println(con);
//
//
// }
}
3.4 UserDao类
package cn.scy.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Scanner;
import cn.scy.utils.JDBCUtils;
/**
* 管理员的CRUD
*/
public class UserDao {
//键盘输入对象
public static Scanner input = null;
//数据库连接对象
public static Connection conn =null;
//sql执行对象
public static PreparedStatement ps = null;
//处理结果集对象
public static ResultSet rs =null;
//管理方法
public static void manager() {
//创建接收对象
input = new Scanner(System.in);
System.out.println("********登录界面********");
System.out.println("* *");
System.out.println("* 1.管理员登录 *");
System.out.println("* 2.注册管理员 *");
System.out.println("* 3.退出系统 *");
System.out.println("* *");
System.out.println("**********************");
System.out.println("请选择:>>");
//接收用户的选项
int m = input.nextInt();
//根据用户选项完成相应业务
switch (m) {
case 1:
login();
break;
case 2:
insert();
break;
case 3:
System.out.println("欢迎下次使用本系统!");
break;
default:
System.out.println("非法输入");
//再次调用选项框
manager();
break;
}
}
//管理员注册
public static void insert() {
try {
//创建接收对象
input = new Scanner(System.in);
System.out.println("********注册管理员********");
System.out.println("请输入用户名:");
String name = input.next();
System.out.println("请输入密码:");
String password = input.next();
System.out.println("请输入再次密码:");
String passwd = input.next();
while(true) {
/*
* TODO 思路: 在插入当前用户之前,去数据库查询是否有当前用户的用户
*存在,如果有则提示用户名被占用,然后重新接收。
*如果没有直接注册。
*/
boolean sname = selectUserByUsername(name);
if(sname){
System.out.println("用户名已经被占用!请重新输入!");
System.out.println("请输入用户名:");
name = input.next();
//再次输入密码
System.out.println("请输入密码:");
password = input.next();
System.out.println("请输入再次密码:");
passwd = input.next();
}else {
break;//结束用户名验证
}
}
while(true) {
//判断两次密码是否一致
if(password.equals(passwd)) {
//获取连接
conn = JDBCUtils.getConn();
//编写sql语句
String sql = "insert into user values(null,?,?)";
//处理占位符
ps = conn.prepareStatement(sql);
//循环查询和判断用户名是否被占用以及两次密码是否一致
ps.setString(1,name);
ps.setString(2,password);
//执行sql语句
int rows = ps.executeUpdate();
//返回值为1 插入成功
if(rows==1) {
System.out.println("用户:"+name+"注册成功!");
//跳转登录业务
login();
break;//结束循环
}else {
System.out.println("注册失败!用户名或密码错误!");
}
}else {
System.out.println("两次密码不一致!");
//再次输入密码
System.out.println("请输入密码:");
password = input.next();
System.out.println("请输入再次密码:");
passwd = input.next();
}
}
}catch(Exception e) {
e.printStackTrace();
}finally {
//关闭连接
JDBCUtils.close(conn, ps);
}
}
//管理员登录
public static void login() {
try {
//创建接收对象
input = new Scanner(System.in);
System.out.println("********管理员登录********");
System.out.println("请输入用户名:");
String name = input.next();
System.out.println("请输入密码:");
String password = input.next();
//获取连接
conn = JDBCUtils.getConn();
//sql语句
String sql =
"select * from user where username=? and password=?";
//处理占位符
ps = conn.prepareStatement(sql);
ps.setString(1,name);
ps.setString(2,password);
//执行sql语句
rs = ps.executeQuery();
if(rs.next()){
System.out.println("用户:"+name+"登录成功");
//TODO 跳转学生管理系统页面
StuDao.manager();
}else {
System.out.println("登录失败!用户名或密码错误!");
}
}catch(Exception e) {
e.printStackTrace();
}finally {
//关闭连接
JDBCUtils.close(conn, ps, rs);
}
}
//根据用户名查询用户--避免出现管理员重名
public static boolean selectUserByUsername(String name) {
//默认没查到用户
boolean flag = false;
try {
//获取连接
conn = JDBCUtils.getConn();
//sql语句
String sql =
"select * from user where username=?";
//处理占位符
ps = conn.prepareStatement(sql);
ps.setString(1,name);
//执行sql语句
rs = ps.executeQuery();
if(rs.next()){
//返回查询到的用户
flag = true;
}
}catch(Exception e) {
e.printStackTrace();
}
return flag;
}
}
3.5 StuDao类
package cn.scy.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Scanner;
import cn.scy.utils.JDBCUtils;
/**
* 处理学生信息CRUD
*/
public class StuDao {
//键盘输入对象
public static Scanner input = null;
//数据库连接对象
public static Connection conn =null;
//sql执行对象
public static PreparedStatement ps = null;
//处理结果集对象
public static ResultSet rs =null;
//管理方法
public static void manager() {
//创建接收对象
input = new Scanner(System.in);
System.out.println("********学生信息管理界面********");
System.out.println("* 1.学生信息查询 *");
System.out.println("* 2.学生信息修改 *");
System.out.println("* 3.学生信息添加 *");
System.out.println("* 4.学生信息删除 *");
System.out.println("* 5.退出系统 *");
System.out.println("***************************");
System.out.println("请选择:>>");
//接收用户的选项
int m = input.nextInt();
//根据用户选项完成相应业务
switch (m) {
case 1://学生信息查询
selectInfo();
//再次跳转选项
manager();
break;
case 2://学生信息修改
updateInfo();
//再次跳转选项
manager();
break;
case 3://学生信息添加
insertInfo();
//再次跳转选项
manager();
break;
case 4://学生信息删除
deleteInfo();
//再次跳转选项
manager();
break;
case 5:
System.out.println("欢迎下次使用本系统!");
break;
default:
System.out.println("非法输入");
//再次跳转选项
manager();
break;
}
}
//删除
private static void deleteInfo() {
//先执行查询
selectInfo();
try {
System.out.println("请输入您要删除的学生编号:");
int stuid = input.nextInt();
//获取连接
conn = JDBCUtils.getConn();
//编写sql语句
String sql = "select * from student where id=?";
//处理占位符
ps = conn.prepareStatement(sql);
ps.setInt(1,stuid);
//执行sql语句
rs = ps.executeQuery();
//如果结果集的第一行数据为0
if(!(rs.next())) {
System.out.println("暂无学生信息!");
}else {
//指针上移
rs.beforeFirst();
System.out.println("===========学生信息===========");
System.out.println("学号\t姓名\t性别\t年龄\t班级");
//遍历结果集的信息
while(rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
String sex = rs.getString("sex");
int age = rs.getInt("age");
String classes = rs.getString("classes");
System.out.println(
id+"\t"+name+"\t"+sex+"\t"+age+"\t"+classes);
}
System.out.println("您确定要删除该条学生信息吗?(yes或no)");
String str =input.next();
if(str.equals("yes")) {
//编写sql语句
String sql2 ="delete from student where id=?";
//处理占位符
ps = conn.prepareStatement(sql2);
ps.setInt(1,stuid);
//执行sql语句
int rows = ps.executeUpdate();
if(rows!=0) {
System.out.println("学号为:"+stuid+"的学生信息删除成功!");
//自动跳转查询
selectInfo();
}else {
System.out.println("学号为:"+stuid+"的学生信息删除失败!");
}
}else {
System.out.println("学号为:"+stuid+"的学生信息删除失败!");
}
}
}catch(Exception e) {
e.printStackTrace();
}finally {
JDBCUtils.close(conn, ps,rs);
}
}
//添加
private static void insertInfo() {
//判断是否继续插入学生信息
String str= "yes";//添加操作指令 yes no
try {
//循环执行插入操作
while(true) {
//继续执行插入
if(str.equals("yes")) {
System.out.println("===========学生信息录入===========");
System.out.println("请输入学生姓名:");
String stuName = input.next();
System.out.println("请输入学生年龄:");
int stuAge = input.nextInt();
System.out.println("请输入学生性别:");
String stuSex = input.next();
System.out.println("请输入学生所在班级:");
String stuClasses = input.next();
//获取连接
conn = JDBCUtils.getConn();
//编写sql语句
String sql = "insert into student values(null,?,?,?,?)";
//处理占位符
ps = conn.prepareStatement(sql);
/*
* TODO 思路: 在插入当前学生之前,去数据库查询是否有存在当前学生,
* 根据班级划分。
*,如果有则提示学生已经存在,然后重新接收。
*如果没有直接注册。
*/
ps.setString(1,stuName);
ps.setString(2,stuSex);
ps.setInt(3, stuAge);
ps.setString(4,stuClasses);
//调用方法执行sql语句。处理返回结果
int rows = ps.executeUpdate();
if(rows!=0) {
System.out.println("学生信息添加成功!");
}else {
System.out.println("学生信息添加失败!");
}
System.out.println("是否继续插入学生信息?(yes或no)");
str = input.next();
}else {//no 提出插入模式
System.out.println("学生信息添加完毕!");
//自动跳转学生信息查询
selectInfo();
break;//结束循环
}
}
}catch(Exception e) {
e.printStackTrace();
}finally {
JDBCUtils.close(conn, ps);
}
}
//修改学生信息
private static void updateInfo() {
//查询学生信息
selectInfo();
try {
System.out.println("请输入要修改的学生编号:");
int id = input.nextInt();
//获取连接
conn = JDBCUtils.getConn();
//创建sql语句
String sql = "select * from student where id =?";
//处理占位符
ps = conn.prepareStatement(sql);
ps.setInt(1, id);
//执行sql语句
rs = ps.executeQuery();
//如果结果集的第一行数据为0
if(!(rs.next())) {
System.out.println("没有编号为:"+id+"的学生信息!");
}else {
//指针上移
rs.beforeFirst();
System.out.println("========学生信息========");
System.out.println("学号\t姓名\t年龄\t性别\t班级");
while(rs.next()) {
int id2 = rs.getInt("id");
String username = rs.getString("name");
int age = rs.getInt("age");
String sex = rs.getString("sex");
String classes = rs.getString("classes");
System.out.println(id2+"\t"+username+"\t"+age+"\t"+sex+"\t"+classes);
}
System.out.println("========修改学生信息========");
System.out.println("请输入修改后学生姓名:");
String stuName2 = input.next();
System.out.println("请输入修改后学生年龄:");
int age2 = input.nextInt();
System.out.println("请输入修改学生性别:");
String sex2 = input.next();
System.out.println("请输入修改后学生所在班级:");
String classes2 = input.next();
System.out.println("您确认修改该条学生信息吗?(yes或no)");
String str = input.next();
if(str.equals("yes")) {//创建sql语句
String sql2 = "update student set name=?,age=?,sex=?,classes=? where id=?";
//处理占位符
ps = conn.prepareStatement(sql2);
ps.setString(1, stuName2);
ps.setInt(2, age2);
ps.setString(3, sex2);
ps.setString(4, classes2);
ps.setInt(5, id);
//调用方法执行sql语句,处理返回结果
ps.executeUpdate();
System.out.println("学号为:"+id+"的学生信息修改成功!");
//调用查询方法
selectInfo();
}else {
System.out.println("学号为:"+id+"的学生信息修改失败!");
}
}
}catch(SQLException e) {
System.out.println("学生信息修改失败!");
e.printStackTrace();
}finally {
JDBCUtils.close(conn, ps, rs);
}
}
//查询
private static void selectInfo() {
try {
//获取连接
conn = JDBCUtils.getConn();
//编写sql语句
String sql = "select * from student";
//预编译sql语句
ps = conn.prepareStatement(sql);
//执行sql语句
rs = ps.executeQuery();
//如果结果集的第一行数据为0
if(!(rs.next())) {
System.out.println("暂无学生信息!");
}else {
//指针上移
rs.beforeFirst();
System.out.println("===========学生信息===========");
System.out.println("学号\t姓名\t性别\t年龄\t班级");
//遍历结果集的信息
while(rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
String sex = rs.getString("sex");
int age = rs.getInt("age");
String classes = rs.getString("classes");
System.out.println(
id+"\t"+name+"\t"+sex+"\t"+age+"\t"+classes);
}
}
}catch(Exception e) {
e.printStackTrace();
System.out.println("学生信息查询失败!");
}finally {
JDBCUtils.close(conn, ps, rs);
}
}
}
3.6 StuManagerSystem主界面类
package cn.scy.main;
import cn.scy.dao.UserDao;
/**
* 系统主界面
* @author Administrator
*
*/
public class StuManagerSystem {
public static void main(String[] args) {
System.out.println("=========欢迎使用JDBC版学生信息管理系统=========");
//管理员界面
UserDao.manager();
}
}