JDBC
复习操作:1、JDBC的增删改查(用preparestatement)2、转账案例实现事务管理。3、封装 Druid的工具类。4、实现JdbcTemplate的CRUD和所有方法。
JDBC:
JDBC: Java Database Connectivity - Java数据库连接,用Java操作数据库。
JDBC本质:其实是官方定义的一套操作所有关系型数据库的规则,即接口。由各个数据库厂商实现接口,提供数据库驱动jar包。
JDBC快速入门:
1、步骤:导入驱动jar包 -- 复制jar包到libs目录下,右键 -- add as library
注册驱动 -- 获取数据库连接对象Connection -- 定义sql -- 获取执行sql语句的对象 statement -- 执行sql 返回结果 ,处理结果 -- 释放资源
2、详解各个对象。
1、DriverManager:驱动管理对象
* :功能:1、注册驱动:告诉程序该使用哪一个数据驱动jar
static void registerDriver(Driver driver)- 注册DriverManager
写代码使用:Class.forName(mysql.jdbc.Driver)
原理:上面的方法存在于静态代码块中,加载类时就自动创建
注意:MySQL5之后的jar包可以省略该步骤。
2、 获取数据库连接:方法:static Connection getConnection(String url, String user ,String password)
参数:url:指定连接的路径 jdbc:mysql://ip:端口/数据库名
2、Connection:数据库连接对象
* : 功能:1、获取执行sql的对象: Statement createStatement()、PreparedStatement (String sql)
2、管理事务:开启事务:setAutoCommit(boolean autoCommit) 为false时开启
提交事务:commit()
回滚事务:rollback()
3、Statement:执行sql的对象
* :执行sql:1、int executeUpdate(String sql):执行insert、update、delete等语句。
返回受影响的行数,可以判断sql是否执行成功。
2、ResultSet executeQuery(String sql):执行select语句。
* :练习:增删改查语句。
4、ResultSet:结果集对象,封装查询结果。
* next():游标指向下一行(默认指向列名这行)
* getXXX():获取数据。XXX:int-代表列的编号。String-列名。
* 用法:指向下一行-判断是否有数据-获取数据 循环操作
5、PreparedStatement:执行sql的对象
* SQL注入问题:在拼接sql时,有一些sql的特殊关键字参加了字符串的拼接,会造成安 全问题。
* 解决sql注入:使用PreparedStatement 对象来解决。
* 预编译的sql : 参数使用?作为占位符。
* 步骤:修改上面的步骤。
1、定义sql时,参数用?代替:select * from user where id=?;
2、获取sql语句的对象改为:PreparedStatement -->Connection.prepareStatement (String sql)
3、给?赋值:方法:setxxx(参数1,参数2)参数1:?的位置 。 参数2:?的值。
JDBC控制事务:
使用Connection来操作:
开启事务:setAutoCommit(boolean autoCommit) 为false时开启 。执行sql前
提交事务:commit() 所有sql执行完
回滚事务:rollback() 放catch里。
数据库连接池。
1、概念:数据库连接池其实就是一个容器(集合),存放数据库连接的容器。
当系统初始化好后,容器被创建,容器中就会申请一些连接对象,当用户访问数据库时, 从容器中获取连接对象来和数据库交互,用户访问完后,将连接对象归还。
2、好处:1、节约资源。 2、用户访问效率高。
数据库连接池实现。
1、标准接口:DataSource javax.sql包下。
* 方法:获取连接:getConnection()
归还连接:Connection.close()。如果连接对象是从连接池中获取的,那么调用该 方法,不会关闭连接,而是归还连接。
2、连接池技术:
* C3P0 :
* Druid:阿里提供。
3、C3P0。
* 使用步骤:1、导包 c3p0-0.9.5.2.jar 和 mchange-commons-java-0.2.11.jar
2、定义配置文件:名称:c3p0.properties 或 c3p0-config.xml 路径:src下。
3、创建核心对象:数据库连接池对象 ComboPooledDataSource
4、获取连接:getConnection
4、Druid。
* 使用步骤:1、导包 druid-1.0.9.jar
2、定义配置文件:druid.properties
3、加载配置文件:
3、获取数据库连接池对象:通过工厂来获取 DruidDataSourceFactory
4、获取连接:getConnection
public static void main(String[] args) throws Exception {
Properties pro=new Properties();
InputStream is= druid.class.getClassLoader().getResourceAsStream("druid.properties");
pro.load(is);
DataSource ds= DruidDataSourceFactory.createDataSource(pro);
Connection connection=ds.getConnection();
System.out.println(connection);
}
}
Spring JDBC:
Spring JDBC: Spring框架对JDBC的简单封装。提供了一个JDBCTemplate对象简化JDBC的开发
使用步骤:1、导包
2、创建JdbcTemplate对象。它依赖于DataSource- new JdbcTemplate(ds)。
3、调用JdbcTemplate的方法来CRUD:
* update():执行DML语句。
* queryForMap(): 查询结果封装为map集合。【只能查询一条记录】
* queryForList(): 查询结果封装为list集合。【装的是多个Map的集合】
* query():查询结果封装为JavaBean对象。
query(sql, new BeanPropertyRowMapper<account>(account.class))
* queryForObject:查询结果封装为对象。
查询总记录数:Long count = template.queryForObject(sql, Long.class);