JDBC
JDBC概念:JABC就是用JAVA语言操作关系型数据库的一套API。
步骤
1.创建工程,导入驱动包到lib中;
2.注册驱动;
3.获取连接;
4.定义sql语句;
5.执行sql语句;
6.处理返回结果;
7.释放资源
//例:
public static void main(String[] args) throws Exception{
//1.注册驱动
Class.forName("com.mysql.jdbc.Driver");
//2.获取连接
String url = "jdbc:mysql://127.0.0.1:3306/db1";
String username = "root";
String passworl = "1234";
Connection conn= DriverManager.getConnection(url,username,passworl);
//3.定义sql
String sql = "update account set money = 2000 where id = 1";
//4.获取执行sql的对象statement
Statement stmt = conn.createStatement();
//5.执行sql
int count = stmt.executeUpdate(sql); //返回值为受影响的行数
//6.处理结果
System.out.println(count);
//7.释放资源
stmt.close();
conn.close();
}
JDBC API详解
DriverManager
DriverManager(驱动管理类)作用 :
1.注册驱动。提示:MySQL 5之后的驱动包可以省去注册驱动的步骤。
2.获取数据库连接。
static Connection
getConnection(url,String user,String password)
参数:
1.url:连接路径
语法:jdbc:mysql://ip地址(域名):端口号/数据库名称?参数键值对1&参数键值对2…
示例:jdbc:mysql://127.0.0.1:3306/db1
细节:如果连接的是本机MySQL服务器,并且MySQL服务默认端口是3306,则url可以简写为jdbc:mysql:///数据库名称?参数键值对。
配置useSSL=false 参数,禁用安全连接方式,解决警告提示。
String url = "jdbc:mysql://127.0.0.1:3306/db1?useSSL=false";
2.user:用户名
3.password:密码
Connection
Connectiom(数据库连接对象)作用:
1.获取执行SQL对象
//普通执行SQL对象
Statement creatStatement()
//预编译SQL的执行SQL对象:放置SQL注入
PrepareStatement prepareStatement(sql)
//执行存储过程的对象
CallableStatement prepareCall(sql)
2.管理事务
MySQL事务管理:开启事务:BEGIN/TRANSACTION;
提交事务:COMMIT;
回滚事务:ROLLBACK;
MySQL默认自动提交事务。
JDBC事务管理:Connection接口中定义了3个对应的方法
开启事务:setAutoCommit(boollean autoCommit)
:true我自动提交事务;false为手动提交事务,即为开启事务。
提交事务:commit()
回滚事务:rollback()
Statement
statement作用:
1.执行SQL语句:
int executeUpdate(sql)
:执行DML、DDL语句
返回值:(1)DML语句影响的行数;(2)DDL语句执行后,执行成功也可能返回0。
ResultSet executeQuery(sql)
:执行DQL语句
返回值:ResultSet 结果集对象
ResultSet
ResultSet(结果集对象)作用:
1.封装了DDL查询语句的结果
ReseltSet stmt.executeQuery(sql):执行DQL语句,返回ResultSet对象
获取查询结果
boolean next()
:(1)将光标从当前位置向前移动一行;(2)判断当前行为是否有效行
返回值:true 有效行,当前行有数据;false 无效行,当前行没有数据
xxx getXxx(参数):获取数据
xxx:数据类型;如 int getInt(参数)
,String getString(参数)
参数:int 列的编号,从1开始;String:列的名称。
PreparedStatement
PreparedStatement作用:1.预编译SQL语句并执行:预防SQL注入问题。
①获取PreparedStatement对象
//SQL语句中的参数值,使用?占位符替代
String sql = "select *from tb_user where username = ? and password =?";
//通过Connection对象获取,并传入对应的sql语句
PreparedStatement pstmt = conn.prepareStatement(sql)
②设置参数值
PreparedStatement对象:setXxx(参数1,参数2):给?赋值
Xxx数据类型;如setInt(参数1,参数2)
参数:
参数1:?的位置编号,从1开始。
参数2:?的值。
③执行SQL
executeUpdate();/executeQuery();
:不需要再传递sql
SQL注入:SQL注入是通过操作输入来修改事先定义好的SQL语句,用以达到代码对服务器进行攻击
的方法。
PreparedStatement 好处:1.预编译SQL,性能更高;2.防止SQL注入(将敏感字符进行转义)。
PreparedStatement 预编译功能开启:useServerPrestmts=true;
配置MySQL执行日志(重启MySQL服务后生效):
在my.ini中添加
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_quert_time=2
PreparedStatement 原理:
1.在获取PreparedStatemen对象时,将sql语句发送给mysql服务器进行检查,编译(这些步骤很耗时)
2.执行时就不用在进行这些步骤了,速度很快
3.如果sql模块一样,则只需要进行一次检查、编译
数据库连接池
数据库连接池简洁:
数据库连接池是一个容器,负责分配、管理数据库链接(connection)
他允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;
释放空闲时间超过最大空间时间的数据库连接来避免因为在没有释放数据库连接而引起的数据库连接遗漏
好处:资源重用;提升系统响应速度;避免数据库连接遗漏
数据库连接实现
标准接口:DataSource
官方(SUN)提供的数据库连接池标准接口,有第三方组织实现此接口
功能:获取连接
Connection getConnection
常见数据库连接池:1.DBCP;2.C3P0;3.Druid。
Druid:Druid连接池是阿里巴巴开元的数据库连接池项目;功能强大,性能优秀,是java语言最高的数据库连接池之一。
Druid使用步骤:1.导入jar包。2.定义配置文件。3.加载配置文件。4.获取数据库连接池对象。5.获取连接。