JDBC管理数据库体系结构

JDBC管理数据库体系结构

JDBC管理数据库体系结构_第1张图片

																							~~JDBC管理结构~~ 
  • JDBC
    JDBC(Java DataBase Connectivity)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。
    JDBC API定义了一系列操作数据库的接口和具体类,接口由具体的数据库公司来实现.

  • SQL
    SQL是统一的数据库操作规范

java通过JDBC这些接口的实现类和具体类根据SQL语法操作数据库.

JDBC管理数据库体系结构_第2张图片
JDBC API继承体系
JDBC API声明的接口和具体类放在Java sql模块下,Java sql模块提供了两个包,java sql和javax sql, javax sql包是对java sql包的补充. Javax sql包提供了数据库连接池的接口.

  • java操作数据库步骤

1.导包
mysql的驱动jar包为:mysql-connector-java-5.1.37-bin.jar
2.注册驱动
@:DreverManage类中静态方法registerDriver​(Driver driver)
@;mysql可用反射方式注册class.forName(“com.mysql.jdbc.Driver”);mysql包Driver类中有一段静态代码块调用DreverManage类注册方法,反射加载Driver类进内存就完成自动注册.
@:mysql5后不需要注册,在调用mysql方法会自动注册,代码在META-INF/services/java.sql.Drever类中
JDBC管理数据库体系结构_第3张图片

3.获取Connection对象
	获取连接的方法getConnection()在DriverManage类下
4.创建Statement对象
	创建方法createStatement()在Connection类下
5.执行sql语句
@:execute​()
@:executeQuery​()
@:executeUpdate​()
6.释放资源
@:.close()方法

@:Statement存在sql注入风险,于是mysql增加了PreparedStatement类,PreparedStatement extends Statement, 获取preparedStatement​(String sql)方法也在Connection类中
@:PreparedStatement对象预编译sql语句, PreparedStatement类setXxx()对’?'赋值
@:如果执行的是查询语句,则返回的是ResultSet集合,操作完成也需要释放ResultSet资源

  • 在获取连接,执行语句,释放资源过程中,每个执行对象循环操作对资源浪费大,于是java在Javax sql包提供了数据库连接池接口,执行完sql语句不释放资源,而是归还连接池

有两个优良的连接池实现类C3P0和Driud(阿里实现)
@:C3P0
C3P0依赖两个jar包:c3p0-0.9.5.2.jar和 mchange-commons-java-0.2.12.jar
配置文件:c3p0.properties 或者 c3p0-config.xml放在src下
连接池对象:DataSource datasource=new ComboPooledDataSource()
获取连接对象:datasource.getConnection()
@:Driud
Driud依赖一个jar包:druid-1.0.9.jar
配置文件:druid.properties, 放在任意路径, 因此使用时需要给Driud先加载出来
连接池对象:DataSource datasource = DruidDataSourceFactory.createDataSource(pro);
获取连接对象:datasource.getConnection()

**C3P0通过创建对象获取连接池, 而Driud通过静态方法createDatasource(), 两者命名都包含Datasource,因为都继承自Datasource接口, 命名方式可以顾名思义**
  • 在写代码时,代码重复量还是很大,因此Spring框架提供了一个模板:JdbcTemplate类
  • JdbcTemplate的jar包有五个:
    commons-logging-1.2.jar
    spring-beans-5.0.0.RELEASE.jar
    spring-core-5.0.0.RELEASE.jar
    spring-jdbc-5.0.0.RELEASE.jar
    spring-tx-5.0.0.RELEASE.jar
    JdbcTemplate使用JdbcTemplate对象执行sql语句,创建方法:JdbcTemplate jdbcTemplate=new JdbcTemplate(Datasource datasource); JdbcTemplate从数据库连接池中获取连接,查询使用preparedStatement执行,因此需要对’?'赋值,在调用执行方法时赋值,如:jdbcTemplate.update(sql,值1,值2…);
  • JdbcTemplate类中常用方法
    @:update()[DML]
    @:query(sql,new RowMap)[DQL]—返回javaBean对象, RowMap是一个接口,需要重写,JdbcTemplate也提供了一个具体类:BeanPropertyRowMapper
    @:queryForMap()[DQL]—只能查询一条记录,结果不止一条则报错
    @:query for List()[DQL]—弥补了queryForMap(),将多个map结果集再封装为List集合
    @:queryForObject(sql,Object.class)[DQL]—将查询结果封装为Object对象,一般查询聚合函数,调用查询方法时指定参数Object泛型E, 在这里不过是通过Object.class方式指定

<拓展>JavaBean: 是一种JAVA语言写成的可重用组件。为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器。JavaBean 通过提供符合一致性设计模式的公共方法将内部域暴露成员属性,set和get方法获取。众所周知,属性名称符合这种模式,其他Java 类可以通过自省机制(反射机制)发现和操作这些JavaBean 的属性。任何可以用Java代码创造的对象都可以利用JavaBean进行封装。

ps:个人觉得query(sql,new RowMap)是对queryForObject(sql,E)的JavaBean封装,queryForObject(sql,E)的E泛型类成员变量只有一个时是查询聚合函数,E泛型类成员变量多个时(和数据库对应上)查询的是一条记录, 查询记录有多条时打包成集合返回,不过这里封装成JavaBean对象, 便形成了query(sql,new RowMap)方法

你可能感兴趣的:(JDBC管理数据库体系结构)