文章目录
- 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()){// 指针移动一行,有数据才返回trueint 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();}
}