JDBC快速掌握

##JDBC:
1.概念:java database connectivity java数据库连接,java语言操作数据库
*JDBC本质:其实是官方(sun公司)定义的一套操作所有关系型数据库的规则,即接口。
各个数据厂商去实现这套接口,提供数据库驱动jar包。
我们可以使用这套接口编程,真正执行的代码是驱动jar包中的实现类
2.快速入门:
*步骤:1.导入驱动jar包
1.复制mysql-connector-java-5.1.37-bin.jar到项目的libs目录下
2.右键–>add as library
2.注册驱动
3.获取数据库连接对象connection
4.定义SQL
5.获取执行SQL语句的对象 statement
6.执行SQL,接受返回结果
7.处理结果
8.释放资源
*代码实现:
//1. 导入驱动jar包
//2.注册驱动
Class.forName(“com.mysql.jdbc.Driver”);
//3.获取数据库连接对象
Connection conn = DriverManager.getConnection(“jdbc:mysql://localhost:3306/db3?serverTimezone=UTC”, “root”, “root”);
//4.定义sql语句
String sql = “update account set balance = 500 where id = 1”;
//5.获取执行sql的对象 Statement
Statement stmt = conn.createStatement();
//6.执行sql
int count = stmt.executeUpdate(sql);
//7.处理结果
System.out.println(count);
//8.释放资源
stmt.close();
conn.close();
*详解各个对象:
1.DriverManager:驱动管理对象
*功能:1.注册驱动:告诉
static void registerDriver(Driver driver):注册给定的驱动程序DriverManager
写代码使用:Class.forName(“com.mysql.jdbc.Driver”)
2.获取数据库连接
方法:static Connection getConnection(String url,String user,String password)
参数:
*url:指定连接的路径
*语法:jdbc:mysql://ip地址(域名):端口号/数据库名称
简写:jdbc:mysql:///数据库名称
*user:用户名
*passworld:密码
2.Connection:数据库连接对象
1.功能:
1.获取执行SQL的对象
*Statement createStatement()
*PreparedStatement prepareStatement(String sql)
2.管理事务:
*开启事务:void setAutoCommit(boolean autoCommit):调用该方法设置参数为false,即开启事务
*提交事务:commit()
*回滚事务:rollback()
3.Statement:执行SQL的对象
1.执行sql
1.Boolean execute(String sql):可以执行任意的sql
2.int executeUpdate(String sql):执行给定的sql语句DML,DDL.语句
*返回值:影响的行数,可以通过这个影响的行数判断DML语句是否执行成功
3.ResultSet executeQuery(String sql):执行DQL(select)语句
4.ResultSet:结果集对象,封装查询结果
*boolean next():游标向下移动一行,判断当前行是否是最后一行,如果是,返回false,不是,返回true
*next():游标向下移动一行
*getXxx(参数):获取数据,Xxx代表数据类型,如getInt(),getString()
参数:int:代表列的编号,从1开始。getInt(1)
String:代表列的名称。getString(Name)
*注意:
*使用步骤:1.游标向下移动一行
2.判断是否有时间
3.获取数据
*代码:while(rs.next()){
int id = rs.getInt(1);
String name = rs.getString(“name”);
int age = rs.getInt(1);
}
5.PreparedStatement:执行SQL的对象,Statement子对象
1.sql注入问题:在拼接SQL时,有一些SQL的特殊关键字参与字符串的拼接,会造成安全问题
1.输入用户名随便,输入密码:a’or’a’='a
2.sql:select * from user where username = ‘fhdsjkf’ and password = ‘a’ or ‘a’ = ‘a’
2.解决SQL注入问题:使用preparedStatment
3.预编译的SQL:参数使用?作为占用符
4.步骤:
1.导入驱动jar包
1.复制mysql-connector-java-5.1.37-bin.jar到项目的libs目录下
2.右键–>add as library
2.注册驱动
3.获取数据库连接对象connection
4.定义SQL
*注意:SQL的参数使用?作为占用符。如:select * from user where username =? and password = ?;
5.获取执行SQL语句的对象 PreparedStatement Connection.preparedStatement(String sql)
6.给?赋值:
*方法:setXxx(参数1,参数2)
7.执行SQL,接受返回结果,不需要传递SQL语句
8.处理结果
9.释放资源
##抽取JDBC工具类:JDBCUtils
*目的:简化书写
*分析:
1.注册驱动也抽取
2.抽取一个方法获取连接对象
*需求:不想传递参数,还得保证工具类的通用性
*解决:配置文件
jdbc.properties
url=
user=
passworld=
3.抽取一个方法释放资源
##JDBC控制事务:
1.事务:一个包含多个步骤的业务操作,如果这个业务操作被事务管理,则这多个步骤要么同时成功,要么同时失败
2.操作:
1.开启事务:在执行SQL之前开启事务
2.提交事务:当所有SQL执行完提交事务
3.回滚事务:在catch中回滚事务
3.使用Connection对象来管理事务
*开启事务:setAutoCommit(boolean autoCommit):调用该方法设置参数为false,级开启事务
*提交事务:commit()
*回滚事务:rollback()

##数据库连接池
1.概念:就是一个容器(集合),存放数据库连接的容器。
当系统初始化好后,容器被创建,容器中会申请一些连接对象,当用户来访问数据库时,从容器
中获取连接对象,用户访问完后,会将连接对象归还给容器
2.好处:1.节约资源
2.用户访问高效
3.实现:
1.标准的接口:DateSourse java.sql包下的
1.方法:
*获取连接:getConnection()
*归还连接:如果连接对象connection是从连接池中获取的,那么调用connection.close()归还连接
2.一般我们不去实现它,有数据库厂商来实现
1.C3P0:数据库连接池技术
2.Druit:数据库连接池实现技术,由阿里巴巴提供的
4.C3P0:数据库连接池技术
1.步骤:导入jar包(两个)–> 定义配置文件–> 创建核心对象 数据库连接池对象 --> 获取连接
5.Druid:数据库连接池实现技术,阿里提供
*步骤:
1.导入jar包 druid-1.0.9.jar
2.定义配置文件:
*是properties形式的
*可以叫任意名称,可以放在任意目录下
3.加在配置文件:
4.获取数据库连接池对象:通过一个工厂类来获取 DruidDateSourceFactory
5.获取连接:getConnection
*定义Druid工具类
1.定义一个类:JDBCUtils
2.提供静态代码块加载配置文件,初始化连接池对象
3.提供方法:
1.获取连接方法:通过数据库连接池获取连接
2.释放资源
3.获取连接池的方法
##Spring JDBC
*Spring框架对JDBC的简单封装。提供了一个JDBCTemplate对象简化JDBC的开发
*步骤:
1.导入jar包
2.创建jdbcTemplate对象。依赖于数据源DateSource
*JdbcTemplate template = new JdbcTemplate(ds)
3.调用jdbcTemplate方法来完成CRUD的操作
update():执行DML语句。增删改语句
queryForMap():查询结果将结果封装为map集合,将列名作为key,将值作为value封装为map
注意:这个方法查询的结果集长度只能是1
queryForList():查询结果将结果封装为list集合
注意:将每一条记录封装为map集合,再将map集合装载到list集合
query():查询结果将结果封装为Javabean对象
*query的参数:RowMapper
*一般我们使用BeanPropertyRowMapper实现类,可以完成数据到javabean的自动封装
*new BeanPropertyRpwMapper<类型>(类型.class)
queryForObject():查询结果将结果封装为对象
*一般用于聚合函数的查询

你可能感兴趣的:(数据库,mysql,java,spring,jdbc)