jdbc
理解JDBC原理
- JDBC是Java数据库连接技术的简称,提供连接各种常用数据库的能力
掌握Connection接口的使用
掌握Statement接口的使用
掌握ResultSet接口的使用
掌握PreparedStatement接口的使用
JDBC API
内容:供程序员调用的接口与类,集成在java.sql和javax.sql包中,如:
DriverManager类
connection接口
statement接口
ResultSet接口
DriverManager
1.注册驱动
Class.forName("com.mysql.jdbc.Driver);·
查看Driver类源码
static {
try {
DriverHanager.registerDriver(new Driver();
}catch (sQLException var1) }
throw new RuntimeException("can't register driver!");
}
}
提示:
. MySQL 5之后的驱动包,可以省略注册驱动的步骤
·自动加载jar包中META-INF/services/java.sql.Driver文件中的驱动类
2.获取数据库连接
static connection getconnection (String url,String user,String password)
参数:
1.url:连接路径
语法:jdbc:mysql://ip地址(域名):端口号/数据库名称?参数键值对1&参数键值对2...
示例: jdbc:mysql:W/127.0.0.1:3306/db1
细节:
·如果连接的是本机mysql服务器,并且mysql服务默认端口是3306,则ur可以简写为: jdbc:mysql!川数据库名称?参数键值对·
配置useSSL=false参数。禁用安全连接方式,解决警告提示
2. user:用户名
3. password:密码
Connection
Connection(数据库连接对象)作用:
1.获取执行SQL的对象
普通执行SQL对象
Statement createStatement()
预编译SQL的执行SQL对象:防止SQL注入
PreparedStatement prepareStatement (sql)
执行存储过程的对象
CallableStatement prepareCall (sql)
2.管理事务
- MySQL事务管理
开启事务:BEGIN; /START TRANSACTION;
提交事务:COMMIT;
回滚事务:ROLLBACK;
MySQL默认自动提交事务
- JDBC事务管理:Connection接口中定义了3个对应的方法
开启事务: setAutoCommit(boolean autoCommit): true为自动提交事务;false为手动提交事务,即为开启事务
提交事务:commit()
回滚事务:rollback()
Statement
1.执行SQL语句
执行SQL语句
int executeUpdate(sql):执行DML、DDL语句
返回值:(1)DML语句影响的行数(2)DDL语句执行后,执行成功也可能返回0
ResultSet executeQuery(sql):执行DQL语句
返回值: ResultSet结果集对象
ResultSet
ResultSet(结果集对象)作用:
1.封装了DQL查询语句的结果
ResultSet stmt.executeQuery(sql):执行DQL语句,返回ResultSet对象
获取查询结果
boolean next():(1)将光标从当前位置向前移动一行(2)判断当前行是否为有效行
返回值:
-true:有效行,当前行有数据
- false:无效行,当前行没有数据
xxxgetXxx(参数):获取数据
xXx:数据类型;如:int getlnt(参数) ;String getString(参数)
参数:
-int:列的编号,从1开始. String:列的名称
使用步骤:
1.游标向下移动一行,并判断该行否有数据: next()
2.获取数据: getXxx(参数)
l循环判断游标是否是最后一行末尾
while(本.next()){
//获取数据
rs.getXxx(参数);}
PreparedStatement
PreparedStatement作用:
1.预编译SQL语句并执行:预防SQL注入问题
SQL注入
SQL注入是通过操作输入来修改事先定义好的SQL语句,用以达到执行代码对服务器进行攻击的方法。
2.预编译SQL并执行SQL语句
(1)获取 PreparedStatement对象
SQL语句中的参数值,使用?占位符替代
String sql = "select * from user where username = ? and password = ?"";
//通过Connection对象获取,并传入对应的sql语句
PreparedStatement pstmt = conn.prepareStatement(sql);
(2)设置参数值
PreparedStatement对象:setXxx(参数1,参数2):给?赋值
Xxx:数据类型;如setInt(参数1,参数2)
参数:
参数1:?的位置编号,从1开始
参数2:?的值
(3)执行SQL
executeUpdate(:/ executeQueryo::不需要再传递sql
PreparedStatement原理
PreparedStatement 好处:
1.预编译SQL,性能更高
2.防止SQL注入:将敏感字符进行转义
(1)PreparedStatement预编译功能开启: useServerPrepStmts=true
(2) 配置MySQL执行日志(重启mysql服务后生效)
log-output=FILE
general-log=1
general_log_file="D:\mysql.log"
slow-query-log=1
slow_query_log_file="D:\mysql_slow.log"
long_query_time=2
PreparedStatement 原理:
1.在获取PreparedStatement对象时,将sql语句发送给mysql服务器进行检查,编译(这些步骤很耗时)
2. 执行时就不用再进行这些步骤了,速度更快
3.如果sql模板一样,则只需要进行一次检查、编译
数据库连接池
数据库连接池简介
·数据库连接池是个容器,负责分配、管理数据库连接(Connection)
·它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;
·释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。
好处:
资源重用
·提升系统响应速度·
避免数据库连接遗漏
·标准接口:DataSource
·官方(SUN)提供的数据库连接池标准接口,由第三方组织实现此接口。·
功能:获取连接
Connection getConnection()
常见的数据库连接池:
DBCP
C3PO
Druid
Driud使用步骤
- 导入jar包druid-1.1.12.jar
2.定义配置文件
3.加载配置文件
4.获取数据库连接池对象
5.获取连接