简单写的一个java的控制台版本的数据库管理系统。基本要靠手写命令,做着玩,大佬们见笑了
个人博客:cctyl.github.io
使用时需要导入mysql驱动一级DBCP包
第三方jar包链接: https://pan.baidu.com/s/1pdvsLStvHlHnREOWKNxaVA 提取码: cvy5
以下是代码。
主代码:
package cn.tyl.dbcp01;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;
/*
* 信息管理系统
* 要实现的功能有 增删改查
* 每次执行完一个动作,都会提示一次返回主界面
* 查:1 查全部 默认执行查全部的代码,提示返回主界面
* 2 指定查 进入后手动输入代码来查询
* 增:增加一条记录,手动输入,成功有提示
*
*
*/
public class DBCPTestDemo {
public static String SEPARATOR = System.getProperty("line.separator");
private static Connection conn = null;
static {
try {
conn = DBCPUtils.getConnection();
}catch(Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws Exception {
dbSearch();
}
public static void dbSearch() throws SQLException {
System.out.println("欢迎使用数据库信息管理系统");
tips();
Scanner sc = new Scanner(System.in);
//判断有没有输入
while(sc.hasNextLine()) {
switch(sc.nextLine()) {
case "1":
//查询数据
//1 查询全部
System.out.println("1 查询全部 ");
System.out.println("2 指定查询 ");
String s = sc.nextLine();
switch(s) {
case "1":
chaAll();
break;
case "2":
zhiDing(sc);
break;
default:
System.out.println("输入错误,重试");
tips();
break;
}
break;
//改
case "2":
update(sc);
break;
//删
case "3":
delete(sc);
break;
//插入
case "4":
insert(sc);
break;
default:
System.out.println("输入有误,请重新输入");
dbSearch();
break;
}
}
}
private static void delete(Scanner sc) throws SQLException {
//删除记录,输入uname来删除
System.out.println("输入你要删除的用户的名字");
String sql = "delete from user where uname=?";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1, sc.nextLine());
ps.executeUpdate();
System.out.println("删除成功");
chaAll();
fanHui();
}
private static void update(Scanner sc) throws SQLException {
//提示
System.out.println("输入代码");
PreparedStatement ps = conn.prepareStatement(sc.nextLine());
ps.executeUpdate();
ps.close();
System.out.println("修改成功");
chaAll();
fanHui();
}
//增加记录
private static void insert(Scanner sc) throws SQLException {
//提示
System.out.println("输入代码");
PreparedStatement ps = conn.prepareStatement(sc.nextLine());
ps.executeUpdate();
ps.close();
System.out.println("增加成功");
chaAll();
fanHui();
}
private static Object zhiDing(Scanner sc) {
System.out.println("输入代码");
try {
query(sc.nextLine());
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
private static Object chaAll() {
try {
query("select * from user");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
public static void tips() {
System.out.println("输入你要执行的动作对应的数字");
System.out.println("1 查询数据");
System.out.println("2 修改数据");
System.out.println("3 删除数据");
System.out.println("4 增加数据");
}
private static void query(String sql) throws SQLException {
PreparedStatement st = conn.prepareStatement(sql);
ResultSet rs = st.executeQuery();//获取结果集
while(rs.next()) {
//打印结果
System.out.println(rs.getObject("uid")+" "+rs.getObject("uname")+" "+rs.getObject("upassword"));
}
//关闭资源
st.close();
rs.close();
fanHui();
}
public static void fanHui() throws SQLException {
Thread t = new Thread();
System.out.println("输入任意字符回到主界面");
Scanner sc = new Scanner(System.in);
if(sc.hasNext()) {
dbSearch();
}
}
}
DBCP工具类
package cn.tyl.dbcp01;
import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
import javax.sql.DataSource;
import org.apache.commons.dbcp.BasicDataSource;
import org.apache.commons.dbcp.BasicDataSourceFactory;
/*
* 加载配置文件版本的DBCP工具类
*
* 有一个核心类 BasicDataSourceFactory(工厂),使用它来创建BasicDataSource
* 只需把配置文件写好,通过Properties流加载,在把Properties流传给工厂即可获得连接池
*
*
*/
public class DBCPUtilsPro {
private static DataSource ds =null;
static {
Properties ps = new Properties();
//这里不直接加载,因为配置文件放在src目录下找不到。使用类加载器
//先获取这个类的字节码对象,在获取它的类加载器,在使用类加载器的getResourceAsStream方法
try {
ps.load(DBCPUtilsPro.class.getResourceAsStream("dbcpconfig.properties"));
ds = BasicDataSourceFactory.createDataSource(ps);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static Connection getConnection() throws SQLException {
return ds.getConnection();
}
public static void closeAll(Connection conn, Statement st, ResultSet rs) {
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (st != null) {
try {
st.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
//重载关闭方法,因为不查询时没有ResultSet对象
public static void closeAll(Connection conn, Statement st) {
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (st != null) {
try {
st.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
DBCP的配置文件
#连接设置 ,必须配置的
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/db297
username=root
password=root
#<!-- 初始化连接 -->
initialSize=10
#最大连接数量
maxActive=50
#<!-- 最大空闲连接 -->
maxIdle=20
#<!-- 最小空闲连接 -->
minIdle=5
#<!-- 超时等待时间以毫秒为单位 60000毫秒/1000等于60秒 -->
maxWait=60000
#JDBC驱动建立连接时附带的连接属性属性的格式必须为这样:[属性名=property;]
#注意:"user" 与 "password" 两个属性会被明确地传递,因此这里不需要包含他们。
connectionProperties=useUnicode=true;characterEncoding=utf8
#指定由连接池所创建的连接的自动提交(auto-commit)状态。
defaultAutoCommit=true
#driver default 指定由连接池所创建的连接的只读(read-only)状态。
#如果没有设置该值,则“setReadOnly”方法将不被调用。(某些驱动并不支持只读模式,如:Informix)
defaultReadOnly=
#driver default 指定由连接池所创建的连接的事务级别(TransactionIsolation)。
#可用值为下列之一:(详情可见javadoc。)NONE,READ_UNCOMMITTED, READ_COMMITTED, REPEATABLE_READ, SERIALIZABLE
defaultTransactionIsolation=REPEATABLE_READ
版权声明:本文为cccctyl原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。