JDBC管理数据库体系结构
~~JDBC管理结构~~
JDBC
JDBC(Java DataBase Connectivity)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。
JDBC API定义了一系列操作数据库的接口和具体类,接口由具体的数据库公司来实现.
SQL
SQL是统一的数据库操作规范
java通过JDBC这些接口的实现类和具体类根据SQL语法操作数据库.
JDBC API继承体系
JDBC API声明的接口和具体类放在Java sql模块下,Java sql模块提供了两个包,java sql和javax sql, javax sql包是对java sql包的补充. Javax sql包提供了数据库连接池的接口.
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类中
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资源
有两个优良的连接池实现类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接口, 命名方式可以顾名思义**
<拓展>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)方法