JDBC:java
概念:Java数据库链接,Java语言操做数据库mysql
JDBC本质:实际上是官方定义的一套操做全部关系型数据库的规则,即接口。各个数据库厂商其实现这套接口,提供数据库驱动jar包。咱们可使用这套接口编程,真正执行的代码是驱动jar包中的实现类spring
快速入门:sql
一、导入驱动jar包数据库
二、注册驱动编程
三、获取数据库链接对象 connection安全
四、定义SQL语句app
五、获取执行SQL语句的对象 statement框架
六、执行SQL,接收返回结果函数
七、处理结果
八、释放资源
示例代码:
public class Demo { public static void main(String[] args) throws Exception{ Class.forName("com.mysql.jdbc.Driver"); Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/db?useSSL=false","root","123"); String sql = "select * from Student"; Statement stmt = connection.createStatement(); ResultSet rs = stmt.executeQuery(sql); stmt.close();; connection.close(); } }
详解JDBC:
一、DriverManager,驱动管理对象
功能:一、注册驱动:告诉程序该使用哪个数据库驱动jar
static void registerDriver(Driver driver):注册与给定的驱动程序 DriverManager
写代码使用 Class.forName("com.mysql.jdbc.Driver");
在com.mysql.jdbc.Driver类中存在静态代码块
static{
java.sql.DriverManager.registerDriver(new Driver());
}catch(SQLException E){
thorw new RuntimeException("Can't register driver");
}
注意:mysql 5 以后的驱动jar包能够省略注册驱动的步骤
二、获取数据库链接
方法:static Connection getConnection(String url,string user,string password)
参数:一、url:指定链接的路径
语法: jdbc:mysql://ip地址(域名):端口号/数据库名称
例如:jdbc:mysql://localhost:3306/db
注意:若是链接的是本机地址,端口号为3306,那么能够省略不写
二、user:用户名
三、password:密码
二、Connection,数据库链接对象
一、获取执行SQL的对象Statement
statement createStatement();
preparStatement prepareStatement()
二、管理事务
开启事务:setAutoCommit(boolean autoCommit):调用该方法设置参数为false,即开启事务
提交事务:commit()
回滚事务:rollback()
三、Statement,执行SQL对象
执行sql:一、boolean execute(String sql),能够执行任意的sql
二、int executeUpdate(string sql),执行DML(Update,insert,delete),DDL(create,alter,drop),返回值为影响行数
三、ResultSet executeQuery(string sql),执行DQL(select)
四、ResultSet,结果集对象,封装查询结果
next():游标向下移动一行,判断当前行是不是最后一行末尾,若是是返回false,不是返回true
getXXX(参数):获取数据
参数:int:表明列的编号,从1开始,如:getString(1);
String :表明列的名称 ,如:getDouble(“balance”)
使用步骤:一、游标向下移动一行
二、判断是否有数据
三、获取数据
while(rs.next()){int id = rs.getInt(1);}
五、PreparedStatement,执行SQL对象,Statement子类
解决问题:SQL注入问题:在拼接sql时,有一些sql的特殊关键字参与字符串的拼接,会形成安全性问题
预编译SQL:参数使用?做为占位符
步骤:一、导入驱动jar包
二、注册驱动
三、获取数据库链接对象 Connection
四、定义sql
五、获取执行sql语句对象 preparedStatement Connection.prepaereStatement(String sql)
六、给?赋值:setXXX(参数1,参数2):参数1:?的位置编号,从1开始,参数2:?的值
七、执行sql,接受返回结果,不须要传递sql语句
八、处理结果
九、释放资源
注意:后期都会使用preparedStatement来完成增删改查的全部操做
一、能够防止SQL注入
二、效率更高
public class Demo { public static void main(String[] args) throws Exception{ Statement stme = null; Connection conn = null; try { Class.forName("com.mysql.jdbc.Driver"); String sql="insert into Student value ('dd',18,'1992-07-05','1992-07-05')"; conn=DriverManager.getConnection("jdbc:mysql:///db?useSSL=false","root","123"); stme=conn.createStatement(); int count =stme.executeUpdate(sql); if (count>0){ System.out.println("成功"); }else { System.out.println("失败"); } }catch (Exception e){ e.printStackTrace(); } if (conn != null){ try { conn.close(); }catch (Exception e){ e.printStackTrace(); } } } }
JDBC控制事务:
使用Connection对象来管理事务
开启事务:在执行sql以前开启事务
提交事务:当全部sql都执行完提交事务
回滚事务:在catch中回滚事务
数据库链接池:
概念:就是一个容器,存放数据库链接的容器,当系统初始化好后,容器被建立,容器中会申请一些链接对象,当用户来访问数据库时,从容器中获取链接对象,用户访问完之后,会将链接对象归还给容器
好处:一、节约资源
二、用户访问高效
实现:标准接口:DataSource
方法:一、获取链接:getConnection()
二、归还链接:Connection.close()。若是链接对象是从数据库链接池中获取的,那么调用Connection.close()方法,则不会再关闭链接,而是归还链接
通常咱们不去实现它,有数据库厂商来实现
一、C3P0
使用步骤:一、导入jar包,c3p0-0.9.5.2.jar mchange-commons-java-0.2.12.jar
注意还须要导入数据库驱动包
二、定义配置文件
名称:c3p0.properties 或者 c3p0-config.xml
路径:直接将文件放到src目录下便可
三、建立核心对象, 数据库链接池对象 combopooledDataSource
四、获取链接:getConnection
二、Druid
使用步骤:一、导入jar包,druid-1.0.9.jar
二、定义配置文件,注意:配置文件格式为priperties ,能够叫任意名字,放置在任意目录下
三、加载配置文件,Properties
四、获取数据库链接池对象:经过工厂来获取,DruidDataSourceFactory
五、获取链接,getConnection
JDBCTemplate:
spring 框架对JDBC的简单封装,提供了一个JDBCTemplate对象简化JDBC的开发
步骤:一、导入jar包
二、建立jdbcTemplate对象。依赖于数据源DataSource
jdbcTemplate template = new jabcTemplate(ds);
三、调用jdbcTemplate的方法完成CRUD的操做
一、update():执行DML语句,增,删,改语句
二、queryForMap():查询结果将结果集封装为map集合,结果集长度只能是1。
三、queryForList():查询结果将结果封装为list集合,将每一条记录封装问map集合,再添加到list集合
四、qurey():查询结果,将结果封装为JavaBean对象
参数:RowMapper
通常咱们使用BeanPropertyRowMapper实现类,实现自动封装
例如:new BeanpropertyRowMapper<类型>(类型.class)
五、queryForObject:查询结果,将结果封装为对象
通常用于聚合函数的查询结果