当前位置:Gxlcms > 数据库问题 > Java学习:JDBC

Java学习:JDBC

时间:2021-07-01 10:21:17 帮助过:16人阅读

DBC(Java Database Connectivity)是一个独立于特定数据库管理系统、通用的SQL数据库存取和操作的公共接口(一组API),定义了用来访问数据库的标准Java类库,使用这个类库可以以一种标准的方法、方便地访问数据库资源。

jdbc的核心API

Driver接口:数据库驱动程序的接口,所有的数据库厂商需要的驱动程序需要实现此接口。

Connection接口:与具体的数据库连接对象;

Statement createStatement()    创建一个静态sql语句对象

PreparedStatement prepareStatement(String sql)  创建预编译的sql语句对象

CallableStatement prepareCall(String sql)   创建存储过程的sql语句对象

 

 

Statement接口:用于执行静态 SQL 语句

 

int executeUpdate(String sql)  执行更新操作的sql语句 (create/alter/drop) DDL语句

 

                                                        (insert/update/delete)DML语句

 

ResultSet executeQuery(String sql)  执行查询操作的sql语句

 

                           (select)(DQL查询语句)

 

PreparedStatement接口:用于执行预编译的 SQL 语句(是Statement的子接口)

int executeUpdate()  执行更新操作的sql语句

ResultSet executeQuery()  执行查询操作的sql语句

 

CallableStatement接口:用于执行 SQL 存储过程的接口(是PreparedStatement的子 接口)

ResultSet executeQuery()  执行存储过程的sql语句

 

ResultSet接口:结果集对象。 存储所有数据库查询的结果,用该对象进行数据遍历。

boolean next() : 把光标移动到下一行。如果下一行有数据,返回true,如果没有下一行数 据,返回false。

getXXX(列索引|列字段名称): 获取字段的数据

 

Jdbc编程步骤:

1、加载数据库驱动

Class.ForName(driveClass)

上面的driveClass就是数据库驱动类对应的类路径字符串,

 

2、通过DriverManager获取数据库的链接

DriverManager.getConnection(String url, Stirng user, String pass)

当使用DriverManager来获取链接,需要传入三个参数:分别是数据量的url、用户名、密码。

 

用此方法获取数据库的链接

 

