JDBC三种封装思想
JDBC对后台来说是一个非常重要的东西,而且使用是很频繁的,对JDBC的熟练掌握是非常重要的。在此小编为大家分享三种JDBC的思想。分别是源码解析、basedao封装和文件流封装。在讲解JDBC三种思想之前要给数据库导入JDBC的包,此处我使用的是**mysql-connector-java-5.1.45-bin.jar**。网盘链接为:https://pan.baidu.com/s/1Dd4NWrjyBdHWOBWxU0La3w,密码:ot2j
JDBC源码解析
对数据库的操作最基本的就是增删改查,所以对JDBC源码解析也有增删改查四种。源码解析分为7个步骤,分别是:
- 加载数据库驱动
- 创建数据库连接
- 准备SQL语句
- 处理SQL语句
- 产生结果
- 处理结果
- 释放资源
增加源码
public static void addUser(){
try {
//(1)加载数据库驱动
Class.forName("com.mysql.jdbc.Driver");
//(2)创建数据库连接
Connection conn= DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/db_sjpssm?useSSL=true&characterEncoding=utf8","root","sjp691157");
//db_sjpssm是数据框名字,root是数据库用户名,sjp691157是数据库密码
System.out.println("数据库连接成功!");
//(3)准备SQL语句
String sql="insert into tb_user values(null,?,?,?)"; //?代表占位符,占空座位,目的是放数据
System.out.println("请输入用户名称:");
String username=in.next();
System.out.println("请输入用户密码:");
String password=in.next();
System.out.println("请输入用户类型:");
int tid=in.nextInt();
//(4)处理SQL语句
PreparedStatement pstm=conn.prepareStatement(sql);
pstm.setString(1,username);
pstm.setString(2,password);
pstm.setString(3, String.valueOf(tid));
//(5)产生结果
int num=pstm.executeUpdate();
//(6)处理结果
System.out.println("新增成功<"+num+">行受到影响");
//(7)释放资源
pstm.close();
conn.close();
}catch (Exception e){
e.printStackTrace();
}
}
删除源码
public static void DelUser(){
try {
//1.加载数据库驱动
Class.forName("com.mysql.jdbc.Driver");
//2.创建数据库连接
Connection conn=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/db_sjpssm?useSSL=true&characterEncoding=utf8","root","sjp691157");
//db_sjpssm是数据框名字,root是数据库用户名,sjp691157是数据库密码
System.out.println("数据库连接成功!");
//3.准备写出数据库语句
System.out.println("请输入要删除用户的名称:");
String name=in.next();
String sql="delete from tb_user where username='"+name+"'";
//4.处理SQL语句
PreparedStatement pstm=conn.prepareStatement(sql);
//5.产生结果
int num=pstm.executeUpdate();
//6.处理结果
System.out.println("删除成功<"+num+">行受到影响");
//7.释放资源
pstm.close();
conn.close();
}catch (Exception e){
e.printStackTrace();
}
}
修改源码
public static void ModUser(){
try {
//1.加载数据库驱动
Class.forName("com.mysql.jdbc.Driver");
//2.创建数据库连接
Connection conn=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/db_sjpssm?useSSL=true&characterEncoding=utf8", "root","sjp691157");
//db_sjpssm是数据框名字,root是数据库用户名,sjp691157是数据库密码
System.out.println("数据库连接成功!");
//3.准备SQL语句
System.out.println("请输入要修改用户名称:");
String name=in.next();
System.out.println("请输入更新后的密码:");
String password=in.next();
System.out.println("请输入更新后的类型");
int tid=in.nextInt();
String sql="update tb_user set password='"+password+"',tid='"+tid+"' where username='"+name+"'";
//4.处理SQL语句
PreparedStatement pstm=conn.prepareStatement(sql);
//5.产生结果
int num=pstm.executeUpdate();
//6.处理结果
System.out.println("更新成功<"+num+">行受到影响");
//7.释放资源
pstm.close();
conn.close();
}catch (Exception e){
e.printStackTrace();
}
}
查询源码
public static void printAllUser(){
try {
//(1)加载数据库驱动
Class.forName("com.mysql.jdbc.Driver");
//(2)创建数据库连接
Connection conn= DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/db_sjpssm?useSSL=true&characterEncoding=utf8","root","sjp691157");
//db_sjpssm是数据框名字,root是数据库用户名,sjp691157是数据库密码
System.out.println("数据库连接成功!");
//(3)准备写出SQL语句
String sql="select * from tb_user";
//(4)数据库选中语句并执行他
PreparedStatement pstm=conn.prepareStatement(sql);
//(5)产生结果
ResultSet rs=pstm.executeQuery();
//(6)处理结果
while (rs.next()){
System.out.println("用户编号:"+rs.getInt(1)+",用户名称:"+
rs.getString(2)+",用户密码:"+rs.getString(3)+",用户类型:"+rs.getString(4));
}
//(7)释放连接
rs.close();
pstm.close();
conn.close();
}catch (Exception e){
e.printStackTrace();
}finally {
}
}
basedao封装
刚刚给大家分享了JDBC源码解析,每一次使用数据库的时候都需要连接一次数据库,每一次都要写个三四十行代码,是不是很繁琐。在小编认为不会偷懒的程序员不是一个好程序员,所以这里在分享一种JDBC的连接方法,就是对源码解析进行封装,每一次使用的时候只要对它引用就好了。
public class DBUtil {
public Connection conn = null;
public PreparedStatement pstm = null;
public ResultSet rs = null;
}
// 1. 实现数据库连接的获取
public Connection getConn(){
try {
Class.forName("com.mysql.jdbc.Driver");
conn= DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/db_sjpssm?useSSL=true&characterEncoding=utf8","root","sjp691157");
} catch (Exception e) {
e.printStackTrace();
}
return conn;
}
// 2. 实现增删改的BaseDao封装
public int executeUpdate(String sql,Object[] params){ // Object[] 占位?不知道是什么数据类型,所有用了泛型处理
int num = 0;
try {
pstm = conn.prepareStatement(sql);
// 怎么处理占位符?
if(params!=null){
for(int i=0;i<params.length;i++){
pstm.setObject((i+1),params[i]);
}
}
num = pstm.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}
return num;
}
// 3. 实现查询的BaseDao封装
public ResultSet executeQuery(String sql,Object[] params){
ResultSet rs = null;
try {
pstm = conn.prepareStatement(sql);
// 怎么处理占位符?
if(params!=null){
for(int i=0;i<params.length;i++){
pstm.setObject((i+1),params[i]);
}
}
rs = pstm.executeQuery();
} catch (Exception e) {
e.printStackTrace();
}
return rs;
}
// 4. 实现数据库资源释放
public void closeResource(ResultSet rs, PreparedStatement pstm,Connection conn){
if(rs!=null){
try {
rs.close();
} catch (Exception e) {
e.printStackTrace();
}
}
if(pstm!=null){
try {
pstm.close();
} catch (Exception e) {
e.printStackTrace();
}
}
if(conn!=null){
try {
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
文件流封装
basedao的方法给我们节省很多精力和代码,但是basedao方法还不是最好的方法。当项目交付给客户时,他需要连接到自己的数据库,则他要怎么修改呢?给他java文件不一定看得懂,所以产生了一种文件流封装思想。
首先先编写一个数据库连接信息文件,把用户名和密码等都写在db.properties中,需要修改时只要打开这个文件即可。
driver = com.mysql.jdbc.Driver
url = jdbc:mysql://127.0.0.1:3306/db_java1ssm?useSSL=true&characterEncoding=utf8
jdbcuser = root
pwd = 123456
接着把这个文件引用到java文件中即可。
public class DBUtil {
// 解决维护性功能 properties
private static String driver ;
private static String url ;
private static String jdbcuser ;
private static String pwd ;
public static Properties properties = new Properties();
// 获取db.properties资源 , static方法代表软件一打开就会自动加载资源文件
static {
try {
properties.load(DBUtil.class.getClassLoader().getResourceAsStream("db.properties"));
driver = properties.getProperty("driver");
url = properties.getProperty("url");
jdbcuser = properties.getProperty("jdbcuser");
pwd = properties.getProperty("pwd");
} catch (IOException e) {
e.printStackTrace();
}
}
}