【基础系列二十】--JDBC

JDBC

JDBC(Java Databases Connectity)数据库连接。通俗点讲是Java语言中用于连接数据库的标准API。
只要和数据库打交道的地方都有JDBC的影子。

JDBC有什么特点:

优势:
	1.简单易学,安全。
	2.可移植性强。
劣势:
	需要手动管理JDBC的连接以连接资源的释放。
	需要编写大量的SQL代码量大。

JDBC结构

JDBC仅是一套标注接口,不同的厂商有不同的实现。

在这里插入图片描述

JDBC主要接口

在这里插入图片描述

JDBC开发步骤

在这里插入图片描述

JDBC开发详解

  1. 注册驱动
有两种注册驱动的方式:
	使用:DriverManager.registerDriver(new Driver())
		该注册数据库有两个缺点:通过观察mysql的中Driver接口的实现类发现在静态代码块中注册驱动的逻辑,所以这种方式会造成驱动被注册两次。另外,这种方式导致了程序和具体的数据库驱动绑死在了一起,程序的灵活性比较低。
	使用:Class.forName(“com.mysql.jdbc.Driver”);
		利用反射的方式注册数据库驱动。
  1. 获取数据连接
/**
*URL用于标识数据库的位置,程序员通过URL地址告诉JDBC程序连接哪个数	据库,我们通常是在一个属性文件内配置数据库的相关信息;
常用数据库URL地址的写法:
	Oracle写法:jdbc:oracle:thin:@localhost:1521:sid
	SqlServer写法:jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=sid
	MySql:jdbc:mysql://localhost:3306/sid
	Mysql的url地址的简写形式: jdbc:mysql:///sid

Connection :代表数据库的链接,Connection是数据库编程中最重要的一个对象,客户端与数据库所有交互都是通过connection对象完成的,这个对象的常用方法:
	createStatement():创建向数据库发送sql的statement对象。
	prepareStatement(sql):创建向数据库发送预编译sql的PreparedSatement对象。
	prepareCall(sql):创建执行存储过程的callableStatement对象。 
	setAutoCommit(boolean autoCommit):设置事务是否自动提交。 
	commit():在链接上提交事务。
	rollback():在此链接上回滚事务。

*/
Connection conn = DriverManager.getConnection(url,name,psw)

  1. 创建SQL语句
/**
	Statement对象用于向数据库发送SQL语句,Statement对象常用方法:
	executeQuery(String sql) :用于向数据库发送查询语句。
	executeUpdate(String sql):用于向数据库发送insert、update或delete语句
	execute(String sql):用于向数据库发送任意sql语句
	addBatch(String sql):把多条sql语句放到一个批处理中。
	executeBatch():向数据库发送一批sql语句执行。	
*/
	Statement stm = conn.createStattement();
  1. 执行SQL语句
	stm.executeUpdate("insert into person(id,name,age) values(520,'X-MAN',18)")
  1. 处理结果
	/**
		利用ResultSet:处理数据结果
			ResultSet用于代表Sql语句的执行结果。
			Resultset封装执行结果时,采用的类似于表格的方式。
			ResultSet 对象维护了一个指向表格数据行的游标,初始的时候,游标在第一行之前,调用ResultSet.next() 方法,可以使游标指向具体的数据行,进行调用方法获取该行的数据。
			相关方法:
				获取任意类型的数据
				getObject(int index)
				getObject(string columnName)
				获取指定类型的数据,例如:
				getString(int index)
				getString(String columnName)
				getInt(columnIndex)
				getInt(columnLabel)
				getDouble(columnIndex)
				getDouble(columnLabel)
			操作游标的方法
				next():移动到下一行
				Previous():移动到前一行
				absolute(int row):移动到指定行
				beforeFirst():移动resultSet的最前面。
				afterLast() :移动到resultSet的最后面。
	*/
  1. 与数据库建断开连接,释放资源

JDBC中的事物

  1. 事物是具有ACID的特性的工作单元。
    A:原子性–保证对数据库的操作要么全部成功,要么全部失败。
    C:一致性–指事物执行之前、之后,数据库的状态都必须处于一致的状态。
    I:隔离性–即一个事物对数据的操作,不能被其他事物看到。
    D:持久性–即事物一旦提交,它对数据库中数据的改变是永久的。

  2. JDBC事物处理三部曲
    在这里插入图片描述

  3. 事务的隔离级别
    在这里插入图片描述

Statement 和 PreparedStatement

两者都可以用来操作数据库,与Statement 相比,PreparedStatement有以下优点:

 1.可以防止sql注入攻击
 	通过PreparedStatement对象发送sql, 是先把sql语句的骨架发送给数据库编译并确定下来, 后面发送的只能是参数的值, 不能影响sql语句的骨架, 即使参数中包含sql关键字或特殊符号, 也只会当成普通的文本来处理!
 2.通过方法来设置参数, 省去了拼接SQL语句的麻烦!
 3.可以提高程序的效率:
 	PreparedStatement对象发送的sql语句(骨架)到数据库编译后会被数据缓存下来, 如果下次执行的sql与缓存中的相匹配, 就不再编译而是直接使用缓存中的语句, 可以减少sql语句编译的次数, 提高程序执行的效率!

	Statement对象发送的sql语句到数据库之后也会编译, 但是Statement对象是先拼接好再发送sql到数据库, 如果每次参数不同, 整条sql也就不同. 所以每次都需要编译!

下一篇:【基础系列二十】–事务

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值