JDBC知识总结

JDBC

各种数据库驱动都由各自的厂商实现,我们只要去操作jdbc层的接口即可
需要的jar驱动包:mysql-connection-java-xxx.jar xxx:版本号
maven仓库可下

一个jdbc程序

1、创建好数据库和表
2、项目创建一个directory-》lib目录,把驱动包导入,右键Add as library,把包添加进库里面不然不生效的
3、创建一个类

4、首先加载驱动

Class.forname("com.mysql.jdbc.Driver");//会有异常抛出即可

5.用户信息和URL(?后面设置支持中文编码,字符编码,安全连接,不然问题多)

String url="jdbc:mysql://localhost:3306/数据库名字?useUnicode=true&characterEncoding=utf8 &&useSSL=true";
String name="root";
String password="root";

6.获取连接,得到数据库连接对象

Connection con=DriverManager.getConnection(url,name,password);

7、获取执行sql语句的对象

Statement sta=con.createStatement();

8、写一个sql来执行,返回结果集

String sql="select * from user";
//所有的修改、删除和插入都叫更新用excuteUpdate,查询用excuteQuery
ResultSet rs=sta.excuteQuery(sql);

9.取出的数据打印下

whil(rs.next()){
System.out.println(rs.getObject(" xxx"));//xxx是数据库对应字段名
}

10、用完要释放连接(先开的后关,后开的先关)

rs.close();
sta.close();
con.close();

11、补充说明
数据库连接对象就是数据库对象,他可以做数据库的事,比如设置事务、事务提交、事务回滚等等。

执行sql的对象Statement、PrepareStatement

excuteUpdate返回的是一个操作的条数;excuteQuery返回结果集ResultSet,只有它有;excute是执行任何的sql,没有返回

结果集ResultSet有getXXX(String xx)方法用于得到数据库指定类型的值;

result.next();指针移动,里面还有很多把指针移动到最前,最后,指定位置的方法便于获取数据

释放资源必须做,不然占着资源

12、解耦
程序通常需要降低耦合度,所有用户信息和url单独放到配置文件里:src下的配置文件因为可以通过反射拿到,所以:
src目录下建立一个db.properties 的配置文件并写上以下内容:
在这里插入图片描述
13、工具类
由于获取哦数据库连接的代码重复,所有抽取为一个工具类

(1)静态代码块获取配置文件和加载驱动
在这里插入图片描述
(2) 写一个获取数据库连接对象方法

在这里插入图片描述
(3)释放资源的方法,可以自己再加一个重载的2个参数方法,不一定非得3个参数
在这里插入图片描述

14、sql注入问题(sql被攻击)
就是攻击者用特别的传入的数据和你的sql语句where等判断条件处,进行了拼接,导致整条语句用这种拼接也能实现操作

为了优化注入引入的PrepareStatement,而且效率更高,预编译

在这里插入图片描述
sql占位符-》预编译-》设置值-》执行

15、idea连接数据库

 记得导入驱动jar包
 右边database,没有点左下角的小电脑
 点击+号,进去设置值,schemas选择你要的数据库
 双击列表的表就可以查看,还可以修改,记得点击保存
 点击控制台就可以写sql语句了
 如果遇到连接不上的情况,版本号不对应,去idea配置里改

16、jdbc操作事务
(1) 关闭自动提交事务,这个操作相当于开启事务,java层面的

con.setAutoCommit(false);
 (2)sql代码
 (3)业务完毕,提交事务
con.commit();

(4)假如中间出了问题差错失败,在捕获异常里操作回滚事务

con.rollback();

(5)在finally代码块里释放资源即可

17、数据库连接池
前面的数据库连接释放,每次这样操作很浪费资源。用连接池优化:池化技术,准备预先的连接资源

最小连接数:常用连接数设置
最大连接数:服务器最大承载资源
等待超时:自己设置

编写连接池:只需要实现DataSource接口。开源的数据源:DBCP、c3p0、Druid。。使用这些连接池之后我们就不用再java代码中写连接释放的操作了

(1)DBCP的使用
所需要的jar包: commons-dbcp-xx.jar : xx版本号
commons-pool-xx.jar
需要一个配置文件dbcpconfig.properties,里面有urL和用户信息、连接设置,这个配置是自动读的,所以里面的写法必须严格:
在这里插入图片描述
在这里插入图片描述
之后可以编写一个工具类使用DBCP:
静态代码 读取配置文件
主要是通过工厂得到数据源
在这里插入图片描述
得到数据源之后编写一个方法获取连接:
在这里插入图片描述
释放资源代码不变;

(2)c3p0的使用
导入的jar包:c3p0-xxxx.jar
mchange-commons-java-xxxx.jar

同样需要一个c3p0的配置文件,但是c3p0是用xml文件配置:
默认的配置: 在这里插入图片描述
还有一个自己可以添加的配置,这个可以配置多个:

在这里插入图片描述

编写工具类:
静态代码块,xml文件自动匹配不用读,由于它底层还是继承自datasource,这里可以通过代码配置,也可以xml文件配置:

在这里插入图片描述
获取连接的方法不变,释放资源的方法也不变;

(3)Druid的使用
这个很火的
具体使用网上查

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值