JDBC总结

1.数据持久化

​ 持久化(persistence):把数据保存到可掉电式存储设备中以供之后使用。

2.JDBC

​ JDBC(Java Database Connectivity)是一个独立于特定数据库管理系统、通用的SQL数据库存取和操作的公共接口(一组API)

​ 简单理解就是:JDBC是SUN公司提供的一套API,利用这套API可以实现对具体数据库的操作(获取连接、关闭连接、DML、DDL、DCL)

3.JDBC图示理解

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kQTWdhK0-1584869990625)(C:\Users\lee\AppData\Roaming\Typora\typora-user-images\1576591061729.png)]

​ 好处:面向应用的API:Java API,抽象接口。供应用程序开发人员使用(连接数据库,执行sql语句,获得结果)。

​ 面向数据库的API:Java Driver API,供开发商开发数据库驱动程序用。

​ --> 编程的角度:不需要关注数据库的底层细节。

​ --> 数据库厂商:只需要提供标准的具体实现

4.数据库的驱动

​ 数据库厂商针对JDBC这套接口,提供的具体实现类的集合。

​ 类似于:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tRejI1Vt-1584869990628)(C:\Users\lee\AppData\Roaming\Typora\typora-user-images\1576591601956.png)]

5.面向接口编程思想

​ JDBC是SUN 公司提供一套用于数据库操作的接口,Java程序员只需要面向接口编程即可。

​ 不同的数据库厂商,需要针对这套接口,提供不同实现。不同实现的集合,即为不同数据库的驱动。

	@Test
public  void testConnection5() throws Exception {
	//1.加载配置文件
    InputStream is = ConnectionTest.class.getClassLoader().getResourceAsStream("jdbc.properties");
    Properties pros = new Properties();
    pros.load(is);
    
    //2.读取配置信息
    String user = pros.getProperty("user");
    String password = pros.getProperty("password");
    String url = pros.getProperty("url");
    String driverClass = pros.getProperty("driverClass");

    //3.加载驱动
    Class.forName(driverClass);

    //4.获取连接
    Connection conn = DriverManager.getConnection(url,user,password);
    System.out.println(conn);
}

其中,配置文件声明在工程的src目录下:【jdbc.properties】

user=root
password=abc123
url=jdbc:mysql://localhost:3306/test
driverClass=com.mysql.jdbc.Driver

6.增删 改查操作

使用Statement操作数据表的弊端:

​ 问题一:存在拼串操作,繁琐

​ 问题二:存在SQL注入问题

Preparedstatement的理解:

​ 预编译SQL Statement。可以解决SQL注入以及拼串问题。

两种思想

​ 面向接口编程思想,ORM编程思想。

两种技术

​ 1.使用结果集的元数据:ResultSetMetaData

​ getColumnCount():获取列数

​ getColumnLabel():获取列的别名。(如果sql中没有给字段起别名,getColumnLabel()获取的就是列名)

​ 2.反射的使用(1.创建对应的运行时类的对象 2.运行时,动态的调用指定的运行时类的属性、方法)。

图示

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dyc5GgwA-1584869990634)(C:\Users\lee\AppData\Roaming\Typora\typora-user-images\1576593675552.png)]

Preparedstatement与Statement之间的异同

  1. 指出二者间的关系:Preparedstatement是Statement子接口。在开发中Preparedstatement替换Statement

  2. Preparedstatement能够最大可能提高性能

    ​ DBServer会对预编译语句提供性能优化。因为预编译语句有可能被重复 调用,所以语句在被DBServer的编译器编译后的执行代码缓存下来,下次再进行调用时,只要是相同的编译语句就不需要编译。

  3. Preparedstatement(具有语法检查,语义检查,翻译成二进制命令,缓存)

  4. Preparedstatement可以防止SQL注入。

7.数据库事务:

​ -.事物

​ 一组逻辑操作状态,使数据从一种状态变换到另外一种状态。

​ --.事物处理原则

​ 数据一旦提交,就不可回滚。

四大属性:

​ ACID

  1. 原子性(Atomicity)

    原子性是指事物是一个不可分割的工作单位,事物中的操作要么都发生,要么都不发生。

  2. 一致性(Consistency)

    事物必须使数据库从一个一致性状态变换到另外一个一致性状态。

  3. 隔离性(Isolation)

    事物的隔离性是指一个事物的执行不能被其他事物干扰,即一个事物内部的操作及使用的数据对并发的其他事物是隔离的,并发执行的各个事务间不能相互干扰。

  4. 持久性(Durability)

    持久性指的是一个事务一旦被提交,它对数据库中数据的改变就是永久的,其他操作都不会对其造成影响。

数据库并发问题:

​ 脏读

​ 不可重复度

​ 幻读

数据库的四种隔离级别(一致性和并发性,相互矛盾)

设置数据库系统的全局的隔离级别:

考虑到事物以后的数据库操作:

​ 1.获取数据库连接

​ Connection conn=JDBCUtils.getConnection(); //方式1:手动获取连接 方式2:数据库连接池

​ conn.setAutoCommit(false); //体现事务

​ 2.如下的DML操作,作为一个事物出现

​ 操作1:使用通用的增删改操作 //通用的增删改查操作如何实现

​ 操作2:使用通用的增删改操作 //方式1:手动使用PreparedStatement实现

​ 操作3:使用通用的增删改操作 //方式2:使用dbutils.jar中的QueryRunner类

​ conn.commit()

​ 3.如果出现异常,则

​ conn.rollback()

​ 4.关闭资源

​ JDBCUtils.closeResource(…,…,…) //方式1:手动关闭资源

​ //方式2:DbUtils类的关闭方法。

8.数据库连接池:

​ 数据库连接池优点:

​ 1.提高程序的响应速度(减少了创建连接响应的时间)

​ 2.降低资源消耗(提高可重用性)

​ 3.便于连接的管理

​ 4.实现的方式

​ DBCP、C3P0、Druid***。

​ 导入.jar文件

​ 配置文件

DbUtils类的关闭方法。

8.数据库连接池:

​ 数据库连接池优点:

​ 1.提高程序的响应速度(减少了创建连接响应的时间)

​ 2.降低资源消耗(提高可重用性)

​ 3.便于连接的管理

​ 4.实现的方式

​ DBCP、C3P0、Druid***。

​ 导入.jar文件

​ 配置文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值