文章目录
- API介绍
- 获取 Statement 对象
- Statement的API介绍
- 使用步骤
- 案例代码
- JDBC实现对单表数据查询
- ResultSet的原理
- ResultSet获取数据的API
- 使用JDBC查询数据库中的数据的步骤
- 案例代码
API介绍
获取 Statement 对象
在java.sql.Connection
接口中有如下方法获取到Statement
对象
// 创建一个 Statement 对象来将 SQL 语句发送到数据库
Statement createStatement()
Statement的API介绍
// 根据执行的DML(INSERT、UPDATE、DELETE)语句,返回受影响的行数
int executeUpdate(String sql)
// 根据查询语句返回结果集,只能执行SELECT语句
ResultSet executeQuery(String sql)
注意:在MySQL中,只要不是查询就是修改。
executeUpdate:用于执行增删改
executeQuery:用于执行查询
使用步骤
- 注册驱动
- 获取连接
- 获取Statement对象
- 使用Statement对象执行SQL语句
- 释放资源
案例代码
public class Demo03 {
public static void main(String[] args) throws Exception {
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql:///day04_db", "root", "1234");
System.out.println(conn);
/*
1)获取发送sql语句对象使用Connection连接接口对象调用Connection接口的方法:
Statement createStatement() 创建一个 Statement 对象来将 SQL 语句发送到数据库。
PreparedStatement prepareStatement(String sql) 创建一个 PreparedStatement 对象来将参数化的 SQL 语句发送到数据库。
2)Statement和PreparedStatement都可以用来向数据库发送sql语句,Statement是PreparedStatement的父接口。
3)PreparedStatement 是安全的,Statement不安全的。并且Statement效率低,PreparedStatement效率高
4)Connection还可以手动控制mysql事务:
开启事务 void setAutoCommit(boolean autoCommit) 将此连接的自动提交模式设置为给定状态。
autoCommit - 为 true 表示启用自动提交模式;为 false 表示禁用自动提交模式
1. conn.setAutoCommit(false);
一切正常提交事务 void commit()
2. conn.commit()
出现异常,回滚事务 void rollback()
3. conn.rollback()
*/
// 从连接中拿到一个Statement对象
Statement stmt = conn.createStatement();
/*
Statement向数据库发送sql语句,使用Statement中的不同的方法可以向数据库发送不同的sql语句:
1)DQL查询语句: ResultSet executeQuery(String sql) 执行给定的 SQL 语句,该语句返回单个 ResultSet 对象。
参数:sql - 要发送给数据库的 SQL 语句,通常为静态 SQL SELECT 语句
返回值:ResultSet用来存放查询的结果,表示结果集
2)DML增删改和DDL语句(创建表和数据库)使用的方法:
int executeUpdate(String sql)
执行给定 SQL 语句,该语句可能为 INSERT、UPDATE 或 DELETE 语句(DML),
或者不返回任何内容的 SQL 语句(如 SQL DDL 语句)。
返回值:
1) 对于 SQL 数据操作语言 (DML) 语句,返回行记录数,影响的行数
2) 对于什么都不返回的 SQL 语句,返回 0 ,执行DDL返回的是0 了解
*/
// 1.插入记录
String sql = "insert into user values(null, 'zhaoliu', 'abc')";
int i = stmt.executeUpdate(sql);
System.out.println("影响的行数:" + i);
// 2.修改记录
sql = "update user set username='tianqi' where username='zhaoliu'";
i = stmt.executeUpdate(sql);
System.out.println("影响的行数:" + i);
// 3.删除记录
sql = "delete from user where id=4";
i = stmt.executeUpdate(sql);
System.out.println("影响的行数:" + i);
// 释放资源
stmt.close();
conn.close();
}
}
JDBC实现对单表数据查询
ResultSet的原理
- ResultSet 内部有一个指针,刚开始记录开始位置
- 调用next方法, ResultSet 内部指针会移动到下一行数据
- 我们可以通过 ResultSet 得到一行数据 getXxx 得到某列数据
ResultSet获取数据的API
其实 ResultSet 获取数据的API是有规律的get后面加数据类型。我们统称getXXX()
例如:
id | username | sex |
---|---|---|
1 | snow | 男 |
2 | rose | 女 |
对于上表中的一行数据,我要获取 username 为 snow 这列的值,有如下 2 种写法:
-
rs.getString(“username”);
通过列名获取该列的值。 -
rs.getString(2);
通过username列所在的位置获取该列的值。
使用JDBC查询数据库中的数据的步骤
- 注册驱动
- 获取连接
- 获取到Statement
- 使用Statement执行SQL
- ResultSet处理结果
- 关闭资源
案例代码
public class Demo04 {
public static void main(String[] args) throws Exception {
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql:///day04_db", "root", "1234");
Statement stmt = conn.createStatement();
String sql = "select * from user";
ResultSet rs = stmt.executeQuery(sql);
// 内部有一个指针,只能取指针指向的那条记录
while(rs.next()){// 指针移动一行,有数据才返回true
int id = rs.getInt("id");
String name = rs.getString(2);
String pwd= rs.getString(3);
System.out.println(id+"+++"+name+"++++"+pwd);
}
// 关闭资源
rs.close();
stmt.close();
conn.close();
}
}