JDBC笔记(从0到精通)
JDBC概念:JDBC就是是使用Java语言操作关系型数据库的一套API全称:Java数据库连接JDBC本质:官方(sun公司)定义的一套操作所有关系型数据库的规则,即接口各个数据库厂商去实现这套接口,提供数据库驱动jar包我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类JDBC好处:各数据库厂商使用相同的接口,Java代码不需要针对不同数据库分别开发可随时替换底层数据
·
JDBC概念:
JDBC就是是使用Java语言操作关系型数据库的一套API
全称:Java数据库连接
JDBC本质:
官方(sun公司)定义的一套操作所有关系型数据库的规则,即接口
各个数据库厂商去实现这套接口,提供数据库驱动jar包
我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类
JDBC好处:
各数据库厂商使用相同的接口,Java代码不需要针对不同数据库分别开发
可随时替换底层数据库,访问数据库的Java代码基本不变
JDBC快速入门:
步骤:
0.创建工程,导入驱动jar包
例如:mysql.connector.java.5.1.48.jar
1.注册驱动
Class.forName("com.mysql.jdbc.Driver");
2.获取连接
Connection conn=DriverManager.getConnection(url,username,password);
3.定义SQL语句
String sql="update...";
4.获取执行SQL对象
Statement stmt=conn.createStatement();
5.执行SQL
stmt.executeUpdate(sql);
6.处理返回结果
7.释放资源
JDBC API详解:
(1)DriverManager(驱动管理类)作用:
1.1)注册驱动
Class.forName("com.mysql.jdbc.Driver");
查看Driver类源码:
static {
try{
DriverManager.registerDriver(new Driver());
}catch(SQLException var1){
throw new RuntimeException("Can't register driver!");
}
}
提示:
MySQL 5之后的驱动包,可以省略注册驱动的步骤
自动加载jar包中META-INF/services/java.sql.Driver文件中的驱动类
1.2)获取数据库连接
static Connection getConnection(String url, String user,String password);
参数:
url:连接路径
语法:jdbc:mysql://ip地址(域名):端口号/数据库名称?参数键值对1&参数键值对2...
示例:jdbc:mysql://127.0.0.1:3306/db1
细节:
如果连接的是本机mysql服务器,并且mysql服务默认端口号3306,则url可以简写为:jdbc:mysql:///数据库名称?参数键值对
配置userSSL=false 参数,禁用安全连接方式,解决警告提示
user:用户名
password:密码
(2)Connection(数据库连接对象)作用:
2.1)获取执行SQL的对象
2.1.1)普通执行SQL对象
Statement createStatement()
2.1.2)预编译SQL的执行SQL对象:防止SQL注入
PreparedStatement prepareStatement(sql)
2.1.3)执行存储过程的对象
CallableStatement prepareCall(sql)
2.2)管理事务
2.2.1)MySQL事务管理
开启事务:BEGIN;/START TRANSACTION;
提交事务:COMMIT;
回滚事务:ROLLBACK;
MySQL默认自动提交事务
2.2.2)JDBC事务管理:Connection接口中定义了3个对应的方法
开启事务:setAutoCommit(boolean autoCommit); //true为自动提交事务;false为手动提交事务,即为开启事务;
提交事务:commit()
回滚事务:rollback()
注意:在Java中,事务管理用try catch语句包裹起来,回滚放在catch中
(3)Statement作用:
3.1)执行SQL语句
int executeUpdate(sql):执行DML、DDL语句
返回值:(1)DML语句影响的行数(2)DDL语句执行后,执行成功也可能返回0
ResultSet executeQuery(sql):执行DQL语句
返回值:ResultSet结果集对象
(4)ResultSet(结果集对象)作用:
4.1)封装了DQL查询语句的结果
ResultSet stmt.executeQuery(sql):执行DQL语句,返回ResultSet对象
4.2)获取查询结果
boolean next():(1)将光标从当前位置向前移动一行(2)判断当前行是否为有效行
返回值:
true:有效行,当前行有数据
false:无效行,当前行没有数据
xxx getXxx(参数):获取数据
xxx:数据类型;比如:int getInt(参数);String getString(参数)
参数:
int:列的编号,从1开始
String:列的名称
(5)PreparedStatement作用:
5.1)预编译SQL语句并执行:预防SQL注入问题
SQL注入:
SQL注入是通过操作输入来修改事先定义好的SQL语句,用以达到执行代码对服务器进行攻击的方法。
5.2)解决SQL注入3步走
5.2.1)获取PreparedStatement对象
//SQL语句中的参数值,使用?占位符替代
String sql="select * from user where username=? and password=?";
//通过Connection对象获取,并传入对应的sql语句
PreparedStatement pstmt=conn.prepareStatement(sql);
5.2.2)设置参数值
PreparedStatement对象:setXxx(参数1, 参数2):给?赋值
Xxx:数据类型;如setInt(参数1, 参数2)
参数:
参数1:?的位置编号,从1开始
参数2:?的值
5.2.3)执行SQL
executeUpdate(); / executeQuery();:不需要再传递sql
(6)PreparedStatement原理:
6.1)PreparedStatement好处:
6.1.1)预编译SQL,性能更高
6.1.2)防止SQL注入:将敏感字符进行转义
6.2)PreparedStatement预编译功能开启:userServerPrepStmts=true
6.3)配置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
6.4)PreparedStatement原理:
6.4.1)在获取PreparedStatement对象时,将sql语句发送给mysql服务器进行检查,编译(这些步骤很耗时)
6.4.2)执行时就不用再进行这些步骤了,速度更快
6.4.3)如果sql模板一样,则只需要进行一次检查、编译
数据库连接池:
(1)数据库连接池简介:
1.1)数据库连接池是个容器,负责分配、管理数据库连接池(Connection)
1.2)它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;
1.3)释放空间时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏
1.4)好处:
1.4.1)资源重用
1.4.2)提升系统响应速度
1.4.3)避免数据库连接遗漏
(2)数据库连接池实现:
2.1)标准接口:DataSource
2.1.1)官方(SUN)提供的数据库连接池标准接口,由第三方组织实现此接口
2.1.2)功能:获取连接
Connection getConnection()
2.1.3)常见的数据库连接池:
DBCP
C3P0
Druid
2.1.4)Druid(德鲁伊):
2.1.4.1)Druid连接池是阿里巴巴开源的数据库连接池项目
2.1.4.2)功能强大,性能优秀,是Java语言最好的数据库连接池之一
Driud使用步骤:
(1)导入jar包druid-1.1.12.jar
(2)定义配置文件
(3)加载配置文件
(4)获取数据库连接池对象
(5)获取连接
更多推荐
已为社区贡献3条内容
所有评论(0)