JDBC
1.概念:Java Database Connectivity Java数据库连接,Java语言操作数据库
注意:JDBC本质:其实是sun公司定义的一套操作所有关系型数据库的规则,即接口。各个数据库厂商去实现这套接口,提供数据库驱动jar包。我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类。
2.快速入门:
步骤:
1)导入驱动jar包 mysql-connector-java-版本号-bin.jar
2)注册驱动
3)获取数据库连接对象Connetion
4)定义sql
5)获取执行sql语句的对象Statement
6)执行sql,接收返回结果
7)处理结果
8)释放资源
3.详解各个对象:
1.DriverManager:驱动管理对象
功能:
1)注册驱动:告诉程序该使用哪一个数据库驱动jar
2)获取数据库连接
方法:static Connection getConnection (String url,String user,String password)
参数:
url:指定连接的路径
语法:jdbc:mysql://ip地址:端口号/数据库名称
注:如果连接的是本机的mysql,并且mysql默认端口号是3306,则url可以简写为:jdbc:mysql:///数据库名称
user:用户名
password:密码
2.Connection:数据库连接对象
功能:
1)获取执行sql的对象
Statement createStatement()
PreparedStatement preparestatement (String sql)
2)管理事务
开启事务:setAutoCommit(boolean autocommit):调用该方法设置参数为false,即开启事务
提交事务:commit()
回滚事务:rollback()
3.Statement :执行sql对象
执行sql
①boolean execute(String sql):可以任意执行sql (了解)
②int executeUpdate(String sql):执行DML(insert、update、delete)语句、DDL(create、alter、drop)语句
返回值:影响的行数
③ResultSet executeQuery(String sql):执行DQL(select)语句
4.ResultSet:结果集对象,封装查询结果
boolean next():游标向下移动一行,判断当前行是否是最后一行末尾(是否有数据),如果是则返回false,如果不是则返回true。
getxxx:获取数据 (xxx代表数据类型)
1)int:代表的编号,从1开始 如:getString(1)
2)String :代表列名称 如:getDouble(“balance”)
5.PreparedStatement:执行sql的对象
1)sql注入问题:在拼接sql时,有一些sql的特殊关键字参与字符串的拼接,会造成安全性的问题
①输入用户随便,输入密码:a' or 'a'='a'
②sql:select * from user where username =''fhds' and password ='a' or 'a' ='a'
2)解决sql注入问题:使用PreparedStatement对象来解决
3)预编译的SQL:参数使用?作为占位符
4)步骤:
1)导入驱动jar包 mysql-connector-java-版本号-bin.jar
2)注册驱动
3)获取数据库连接对象Connetion
4)定义sql
注意:sql的参数使用?作为占位符。如:select * from user where username = ? and password = ?;
5)获取执行sql语句的对象PreparedStatement Connection.preparedStatement (String sql)
6)给?赋值:
方法setXxx(参数1,参数2)
参数1:?的位置编号 从1开始
参数2:?的值
7)执行sql,接收返回结果
8)处理结果
9)释放资源
抽取JDBC工具类:JDBCUtils(简写)
JDBC控制事务:
1.事务:一个包含多个步骤的业务操作。如果这个业务操作被事务管理,则这多个步骤要么同时成功,要么同时失败。
2.操作:
1)开启事务
2)提交事务
3)回滚事务
3.使用Connection对象来管理事务
1)开启事务:setAutoCommit(boolean autocommit):调用该方法设置参数false,即开启事务(在执行sql之前开启事务)
2)提交事务commit():当所有sql都执行完后再提交事务
3)回滚事务rollback():在catch中回滚事务
数据库连接池
1.概念:其实就是一个容器(集合),存放数据库连接的容器。
注:当系统初始化好后,容器被创建,容器中会申请一些连接对象,当用户来访问数据库时,从容器中获取连接对象,用户访问完之后,会将连接对象归还给容器。
2.好处:节约资源、用户访问高效
3.实现:
1)标准接口:DataSource javax.sql包下的
方法:
获取连接getConnection()
归还连接Connection.close()。如果连接对象Connection是从连接池中获取的,那么调用Connection.close()方法,则不会再关闭连接了。而是归还连接
2)一般我们不去实现它,由数据库厂商来实现
①C3P0:数据库连接池技术
②Druid:数据库连接池实现技术,由阿里巴巴提供
4.C3P0:数据库连接池技术
步骤:
1)导入jar包c3p0-版本号-jar mchange-commons-java-版本号-jar
2)定义配置文件:
名称:c3p0.properties 或者c3p0-config.xml
路径:直接将文件放在src目录下即可。
3)创建核心对象 数据库连接池对象 ComboPooledDataSource
4)获取连接:getConnection
5.Druid:数据库连接池实现技术,由阿里巴巴提供
①步骤:
1)导入jar包druid-版本号-jar
2)定义配置文件:
名称:properties形式的
路径:可以叫任意名字,可以放任意目录下
3)加载配置文件properties
4)获取数据库连接池对象:通过工厂来获取DruidDataSourceFactory
5)获取连接:getConnection
②定义工具类
1)定义一个类 JDBCUtills
2)提供静态代码块加载配置文件,初始化连接池对象
3)提供方法:
1.获取连接方法:通过数据库连接池获取连接
2.释放资源
3.获取连接池的方法
Spring JDBC
Spring框架对JDBC的简单封装。提供了一个JDBCTemplate对象简化JDBC的开发
步骤:
1)导入jar包
2)创建jdbcTemplate对象。依赖于数据源DataSource
JDBCTemplate template=new JdbcTemplate(ds);
3)调用JdbcTemplate的方法来完成CRUD的操作
update():执行DML语句。增、删、改语句
queryForMap():查询结果将结果集封装为map集合
注意:这个方法查询的结果集只有一条记录;并且将列名作为key,将值作为value,将这条记录封装为一个map集合。
queryForList():查询结果将结果集封装为list集合
注意:这个方法将每一条记录封装为一个map集合,再将map集合装载到list集合中。
query():查询结果,将结果封装为JavaBean对象
注意:
query的参数:RowMapper
一般我们使用BeanPropertyRowMapper实现类,可以完成数据到JavaBean的自动封装。
new BeanPropertyRowMapper<类型>(类型,class)
queryForObject:查询结果,将结果封装为对象
注意:一般用于聚合函数的查询