一、JDBC 常用 API
1、Connection 接口
方法名称 | 功能描述 |
getMetaData() | 该方法用于返回数据库的元数据的 DatabaseMetaData 对象 |
createStatement | 用于创建一个 Statement 对象来将 SQL 语句发送到数据库 |
preparedStatement(String sql) | 用于创建一个 PreparedStatement 对象来将参数化的 SQL 语句发送到数据库 |
prepareCall(String sql) | 用于创建一个 CallableStatement 对象来调用数据库存储过程 |
2、Statement 接口
方法名称 | 功能描述 |
boolean execute(String sql) | 用于执行各种 SQL 语句,该方法返回一个 boolean 类型的值。如果为 true,表示所执行的 SQL 语句具备查询结果,可通过 Statement 的 getResultSet() 方法查询结果 |
int executeUpdate(String sql) | 用于执行 SQL 中的 insert、update 和 delete 语句,该方法返回一个 int 类型的值,表示影响数据库中的行数 |
ResultSet executeQuery(String sql) | 用于执行 SQL 中的 select 语句(查询,遍历),该方法返回一个表示查询结果的 ResultSet 对象 |
execute 是 executeQuery 和 executeUpdate 的综合.
通常我们没有必要使用 execute 方法来执行 SQL 语句,而是使用 executeQuery 或 executeUpdate 更适合。
具体可参考:execute、executeUpdate、executeQuery 三者的区别
3、PreparedStatement 接口
方法名称 | 功能描述 |
executeUpdate() | 在此 PreparedStatement 对象中执行 SQL 语句,该语句必须是一个 DML 语句,或者无返回内容的 SQL 语句,比如 DDL 语句 |
executeQuery() | 在此 PreparedStatement 对象中执行 SQL 语句,该方法返回的是 ResultSet 对象 |
setInt(int parameterIndex, int x) | 将指定的参数设置为 int 值 |
setFloat(int parameterIndex, float x) | 将指定的参数设置为 Float 值 |
setString(int parameterIndex, String x) | 将指定参数设置的给定的 Date 值 |
setDate(int parameterIndex, Date x) | 将指定参数设置给定的 Date 值 |
addBatch() | 将一组参数添加到此 PreparedStatement 对象的批处理命令中 |
setCharacterStream(parameterIndex, reader, length) | 将指定的输入流写入数据库的文本字段 |
setBinaryStream(parameterIndex, x, length) | 将二进制的输入流数据写入到二进制的字段中 |
DML 语句:SELECT、UPDATE、INSERT、DELETE
DLL 语句:CREATE DROP ALERT
具体参考: sql 语句分为三类(DML,DDL,DCL)-介绍
4、ResultSet 接口
getString(int columnIndex) | 用于获取 指定字段的 String 类型的值,参数 columnIndex 代表字段的索引 |
getString(String columnName) | 用于获取指定字段的 String 类型的值,参数 columnIndex 代表字段名称 |
getInt(int columnIndex) | 用于获取指定字段的 int 类型的值,参数 columnIndex 代表字段的索引 |
getInt(String columnName) | 用于获取指定字段的 int 类型的值,参数 columnIndex 代表字段名称 |
getDate(int columnIndex) | 用于获取指定字段的 Date 类型的值,参数 columnIndex 代表字段索引 |
getDate(String columnName) | 用于获取指定字段的 Date 类型的值,参数 columnIndex 代表字段名称 |
next() | 将游标从当前位置移到下一位置 |
absolute(int row) | 将游标移到此 ResultSet 对象的指定行 |
afterLast() | 将游标移动到此 ResultSet 对象的末尾,即最后一行之后 |
beforeFirst() | 将游标移动到此 ResultSet 对象开头,即第一行之前 |
previous() | 将游标移动到此 ResultSet 对象的上一行 |
last() | 将游标移动到此 Result 对象的最后一行 |
二、案例
1、往数据库里添加数据
① 数据表结构如下
② 代码如下
- package com.liuyanzhao;
- import java.sql.Connection;
- import java.sql.Date;
- import java.sql.DriverManager;
- import java.sql.PreparedStatement;
- import java.sql.SQLException;
- import java.text.ParseException;
- import java.text.SimpleDateFormat;
- /*
- * @author LiuYanzhao
- */
- public class Demo1 {
- private static final String URL = “jdbc:mysql://127.0.0.1:3306/jdbc_study?useUnicode=true&characterEncoding=utf8”;
- private static final String USER = “root”;
- private static final String PASSWORD = “”;
- public static Connection conn = null;
- public static void main(String[] args) throws ClassNotFoundException, SQLException, ParseException {
- //1、加载驱动,需要提前把 jar 包添加到 classpath 中
- Class.forName(“com.mysql.jdbc.Driver”);
- //2、创建应用程序与数据库连接的 Connection 对象
- conn = DriverManager.getConnection(URL, USER, PASSWORD);
- //3、要执行的 sql 语句:name,password,email,status 通过占位符填数,create_date 自动为当前时间
- String sql = ” INSERT INTO users”+
- “(name,password,birthday,email,create_date,status) “+
- “VALUES(“+
- “?,?,?,?,current_date(),?)”;
- //4、创建执行 SQL 语句的 PreparedStatement 对象
- PreparedStatement ptmt = conn.prepareStatement(sql);
- ptmt.setString(1, “小美”);
- ptmt.setString(2, “123456”);
- ptmt.setDate(3,new Date((new SimpleDateFormat(“yyyy-MM-dd”).parse(“2011-10-1”)).getTime()) );
- ptmt.setString(4, “xiaomei@126.com”);
- ptmt.setInt(5, 1);
- //5、真正执行 sql 语句,并返回影响的行数
- int x = ptmt.executeUpdate();
- System.out.println(“影响行数:” + x); //返回 1
- }
- }
③运行结果
上面的操作,将在 jdbc_study 数据库的 users 表中添加一条记录,终端显示 1
2、查询(打印)数据库信息
①数据表如下
②代码如下
- package com.liuyanzhao;
- import java.sql.Connection;
- import java.sql.Date;
- import java.sql.DriverManager;
- import java.sql.PreparedStatement;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- import java.text.ParseException;
- import java.text.SimpleDateFormat;
- /*
- * @author LiuYanzhao
- */
- public class Demo2 {
- private static final String URL = “jdbc:mysql://127.0.0.1:3306/jdbc_study?useUnicode=true&characterEncoding=utf8”;
- private static final String USER = “root”;
- private static final String PASSWORD = “”;
- public static Connection conn = null;
- public static void main(String[] args) throws ClassNotFoundException, SQLException, ParseException {
- //1、加载驱动,需要提前把 jar 包添加到 classpath 中
- Class.forName(“com.mysql.jdbc.Driver”);
- //2、创建应用程序与数据库连接的 Connection 对象
- conn = DriverManager.getConnection(URL, USER, PASSWORD);
- //3、要执行的 sql 语句:name,password,email,satic 通过占位符填数,create_date 自动为当前时间
- String sql = ” SELECT * FROM users”;
- //4、创建执行 SQL 语句的 PreparedStatement 对象
- PreparedStatement ptmt = conn.prepareStatement(sql);
- //5、真正执行 sql 语句,并返回影响的 ResultSet
- ResultSet rs = ptmt.executeQuery();
- //6、打印 ResultSet 数据集
- while(rs.next()) {
- System.out.print(rs.getInt(“id”)+” “);
- System.out.print(rs.getString(“name”)+” “);
- System.out.print(rs.getString(“password”)+” “);
- System.out.print(rs.getDate(“birthday”)+” “);
- System.out.print(rs.getString(“email”)+” “);
- System.out.print(rs.getDate(“create_date”)+” “);
- System.out.print(rs.getInt(“status”)+” “);
- System.out.println();
- }
- }
- }
③ 运行结果
控制台上可以看到如下界面