JDBC操作数据库基本封装

package cn.mxl.jdbc;

import java.sql.Connection;
import java.sql.DriverAction;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Scanner;

public class MenuStudent extends jdbcUtil{
	//所有方法都能时候用输入流对象
	public static Scanner input = new Scanner(System.in);
	//主函数方法main
	public static void main(String[] args) {
		//直接进入一级菜单
		one();
	}

/**
 * 一级菜单
 */
	private static void one() {

		System.out.println("1.注册");
		System.out.println("2.登录");
		System.out.println("3.退出");
	    int num = input.nextInt();
		switch (num) {
		case 1://注册
			zhuce();
			break;
		case 2://登录
			denglu();
			break;
		case 3://退出
			
			break;
		default:
			System.out.println("输入错误重新输入");
			one();
			break;
		}
		
	}
/**
 * 登录
 */
private static void denglu() {
	try {
		System.out.println("请输入用户名");
		String name = input.next();
		System.out.println("请输入密码");
		String pwd = input.next();


		//sql语句
		String sql="SELECT * FROM student WHERE name=? AND password=?";
		Object[] params = {name,pwd};
		rs=myExcuteQuery(sql,params);
		
		if (rs.next()) {//证明有数据
			System.out.println("登录成功");
			two();//二级菜单
		}else {
			System.out.println("请重新登录");
			denglu();
		}
	} catch (SQLException e) {
		e.printStackTrace();
	} catch (ClassNotFoundException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}finally {//释放资源
		closeConnection();
	}
}


/**
 * 二级菜单
 */
private static void two() {
	System.out.println("请选择序号输入");
	System.out.println("1.查询所有爱好");
	System.out.println("2.修改密码");
	System.out.println("3.删除用户");
	int num = input.nextInt();
	switch (num) {
	case 1:
		//查询所有爱好
		suoyou();
		break;
	case 2:
		//修改密码
		Xaihao();
		break;
	case 3:
		//删除用户
		Saihao();
		break;
	default:
		System.out.println("输入错误重新输入");
		two();
		break;
	}
}
/**
 * 查询所有
 */
private static void suoyou() {
	try {
		//创建sql语句
		String sql ="SELECT * FROM student ";
		rs=myExcuteQuery(sql);
		
		System.out.println("ID\t用户名\t密码\t爱好");
		
		//循环获取每一个student对象
		while (rs.next()) {
			System.out.print(rs.getString("NO")+"\t");
			System.out.print(rs.getString("name")+"\t");
			System.out.print(rs.getString("password")+"\t");
			System.out.println(rs.getString("aihao"));
		}
		
	} catch (SQLException e) {
		e.printStackTrace();
	} catch (ClassNotFoundException e) {
		e.printStackTrace();
	}finally {
		closeConnection();
	}
}
/**
 * 删除用户
 */
private static void Saihao() {
	System.out.println("请输入你要删除的用户");
	String name = input.next();
	try {
		
		String sql ="DELETE  FROM student WHERE `name`=?";
		Object []param= {name};
		int row = myExcuteUpdate(sql,param);
		if (row>0) {
			System.out.println("删除成功");
		}else {
			System.out.println("删除失败");
		}
		two();//返回二级菜单
	} catch (ClassNotFoundException e) {
		e.printStackTrace();
	} catch (SQLException e) {
		e.printStackTrace();
	}
	
}
/**
 * 修改密码
 */
private static void Xaihao() {
	System.out.println("请输入账号");
	String name=input.next();
	System.out.println("请输入原密码");
	String pwd = input.next();
	System.out.println("请输入新密码");
	String pwd2 = input.next();
	try {
		//创建sql语句
		String sql = "UPDATE student SET `password`=? WHERE `password`=?";
		Object []param = {pwd,pwd2};
		int row =myExcuteUpdate(sql,param);
		if (row>0) {
			System.out.println("新密码更改成功");
		}else {
			System.out.println("新密码更改失败");
		}
		two();//返回二级菜单
	} catch (ClassNotFoundException e) {
		e.printStackTrace();
	} catch (SQLException e) {
		e.printStackTrace();
	}
}
/**
 * 注册
 */
	private static void zhuce() {
		System.out.println("请输入ID");
		String ID = input.next();
		System.out.println("请输入用户名");
		String name = input.next();
		System.out.println("请输入密码");
		String pwd = input.next();
		
		try {//加载驱动
			getConnection();
			//需要的sql语句
			String sql="INSERT INTO student(`NO`,`name`,`password`)VALUES (?,?,?);";
			Object [] param = {ID,name,pwd};
			int row = myExcuteUpdate(sql,param);
			
		if (row>0) {
			System.out.println("注册成功");
			one();
		}else {
			System.out.println("注册失败");
			zhuce();//再次注册
		}
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
			
	}

}
package cn.mxl.jdbc;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

public class ConfigManager {
	//01.创建本类的静态变量
	private static ConfigManager manager = new ConfigManager();
	
