JDBC常用API和使用

一、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、往数据库里添加数据

① 数据表结构如下

2017100715402014.png

② 代码如下

  1. package com.liuyanzhao;  
  2. import java.sql.Connection;  
  3. import java.sql.Date;  
  4. import java.sql.DriverManager;  
  5. import java.sql.PreparedStatement;  
  6. import java.sql.SQLException;  
  7. import java.text.ParseException;  
  8. import java.text.SimpleDateFormat;  
  9. /* 
  10.  * @author LiuYanzhao 
  11.  */  
  12. public class Demo1 {  
  13.     private static final String URL = "jdbc:mysql://127.0.0.1:3306/jdbc_study?useUnicode=true&characterEncoding=utf8";  
  14.     private static final String USER = "root";  
  15.     private static final String PASSWORD = "";  
  16.     public static Connection conn = null;  
  17.     public static void main(String[] args) throws ClassNotFoundException, SQLException, ParseException {  
  18.         //1、加载驱动,需要提前把 jar 包添加到 classpath 中  
  19.         Class.forName("com.mysql.jdbc.Driver");  
  20.         //2、创建应用程序与数据库连接的 Connection 对象  
  21.         conn = DriverManager.getConnection(URL, USER, PASSWORD);  
  22.         //3、要执行的 sql 语句:name,password,email,status通过占位符填数,create_date 自动为当前时间  
  23.         String sql = " INSERT INTO users"+  
  24.                      "(name,password,birthday,email,create_date,status) "+  
  25.                      "VALUES("+  
  26.                      "?,?,?,?,current_date(),?)";  
  27.         //4、创建执行 SQL 语句的 PreparedStatement 对象  
  28.         PreparedStatement ptmt = conn.prepareStatement(sql);  
  29.         ptmt.setString(1"小美");  
  30.         ptmt.setString(2"123456");  
  31.         ptmt.setDate(3,new Date((new SimpleDateFormat("yyyy-MM-dd").parse("2011-10-1")).getTime()) );  
  32.         ptmt.setString(4"xiaomei@126.com");  
  33.         ptmt.setInt(51);  
  34.         //5、真正执行 sql 语句,并返回影响的行数  
  35.         int x = ptmt.executeUpdate();  
  36.         System.out.println("影响行数:" + x); //返回1  
  37.     }  
  38. }  

③运行结果

上面的操作,将在 jdbc_study 数据库的 users 表中添加一条记录,终端显示 1

2、查询(打印)数据库信息

①数据表如下

20171007154127663.png

②代码如下

  1. package com.liuyanzhao;  
  2. import java.sql.Connection;  
  3. import java.sql.Date;  
  4. import java.sql.DriverManager;  
  5. import java.sql.PreparedStatement;  
  6. import java.sql.ResultSet;  
  7. import java.sql.SQLException;  
  8. import java.text.ParseException;  
  9. import java.text.SimpleDateFormat;  
  10. /* 
  11.  * @author LiuYanzhao 
  12.  */  
  13. public class Demo2 {  
  14.     private static final String URL = "jdbc:mysql://127.0.0.1:3306/jdbc_study?useUnicode=true&characterEncoding=utf8";  
  15.     private static final String USER = "root";  
  16.     private static final String PASSWORD = "";  
  17.     public static Connection conn = null;  
  18.     public static void main(String[] args) throws ClassNotFoundException, SQLException, ParseException {  
  19.         //1、加载驱动,需要提前把 jar 包添加到 classpath 中  
  20.         Class.forName("com.mysql.jdbc.Driver");  
  21.         //2、创建应用程序与数据库连接的 Connection 对象  
  22.         conn = DriverManager.getConnection(URL, USER, PASSWORD);  
  23.         //3、要执行的 sql 语句:name,password,email,satic 通过占位符填数,create_date 自动为当前时间  
  24.         String sql = " SELECT * FROM users";  
  25.         //4、创建执行 SQL 语句的 PreparedStatement 对象  
  26.         PreparedStatement ptmt = conn.prepareStatement(sql);  
  27.         //5、真正执行 sql 语句,并返回影响的 ResultSet  
  28.         ResultSet rs = ptmt.executeQuery();  
  29.         //6、打印 ResultSet 数据集  
  30.         while(rs.next()) {  
  31.             System.out.print(rs.getInt("id")+" ");  
  32.             System.out.print(rs.getString("name")+" ");  
  33.             System.out.print(rs.getString("password")+" ");  
  34.             System.out.print(rs.getDate("birthday")+" ");  
  35.             System.out.print(rs.getString("email")+" ");  
  36.             System.out.print(rs.getDate("create_date")+" ");  
  37.             System.out.print(rs.getInt("status")+" ");  
  38.             System.out.println();  
  39.         }  
  40.     }  
  41. }  

③ 运行结果

控制台上可以看到如下界面

20171007154222212.jpg

  • 微信
  • 赶快加我聊天吧
  • 博客交流群
  • 海纳百川,大家来水
  • weinxin
风起云涌

发表评论 取消回复