技术分享
 1 public class DriverDemo {
 2     private static String url = "jdbc:mysql://localhost:3306/day20";
 3     //jdbc协议:mysql协议://主机地址:端口号/需要连接的数据库名称
 4     private static String user = "root";
 5     private static String password="root";
 6     
 7     public static void main(String[] args) throws Exception {
 8         /**
 9          * java程序连接mysql数据库
10          * 1.mysql数据库的主机地址
11          * 2.端口号
12          * 3.用户名
13          * 5.密码
14          * 6.需要连接的数据库
15          * 
16          * 需求:先使用java程序连接我们的数据库,需要一个连接对象Connection
17          */
18         conn3();
19     }
20 private static void conn3() throws Exception {
21         //注册驱动,我们发现mysql驱动程序的Driver实现类已经帮我们在静态代码块中注册好了驱动,
22         //我们在此时只需要将Driver实现类加载到我们的内存中,static代码块就会自动执行,我们的驱动也就自动注册了
23         //注册驱动
24         Class.forName("com.mysql.jdbc.Driver");
25         
26         //获取java连接数据库的对象
27         Connection conn = DriverManager.getConnection(url, user, password);
28         
29         //打印这个连接对象
30         System.out.println(conn);
31         
32     }
Class.ForName

 

 

 

 

 

3、通过Connection对象创建Statement对象,Connection创建Statement的方法如下三个:

createStatement()创建基本的Statement对象。

prepareStatement(String sql):根据传入的sql语句创建预编译的Statement对象。

prepareCall(String sql):根据传入的sql语句创建CallableStatement对象。

 

 

 

4、Statement执行SQL语句,Statement有三大方法来执行SQL语句:

execute:可以执行任何SQL语句,单比较麻烦

executeUpdate:可以执行DML、DDL语句。执行DML返回受影响的SQL语句行数,执行DDL返回0;

(create/alter/drop) DDL语句

 (insert/update/delete)DML语句

 

 

executeQuery:只能执行查询语句DQL,执行后返回代表查询结果的ResultSet对象

 

先创建基本的Statement对象。然后通过executeUpdate执行DML、DDL语句。

技术分享
 1 public class Demo {
 2     private static String url = "jdbc:mysql://localhost:3306/day19";
 3     private static String user = "root";
 4     private static String password = "root";
 5     
 6     public static void main(String[] args){
 7         Connection conn = null;
 8         Statement stmt = null;
 9         try {
10             //注册驱动
11             Class.forName("com.mysql.jdbc.Driver");
12             //通过驱动管理类获取数据库连接
13             conn = DriverManager.getConnection(url, user, password);
14             
15             //创建语句执行者
16             stmt = conn.createStatement();
17             //int executeUpdate(String sql)
18             //throws SQLException执行给定 SQL 语句,
19             //该语句可能为 INSERT、UPDATE 或 DELETE 语句,或者不返回任何内容的 SQL 语句(如 SQL DDL 语句)。
20             String sql = "CREATE TABLE student1("+
21                             "id INT,"+
22                             "NAME VARCHAR(20),"+
23                             "age INT"+
24                             ");";
25             
26             //使用语句执行者执行创建的sql语句
27             int count = stmt.executeUpdate(sql);
28             
29             //打印一下影响的结果
30             System.out.println(count);
31         } catch (Exception e) {
32             e.printStackTrace();
33             throw new RuntimeException();
34         }finally{
35             //释放资源
36             if (conn!=null) {
37                 try {
38                     conn.close();
39                 } catch (SQLException e) {
40                     // TODO Auto-generated catch block
41                     e.printStackTrace();
42                 }
43             }
44             
45             if (stmt!=null) {
46                 try {
47                     stmt.close();
48                 } catch (SQLException e) {
49                     // TODO Auto-generated catch block
50                     e.printStackTrace();
51                 }
52             }
53             
54         }    
55     }
56 
57 }
在day20数据库中创建一个学生表 技术分享
  1 public class Demo2 {
  2     private static String url = "jdbc:mysql://localhost:3306/day20";
  3     private static String user = "root";
  4     private static String password = "root";
  5     
  6     public static void main(String[] args) {
  7         testInsert();//给数据库添加一条记录
  8         testUpdate();//修改数据库中的一条数据
  9         testDelete();
 10     }
 11 
 12     private static void testDelete() {
 13 
 14         //需求:将刘德华改为岳云鹏
 15         Connection conn = null;
 16         Statement stmt = null;
 17         
 18         try{
 19             //2.获取连接对象
 20             conn  =JDBCUtil.getConn();
 21             //3.准备sql
 22             String sql = "DELETE FROM student WHERE id=1;";
 23             //4.获取语句执行者
 24             stmt = conn.createStatement();
 25             //5.发送兵长执行sql
 26             int count = stmt.executeUpdate(sql);
 27             //打印影响的行数
 28             System.out.println(count);
 29             
 30         }catch(Exception e){
 31             e.printStackTrace();
 32             throw new RuntimeException();
 33         }finally{
 34             JDBCUtil.close(conn, stmt, null);
 35         }
 36         
 37     
 38         
 39     }
 40 
 41     private static void testUpdate() {
 42         //需求:将刘德华改为岳云鹏
 43         Connection conn = null;
 44         Statement stmt = null;
 45         
 46         try{
 47             //1.注册驱动
 48             Class.forName("com.mysql.jdbc.Driver");
 49             //2.获取连接对象
 50             conn  =DriverManager.getConnection(url, user, password);
 51             //3.准备sql
 52             String sql = "UPDATE student SET NAME=‘岳云鹏‘ WHERE id=1;";
 53             //4.获取语句执行者
 54             stmt = conn.createStatement();
 55             //5.发送兵长执行sql
 56             int count = stmt.executeUpdate(sql);
 57             //打印影响的行数
 58             System.out.println(count);
 59             
 60         }catch(Exception e){
 61             e.printStackTrace();
 62             throw new RuntimeException();
 63         }finally{
 64             if (conn!=null) {
 65                 try {
 66                     conn.close();
 67                 } catch (SQLException e) {
 68                     // TODO Auto-generated catch block
 69                     e.printStackTrace();
 70                 }
 71             }
 72             
 73             if (stmt!=null) {
 74                 try {
 75                     stmt.close();
 76                 } catch (SQLException e) {
 77                     // TODO Auto-generated catch block
 78                     e.printStackTrace();
 79                 }
 80             }
 81         }
 82         
 83     }
 84 
 85     private static void testInsert() {
 86         //专门测试添加功能
 87         Connection conn = null;
 88         Statement stmt = null;
 89         try{
 90             //注册驱动
 91             Class.forName("com.mysql.jdbc.Driver");
 92             //获取连接
 93             conn = DriverManager.getConnection(url, user, password);
 94             //定义sql
 95             String sql = "INSERT INTO student VALUES(1,‘刘德华‘,50);";
 96             //获取语句执行者
 97             stmt = conn.createStatement();
 98             //使用语句执行者发送并执行sql语句,并返回影响的行数
 99             int count = stmt.executeUpdate(sql);
100             System.out.println(count);
101             
102         }catch(Exception e){
103             e.printStackTrace();
104             throw new RuntimeException();
105         }finally{
106             //释放资源
107             if (conn!=null) {
108                 try {
109                     conn.close();
110                 } catch (SQLException e) {
111                     // TODO Auto-generated catch block
112                     e.printStackTrace();
113                 }
114             }
115             
116             if (stmt!=null) {
117                 try {
118                     stmt.close();
119                 } catch (SQLException e) {
120                     // TODO Auto-generated catch block
121                     e.printStackTrace();
122                 }
123             }
124         }
125         
126     }
127 
128 }
对上个表格进行增改删操作

 

为了使程序员对数据库的操作方便可将注册驱动,获取连接数据库对象,释放资源等操作抓取成功一个类

技术分享
 1 package com.jdbc.Util;
 2 
 3 import java.sql.Connection;
 4 import java.sql.DriverManager;
 5 import java.sql.ResultSet;
 6 import java.sql.SQLException;
 7 import java.sql.Statement;
 8 
 9 public class JDBCUtil {
10     private static String url = "jdbc:mysql://localhost:3306/day20";
11     private static String user = "root";
12     private static String password = "root";
13     
14     static{
15         //随着类的加载而夹在
16         try {
17             Class.forName("com.mysql.jdbc.Driver");
18         } catch (ClassNotFoundException e) {
19             // TODO Auto-generated catch block
20             e.printStackTrace();
21         }
22     }
23     
24     //获取连接
25     public static Connection getConn(){
26         //注册驱动
27         try {
28             Connection conn = DriverManager.getConnection(url, user, password);
29             return conn;        
30         } catch (Exception e) {
31             // TODO Auto-generated catch block
32             e.printStackTrace();
33             throw new RuntimeException();
34         }
35         
36     }
37     
38     
39     //释放资源
40     public static void close(Connection conn,Statement stmt,ResultSet rs){
41         if (conn!=null) {
42             try {
43                 conn.close();
44             } catch (SQLException e) {
45                 // TODO Auto-generated catch block
46                 e.printStackTrace();
47             }
48         }
49         
50         if (stmt!=null) {
51             try {
52                 stmt.close();
53             } catch (SQLException e) {
54                 // TODO Auto-generated catch block
55                 e.printStackTrace();
56             }
57         }
58         
59         if (rs!=null) {
60             try {
61                 rs.close();
62             } catch (SQLException e) {
63                 // TODO Auto-generated catch block
64                 e.printStackTrace();
65             }
66         }
67     }
68 
69 }
JDBCUtil类

 

 

通过executeQuery执行DQL语句,利用next()方法判断是否有下一行数据

技术分享
 1 public class Demo3 {
 2     
 3     public static void main(String[] args) {
 4         //定义一个连接对象和一个语句执行者
 5         Connection conn  =null;
 6         Statement stmt = null;
 7         ResultSet rs = null;
 8         try{
 9             conn = JDBCUtil.getConn();
10             //定义sql
11             String sql = "SELECT * FROM student;";
12             //获取语句执行者对象
13             stmt = conn.createStatement();
14             //执行DQL查询语句
15             //ResultSet executeQuery(String sql)
16             //throws SQLException执行给定的 SQL 语句,该语句返回单个 ResultSet 对象。
17             rs = stmt.executeQuery(sql);
18             //ResultSet是一个结果集
19             /*//判断有没有下一行数据
20             if (rs.next()) {
21                 //说明有下一行数数据
22                 System.out.println(rs.getInt(1)+"--"+rs.getString(2)+"--"+rs.getInt(3));
23             }
24             
25             if (rs.next()) {
26                 //说明有下一行数数据
27                 System.out.println(rs.getInt(1)+"--"+rs.getString(2)+"--"+rs.getInt(3));
28             }
29             
30             if (rs.next()) {
31                 //说明有下一行数数据
32                 System.out.println(rs.getInt(1)+"--"+rs.getString(2)+"--"+rs.getInt(3));
33             }
34             
35             if (rs.next()) {
36                 //说明有下一行数数据
37                 System.out.println(rs.getInt(1)+"--"+rs.getString(2)+"--"+rs.getInt(3));
38             }
39             
40             if (rs.next()) {
41                 //说明有下一行数数据
42                 System.out.println(rs.getInt(1)+"--"+rs.getString(2)+"--"+rs.getInt(3));
43             }*/
44             
45             //使用while循环改进上面的代码,获取字段的数据(字段类型+列号)
46 /*            while (rs.next()) {
47                 System.out.println(rs.getInt(1)+"--"+rs.getString(2)+"--"+rs.getInt(3));
48             }*/
49             
50             //使用字段名称获取字段的每一个数据
51             while (rs.next()) {
52                 //当我们使用字段名称去获取字段数据的时候,字段名称是不区分大小写
53                 System.out.println(rs.getInt("ID")+"--"+rs.getString("NAME")+"--"+rs.getInt("AGE"));
54             }
55             
56             
57             
58         }catch(Exception e){
59             e.printStackTrace();
60         }finally{
61             JDBCUtil.close(conn, stmt, rs);
62         }
63         
64     }
65 
66 }
DQL语句

 

还可以通过

PreparedStatement prepareStatement(String sql)  

定义预编译sql语句对象,并通过setInt()方法 发送参数并执行sql语句。

技术分享
  1 package com.jdbc.c_preparedstatement;
  2 
  3 import java.sql.Connection;
  4 import java.sql.PreparedStatement;
  5 import java.sql.ResultSet;
  6 
  7 import com.jdbc.Util.JDBCUtil;
  8 
  9 public class Demo {
 10     public static void main(String[] args) {
 11         testInsert();
 12         testUpdate();
 13         testDelete();
 14         testSelect();
 15     }
 16 
 17     private static void testSelect() {
 18         Connection conn  =null;
 19         PreparedStatement stmt = null;
 20         ResultSet rs = null;
 21         try{
 22             //获取连接
 23             conn  = JDBCUtil.getConn();
 24             //定义预编译sql
 25             String sql = "SELECT * FROM student WHERE id=?;";
 26             //获取预编译sql对象
 27             stmt = conn.prepareStatement(sql);
 28             //给问好赋值
 29             stmt.setInt(1, 3);
 30             //发送参数并执行sql语句
 31             //ResultSet executeQuery()throws SQLException在此 
 32             //PreparedStatement 对象中执行 SQL 查询,并返回该查询生成的 ResultSet 对象。
 33             rs = stmt.executeQuery();
 34             //遍历结果集
 35             while (rs.next()) {
 36                 System.out.println(rs.getInt("id")+"--"+rs.getString("name")+"--"+rs.getInt("age"));
 37             }
 38             
 39         }catch(Exception e){
 40             e.printStackTrace();
 41         }finally{
 42             JDBCUtil.close(conn, stmt, rs);
 43         }
 44 
 45     
 46     }
 47 
 48     private static void testDelete() {
 49 
 50         Connection conn  =null;
 51         PreparedStatement stmt = null;
 52         
 53         try{
 54             conn = JDBCUtil.getConn();
 55             //写一个参数化的sql
 56             String sql = "DELETE FROM student WHERE id=?;";
 57             //获取预编译的sql对象
 58             stmt = conn.prepareStatement(sql);
 59             //给?设置参数
 60             stmt.setInt(1, 2);
 61             //发送参数并执行sql
 62             int count = stmt.executeUpdate();
 63             System.out.println(count);
 64         }catch(Exception e){
 65             e.printStackTrace();
 66         }finally{
 67             JDBCUtil.close(conn, stmt, null);
 68         }
 69 
 70     }
 71 
 72     private static void testUpdate() {
 73         Connection conn  =null;
 74         PreparedStatement stmt = null;
 75         
 76         try{
 77             conn = JDBCUtil.getConn();
 78             String sql = "UPDATE student SET NAME=? WHERE id=?;";
 79             //执行预编译sql
 80             stmt = conn.prepareStatement(sql);
 81             //给?赋值
 82             stmt.setString(1, "张学友");
 83             stmt.setInt(2, 5);
 84             //发送参数到数据库服务器,并执行sql,将执行结果返回
 85             int count = stmt.executeUpdate();
 86             System.out.println(count);
 87         }catch(Exception e){
 88             e.printStackTrace();
 89         }finally{
 90             JDBCUtil.close(conn, stmt, null);
 91         }
 92         
 93         
 94     }
 95 
 96     private static void testInsert() {
 97         //定义连接对象和预编译sql对象
 98         Connection conn  = null;
 99         PreparedStatement stmt = null;
100         
101         try{
102             //获取连接
103             conn = JDBCUtil.getConn();
104             //PreparedStatement prepareStatement(String sql)
105             //throws SQLException创建一个 PreparedStatement 对象来将参数化的 SQL 语句发送到数据库。
106             String sql = "INSERT INTO student VALUES(?,?,?);";//参数化的sql,动态sql
107             stmt = conn.prepareStatement(sql);//
                        
                    

人气教程排行