	private static Properties properties;
	
	//02.私有化构造
	private ConfigManager() {
		//实例化Properties对象
		properties = new Properties();
		InputStream stream = ConfigManager.class.getClassLoader()
				.getResourceAsStream("jdbc.properties");
	//加载properties文件
		try {
			properties.load(stream);
		} catch (IOException e) {
			e.printStackTrace();
		}finally {//关闭流
			try {
				stream.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}

		
	}
	
	//03.对外提供访问接口
		public static synchronized ConfigManager getInstance() {
			return manager;
		}
	//04.让用户传递一个文件中的key  我们返回文件中的value
		public static String getValue(String key) {
			return properties.getProperty(key);
		}

	
	
}

package cn.mxl.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 * 所有JDBC操作数据库的工具类
 * 01.数据库四要素的获取
 * 02.开启连接
 * 03.关闭连接
 * 04.公共的增删改
 * 05.公共的查询
 */
public class jdbcUtil {
	public static Connection conn = null;//便于我们释放资源
	public static PreparedStatement ps = null;
	public static ResultSet rs = null;//查询数据返回的结果集
	
	/**
	 * 连接数据库
	 */
		public static boolean getConnection() throws ClassNotFoundException, 
		SQLException {
		try {
			//通过反射机制获取数据库驱动包
			Class.forName(ConfigManager.getInstance().getValue("jdbc.driver"));
			//通过DriverManager获取Conncetion连接对象
			conn=DriverManager.getConnection(ConfigManager.getInstance().getValue("jdbc.url"),
					ConfigManager.getInstance().getValue("jdbc.userName"),
					ConfigManager.getInstance().getValue("jdbc.passWord"));
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		}
		return true;
	}
		
		
	/**
	 * 释放资源
	 */
		public static void closeConnection() {
				if (ps!=null) {
					try {
						ps.close();
					} catch (SQLException e) {
						e.printStackTrace();
					}
				}
				if (conn!=null) {
					try {
						conn.close();
					} catch (SQLException e) {
						e.printStackTrace();
					}
				}	
				if (rs!=null) {
					try {
						rs.close();
					} catch (SQLException e) {
						e.printStackTrace();
					}
				}
			}
		
	/**
	 * 公共的增删改
	 * 
	 * 我们可以确定的是有sql语句!因为只有sql语句才能操作数据库!
	 * 但是我们无法确定的是:
	 * 	01.参数的个数
	 * 	02.参数的类型
	 * 
	 * 我们应该是考虑有参数  还是 没有参数 ? 有参数的!
	 * 考虑有1个参数还是有N个参数?  有N个参数的!
	 * 
	 * 用户需要传递一个执行的sql语句
	 * 		再擦混地一个参数列表
	 * @throws SQLException 
	 * @throws ClassNotFoundException 
	 */
	public static int myExcuteUpdate(String sql,Object...param) throws ClassNotFoundException, SQLException {
		int rowNum = 0;
		if (getConnection()) {//证明有连接
			ps=conn.prepareStatement(sql);
			//给sql语句中的 ? 一个一个赋值
			for (int i= 0;  i< param.length; i++) {
				ps.setObject(i+1, param[i]);
			}
			rowNum = ps.executeUpdate();
		}
		closeConnection();//释放资源
		return rowNum;
		
	}
	/**
	 * 公共的查询
	 * @throws SQLException 
	 * @throws ClassNotFoundException 
	 */
	public static ResultSet myExcuteQuery(String sql,Object...param) 
			throws ClassNotFoundException, SQLException {
		if (getConnection()) {//证明有连接
			ps=conn.prepareStatement(sql);
			for (int i = 0; i < param.length; i++) {
				ps.setObject(i+1, param[i]);
			}
			rs=ps.executeQuery();
		}
		/**
		 * 在这里不能实现关闭资源,因为子类中有rs的具体使用  还需要用到连接
		 * 子类使用完毕,自行了断!
		 */
		return rs;
		
	}
	
	
	
}

创建一个和src一样的文件夹,然后在文件夹里创建jdbc.properties 后缀的文件,存储jdbc连接数据库的四大要素
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/jdbc
jdbc.userName=meng
jdbc.passWord=3588105


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值