1、JDBC基本概念
JDBC
:Java DataBase Connectivity,Java数据库连接
。其本质
是由官方(Sun公司)定义的一套操作所有关系型数据库的规则(接口),各个数据库厂商去实现这些接口,提供数据库驱动jar包,我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类
2.JDBC快速入门
- 导入驱动jar包
1.复制下载的Jar包添加到项目里
2.Add as library. . .
- 编写代码注册驱动
- 获取数据库连接对象(Connection)
- 定义SQL语句
- 获取执行SQL语句的对象(Statement)
- 执行SQL,接收返回结果
- 处理结果
- 释放资源
package xpu.edu.jdbc1;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
/**
* JDBC快速入门
*/
public class jdbcDemo1 {
public static void main(String[] args) throws Exception {
//1.导入jar包
//2.注册驱动
Class.forName("com.mysql.jdbc.Driver");
//3.获取数据库连接对象
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db","root","1234");
//4.定义SQL语句
String sql = "update student set math = 100 where name = '张三'";
//5.获取执行SQL的对象
Statement stmt = conn.createStatement();
//6.执行SQL
int count = stmt.executeUpdate(sql);
//7.处理结果
System.out.println(count);//输出1
//8.释放资源
stmt.close();
conn.close();
}
}
3.JDBC中各个接口和类详解
DriverManager:驱动管理对象
Connection:数据库连接对象
Statement:执行SQL的对象
ResultSet:结果集对象
PreparedStatement:是Statement的子类,也用于执行SQL,但是比Statement的功能更强大
3.1.DriverManager
两大功能:
- 1.
注册驱动
:告诉程序该使用哪一个驱动jar包
- DriverManager中的方法:
static void registerDriver(Driver driver):注册与给定的驱动程序DriverManager- 我们写的代码:
Class.forName(“com.mysql.jdbc.Driver”);通过查看源码
,发现在com.mysql.jdbc.Driver类中存在静态代码块,在该静态代码块中调用了registerDriver方法,该静态代码块如下:
static {
try {
DriverManager.registerDriver(new Driver());
} catch (SQLException var1) {
throw new RuntimeException("Can't register driver!");
}
}
注意:MySQL5之后的驱动jar包可以省略注册驱动的步骤
- 2.
获取数据库连接
- DriverManager中的方法:
static Connection getConnection(String url,String user,String password)
- url:指定连接路径
语法:jdbc:mysql://ip地址(域名):端口号/数据库名称
细节:如果连接本机的MySQL服务器,并且MySQL服务的默认端口是3306,则url可以简写为:jdbc:mysql:///数据库名称- user:用户名
- password:密码
3.2.Connection
两大功能:
- 1.
获取执行mysql的对象
- Statement createStatement()
- PreparedStatement preparedStatement(String sql)
- 2.
管理事务
- 开启事务:setAutoCommit(boolean autoCommit):调用该方法设置参数为false即开启事务
- 提交事务:commit()
- 回滚事务:rollback()
3.3.Statement对象
功能:执行sql
- boolean execute(String sql):
- int executeUpdate(String sql):执行DML(insert、update、delete)语句和DDL(create、alter、drop)语句,DML为主
返回值:影响的行数,我们可以通过这个影响的行数判断是否执行成功,如果返回值大于0,则执行成功,反之执行失败
- ResultSet executeQuery(String sql):执行DQL(select)语句
3.4.ResultSet
ResultSet
:结果集对象,封装查询结果
ResultSet里的方法:
- next():游标向下移动一行
- getXxx(参数):获取数据
1.Xxx表示数据类型,比如:Xxx是int那么getInt()
2.参数:
- int:代表列的编号,列的编号从1开始
- String:代表列的名称
注意(使用步骤):
- 游标向下移动一行
- 判断下一行是否有数据(while循环判断)
- 下一行有数据再获取数据
3.5.PreparedStatement
SQL注入问题
:在拼接SQL时有一些SQL的特殊关键字参与字符串拼接会导致安全性问题- 解决SQL注入问题:使用
PreparedStatement对象来解决
- 预编译的SQL:参数使用“?”作为占位符,在执行SQL时才给“?”替换上值
- PreparedStatement使用步骤:
1.导入驱动
2.编写代码注册驱动
3.获取数据库连接对象(Connection)
4.定义SQL语句注意:SQL的参数使用“?”作为占位符
5.获取执行SQL语句的对象(PreparedStatement)
调用Connection的preparedStatement(String sql)方法,此处传递了SQL语句后面执行SQL时可以不再传递SQL
6.给“?”赋值
PreparedStatement的方法:setXxx(参数1,参数2)
参数1:该句SQL中问号的位置是第几个,从1开始
参数2:问号的值7.执行SQL(可以不再传递SQL语句),接收返回结果
8.处理结果
9.释放资源
主要使用PreparedStatement进行增删改操作
4.JDBC控制事务
Connection对象管理事务
:
- 开启事务:setAutoCommit(boolean autoCommit)
调用该方法设置参数为false即开启事务,在执行SQL之前开启事务
- 提交事务:commit()
当所有SQL都执行完提交事务
- 回滚事务:rollback()
!!!注意:回滚前判断Connection对象是否为空,因为在catch中使用回滚,出现异常就回滚,所以尽量抓Exception