序言
JDBC就是使用Java语言操作关系型数据库的一套API
一共就7行:
1.注册驱动
Class.forName("com.mysql.jdbc.Driver");
2.获取连接对象
String url = "jdbc:mysql://127.0.0.1:3306/db1?useSSL=false";
String username = "root";
String password = "1234";
Connection conn = DriverManager.getConnection(url,username,password);
3.定义SQL语句
String sql = "update account set money = 2000 where id = 1";
4.获取执行sql的对象
Statement stmt = conn.createStatement();
5.执行sql
int count = stmt.executeUpdate(sql);
6.处理结果集
...
7.释放资源
stmt.close();
conn.close();
JDBC简介
JDBC是一套Java代码,可以用来操作不同的关系型数据库,比如MySql、Oracle、DB2。
JDBC只提供接口,具体的实现类由不同的数据库提供,他们提供的实现类也就是:驱动
JDBC快速入门
-
创建工程,导入驱动jar包
-
注册驱动
驱动是导入了,但是代码不识别驱动呀,所以需要我们注册一下
Class.forName("com.mysql.jdbc.Driver")
-
获取连接
Connection conn = DriverManager.getConnection(url,username,password) -
定义SQL语句
String sql = "update..." -
获取执行SQL对象
Statement stmt = conn.createStatement() -
执行SQL
其实就是把执行语句发送给mysql,让mysql数据库执行语句,然后将结果返回过来。
stmt.executeUpdate(sql)
-
处理返回结果
-
释放资源
JDBC API详解
- DriverManager
1.注册驱动
我们通过Class.forName("com.mysql.jdbc.Driver")的时候,本质上是通过DriverManager来实现注册驱动的,随着Driver类的加载,自动执行DriverManager
在mysql5之后(jar包在5版本上),就可以不用写Class.forName。在jar包的META-INF中帮我们书写好了。
2.获取数据库连接
- Connection
1.获取执行SQL对象
2.事务管理
在执行sql之前,开启事务。
并在执行完sql后,提交事务。
如果出现异常,就需要回滚事务。
- Statement
执行SQL语句:DDL:对表、库进行操作。DML:对数据的增删改操作。DQL:数据的查询操作
- ResultSet(对查询结果进行封装)
封装了DQL查询语句的结果
ResultSet stmt.executeQuery(sql)
获取到的查询结果会被封装起来,封装后的查询结果集会有一个游标,游标从0开始,所以第一个数据是下标1.
Connection conn = DriverManager.getConnection(url,username,password)
String sql = "select * from account"
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql)
while(rs.next()){
//获取数据,列的下标是从1开始的
//我数据库中就3列数据,所以用三个类型
int id = rs.getInt(1);
String name = rs.getString(2);
double money = rs.getDouble(3);
}
//也可以通过列名称获取
while(rs.next()){
int id = rs.getInt("id")
String name = rs.getString("name")
double money = rs.getDouble("money")
}
将数据封装到Account对象实体类中
List<Account> list = new ArrayList<>();
while(rs.next()){
Account account = new Account();
int id = rs.getInt("id");
String name = rs.getString("name");
double money = rs.getDouble("money");
account.setId(id);
account.setName(name);
account.setMoney(money);
//存入集合
list.add(account)
}
- PreparedStatement(Statement增强版)
用 ? 占位符来
String name = "zhangsan"
String pwd = "abc"
定义sql
String sql = "select * from tb_user where username = ? and password = ?"
获取pstmt对象
PreparedStatement pstmt = conn.prepareStatement(sql)
设置占位符?的值
前面是索引,对这个索引进行赋值是上方的name
pstmt.setString(1,name)
pstmt.setString(2,pwd)
//执行sql
ResultSet rs = pstmt.executeQuery()'
if(rs.next()){
System.out.println()
}else{
System.out.println()
}
释放资源
rs.close()
pstmt.close()
conn.close()
数据库连接池
数据库连接池实现
不再通过DriverManager.getConnection,而是通过DataSource.getConnection。
快速获取当前所在的文件路径:System.out.println(System.getProperty("user.dir"))
-
导入jar包
-
定义配置文件
- 加载配置文件
Properties prop = new Properties();
prop.load(new FileInputStream("项目名称/src/druid.properties"))
- 获取数据库连接池对象
DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);
- 获取连接
Connection connection = dataSource.getConnection();
System.out.println(connection);