JDBC(B站动力节点老杜)自我总结复习

1.JDBC是什么?

简而言之,就是一个用来连接数据库的工具。JDBC是SUN公司实现的一套接口,通过这个接口,我们可以访问任何一种数据库,而不用每访问一个数据库就实现该数据库的代码,那样太麻烦,也太乱了。

JDBC是由SUN公司定义的,那么我们连哪个数据库它是不知道的,需要我们自己指定,也就是说我们这边准备好了,剩下的该交给数据库方来做,于是,我们只要引入一个实现了驱动的jar包,就可以通过操纵jdbc完成对数据库的各项操作。

开发准备:先去mysql官网下载一个jdbc驱动。(会maven的就不用了,直接导入下面的依赖就行)

 <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.25</version>
        </dependency>

2. JDBC六个步骤

注册驱动

驱动是需要注册的,也就是告诉驱动一声,我们要用它了。这里有几种实现方式

第一种:通过DriverManager的注册方法。
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
不需要返回值,简单明了。
    
第二种:学过反射的,可以直接通过反射。
Class.forName("com.mysql.jdbc.Driver");

好了驱动注册完了,接下来,我们知道要用谁家的数据库了,那就要用账号密码去登陆一下,也就是去建立连接。

建立连接

我们要用到刚才的Driver Manager,毕竟是一个驱动管理类。通过它的建立连接方法

 Connection conn = DriverManager.getConnection(url, username, password);

因为会返回一个Connection类型的对象,也就是连接对象。其中要填3个参数:url、username、password

可以通过自定义字符串的方式。

String url = "jdbc:mysql://localhost:3306/ssm(这里跟上你的数据库名字就好了。只能操纵一个数据库)
String username = "root";
String password = "123";

解释一下url的内容:

jdbc:mysql是固定格式,也就是jdbc连接的是mysql数据库

localhost 是本机地址,连接自己电脑上的mysql服务器。

3306是端口号,mysql默认端口号。

ssm 这里是我的其中一个数据库名。因为mysql里可以有很多数据库,每个库里可以有很多表。

(mysql好比一个大工厂,里面有好多厂房,你要具体选择一个厂房进去。)

也有其他的获取数据的方式:比如使用资源绑定器

(先创建一个 jdbc.properties文件)

url=jdbc:mysql://localhost:3306/ssm
user=root
password=123

然后使用资源绑定器绑定属性配置文件

ResourceBundle jdbc = ResourceBundle.getBundle("jdbc");
String url = jdbc.getString("url");
String user= jdbc.getString("user");
String password = jdbc.getString("password");

既然建立上了连接,下一步就是获得这个具体的数据操作对象

获取数据库操作对象

Statement stm = conn.createStatement();

通过Statement的成员方法来执行sql语句。查询类的还要拿一个类型来接收一下。

执行sql语句

ResultSet rs = stm.executeQuery("select * from student");

处理查询结果集

只有上面的sql语句是查询的时候,才用得到这一步,但数据库最常使用的就是查询了,不是吗?

while (rs.next()) {
    
    
    System.out.println("Name :" + rs.getString("name"));
}

rs.getString("这里填数据库中的表的列名。想要什么结果,就填什么列名");

什么都做完了,当然要释放资源了。一直开着那可不就浪费,还会出不知名的错误。

释放资源

一定要按照从小到大的顺序关闭,rs是stm创造的,stm是conn创造的。有可能出异常,我建议整个jdbc写在try catch语句中。

rs.close();
stm.close();
conn.close();

3. 示例:

package com.bjpowernode.JDBC;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ResourceBundle;

public class Example02 {
    
    
    public static void main(String[] args) {
    
    
        Connection conn = null;
        Statement stm = null;
        ResultSet rs = null;
        //获取参数
        ResourceBundle jdbc = ResourceBundle.getBundle("jdbc");
        String url = jdbc.getString("url");
        String user = jdbc.getString("user");
        String passwd = jdbc.getString("password");

        try {
    
    
            //注册驱动
            Class.forName("com.mysql.jdbc.Driver");
            //建立连接
            conn = DriverManager.getConnection(url, user, passwd);
            //创建数据库操作对象
            stm = conn.createStatement();
            //sql语句
            String sql = "select * from student";
            rs = stm.executeQuery(sql);
            //处理查询结果集
            while (rs.next()) {
    
    
                System.out.println("name : " + rs.getString("name"));
                System.out.println("email : " + rs.getString("email"));
            }

        } catch (Exception e) {
    
    
            e.printStackTrace();
        } finally {
    
    
            if (rs != null) {
    
    
                try {
    
    
                    rs.close();
                } catch (Exception e) {
    
    
                    e.printStackTrace();
                }
            }
            if (stm != null) {
    
    
                try {
    
    
                    stm.close();
                } catch (Exception e) {
    
    
                    e.printStackTrace();
                }
            }
            if (conn != null) {
    
    
                try {
    
    
                    conn.close();
                } catch (Exception e) {
    
    
                    e.printStackTrace();
                }
            }
        }
    }
}

猜你喜欢

转载自blog.csdn.net/qq_45022687/article/details/119463442
今日推荐