JDBC
JDBC 就是用 JAVA 语言操作关系型数据库的一套 API
全称:(Java DataBase Connectivity) Java 数据库连接
快速入门
写 JDBC 前需导入驱动 jar 包(以 mysql 数据库为例)
//注册驱动(mysql5 之后的版本此步可省略)
Class.forName("com.mysq.jdbc.Driver");
//获取连接,Java代码需要发送SQL给MySQL服务端,就需要先建立连接
Connection conn = DriverManager.getConnection(url, username, password);
//定义SQL语句
String sql = “update…” ;
//获取执行SQL对象,执行SQL语句需要SQL执行对象,而这个执行对象就是Statement对象
Statement stmt = conn.createStatement();
//执行SQL
stmt.executeUpdate(sql);
//处理结果
...;
//释放资源
stmt.close();
conn.close();
API 详解
1.DriverManager
-
注册驱动
DriverManager.registerDrever();
Class.forName() 底层便是通过调用该方法来实现驱动的注册
-
获取数据库连接
static Connection getConnection(String url, String user, String password) 尝试建立与给定数据库URL的连接 参数说明:
-
url : 连接路径
语法:jdbc:mysql://ip地址(域名):端口号/数据库名称?参数键值对1&参数键值对2…
示例:jdbc:mysql://127.0.0.1:3306/db1
细节:
-
如果连接的是本机mysql服务器,并且mysql服务默认端口是3306,则url可以简写为:jdbc:mysql:///数据库名称?参数键值对
-
配置 useSSL=false 参数,禁用安全连接方式,解决警告提示
-
-
user :用户名
-
poassword :密码
-
2.Connection
作用:获取执行 SQL 的对象,管理事务
-
获取执行对象
-
普通执行SQL对象
Statement createStatement()
快速入门中就是通过该方法获取的执行对象
-
预编译SQL的执行SQL对象:防止SQL注入
PreparedStatement prepareStatement(sql)
通过这种方式获取的
PreparedStatement
SQL语句执行对象可以防止SQL注入 -
执行存储过程的对象
CallableStatement prepareCall(sql)
通过这种方式获取的
CallableStatement
执行对象是用来执行存储过程的
-
-
事务管理
-
开启事务
void setAutoCommit(boolean autoCommit) 将此连接的自动提交模式设置为给定状态 参与autoCommit 表示是否自动提交事务,true表示自动提交事务,false表示手动提交事务。而开启事务需要将该参数设为为false。
-
提交事务
void commit() 提交事务,并释放此 Connection对象当前持有的所有数据库锁 -
回滚事务
void rollback() 回滚事务,并释放此 Connection对象当前持有的所有数据库锁 -
例:
try { // ============开启事务========== conn.setAutoCommit(false); //5. 执行sql int count1 = stmt.executeUpdate(sql1);//受影响的行数 //6. 处理结果 System.out.println(count1); int i = 3/0; //5. 执行sql int count2 = stmt.executeUpdate(sql2);//受影响的行数 //6. 处理结果 System.out.println(count2); // ============提交事务========== //程序运行到此处,说明没有出现任何问题,则需求提交事务 conn.commit(); } catch (Exception e) { // ============回滚事务========== //程序在出现异常时会执行到这个地方,此时就需要回滚事务 conn.rollback(); e.printStackTrace(); }
-
3.Statement
Statement对象的作用就是用来执行SQL语句。而针对不同类型的SQL语句使用的方法也不一样
-
执行DDL、DML语句
int executeUpdate(String sql) 执行给定的SQL语句 -
执行DQL语句
ResultSet executeQuery(String sql) 执行给定的SQL语句,返回单个ResultSet对象
4.ResultSet
作用:封装了SQL查询语句的结果
注意:使用后需释放资源
而执行了DQL语句后就会返回该对象,对应执行DQL语句的方法如下:
ResultSet executeQuery(sql);
要从 ResultSet
对象中获取我们想要的数据。ResultSet
对象提供了操作查询结果数据的方法
boolean next()
- 将光标从当前位置向前移动一行
- 判断当前行是否为有效行
xxx getXxx(参数)
xxx : 数据类型;如: int getInt(列的编号) ;String getString(列的名称)
5.PreparedStatement
作用:通过将敏感字符进行转义预防SQL注入问题
-
获取 PreparedStatement 对象
// SQL语句中的参数值,使用?占位符替代 String sql = "select * from user where username = ? and password = ?"; // 通过Connection对象获取,并传入对应的sql语句 PreparedStatement pstmt = conn.prepareStatement(sql);
-
为设置为 ? 参数赋值
PreparedStatement对象:setXxx(?的位置编号<从1 开始>,?的值);
-
执行SQL语句
executeUpdate(); 执行DDL语句和DML语句 executeQuery(); 执行DQL语句 注意:调用这两个方法时不需要传递SQL语句,因为获取SQL语句执行对象时已经对SQL语句进行预编译了。
数据库连接池
负责分配、管理数据库连接(Connection),它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个
-
标准接口:DataSource
官方(SUN) 提供的数据库连接池标准接口,由第三方组织实现此接口。该接口提供了获取连接的功能:
Connection getConnection()
那么以后就不需要通过
DriverManager
对象获取Connection
对象,而是通过连接池(DataSource)获取Connection
对象。常用的数据库连接池:Druid(德鲁伊)
-
Druid连接池是阿里巴巴开源的数据库连接池项目
-
功能强大,性能优秀,是Java语言最好的数据库连接池之一
-
-
Driud使用
public static void main(String[] args) throws Exception { //1.导入jar包 //2.定义配置文件 //3. 加载配置文件 Properties prop = new Properties(); prop.load(new FileInputStream("配置文件路径")); //4. 获取连接池对象 DataSource dataSource = DruidDataSourceFactory.createDataSource(prop); //5. 获取数据库连接 Connection Connection connection = dataSource.getConnection(); //获取到了连接后就可以继续做其他操作了 }