java 新手向 数据库管理系统

简单写的一个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版权协议,转载请附上原文出处链接和本声明。