09-JDBC

如何通过Java操作数据库

在这里插入图片描述
三大厂商实现数据库的底层代码肯定不一样(不然也不会开发三套数据库)。在没有JDBC之前,如果想开发人员是面向MySQL开发的,但是一段时间后需要迁移到Oracle数据库,那么原来编写的数据库代码都不能用了。JDBC的作用是提供开发人员操作数据库的接口,然后各大厂商实现接口,开发人员只需要面向JDBC接口编程。
*属于JavaSE的一部分:有JDK就可以用

JDBC使用步骤

1.将Driver(驱动程序)注册到DriverManager(驱动程序管理者)
比如用的驱动是mySQL驱动(lib目录下的mysql-connector-java包),就需要这个步骤将驱动注册到驱动程序管理者上进行管理。

Class.forName("com.mysql.jdbc.Driver");

上述代码是类装载代码,装载一个类,会执行这个类中的静态代码块(合理利用源码资源)。com.mysql.jdbc.Driver类源码如下:
在这里插入图片描述
java.sql.DriverManager.regiserDriver(new Driver());达到了注册驱动的效果。

2.利用DriverManager创建Connection(数据库连接)
上一步注册好了,就已经知道了要用哪一个数据库。这一步可以用JDBC中的DriverManager来创建连接。

DriverManager.getConnection(url:"jdbc:mysql://localhost:3306/xmg",usename:"root",password:"root");

在这里插入图片描述
3.利用Connection创建Statement(语句)

Statement stmt=conn.createStatement();

4.利用

stmt.execute(sql:"");

5.关闭资源(关闭Statement、Connection)

stmt.close();
conn.close();

进一步,可以抽取数据库相关信息:
在这里插入图片描述

JDBC版本

在这里插入图片描述
我们只需要将供应商的Jar放在类路径中,然后DriverManager就可以自动检测并加载驱动程序:所以Class.forName(driverClassName);不用写了,程序会自动干这件事情。

private static void test2() {
        // 0.数据库相关的信息

        // JDK7开始,try-with-resources

        try {
            // Class.forName(driverClassName);
            // DriverManager.registerDriver(new Driver());
            //try-with-resource语句
            try (Connection conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
                 Statement stmt = conn.createStatement()) {
                stmt.execute("UPDATE student SET age = 100 WHERE id = 1");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

Statement的常见API

在这里插入图片描述

结果集resultSet

在这里插入图片描述

 private static void test4() throws Exception {
        try (Connection conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
            Statement stmt = conn.createStatement()) {
            String sql = "SELECT id myId, name myName FROM student";
            ResultSet rs = stmt.executeQuery(sql);  // 4:编译、解析、优化、执行
            while (rs.next()) {
                System.out.println(rs.getInt("myId"));
                System.out.println(rs.getString("myName"));
                System.out.println("---------------------");
            }
        }
    }

依赖注入与PreparedStatement

在这里插入图片描述
没使用PreparedStatement:

  Statement stmt = conn.createStatement()) {
            String sql = "SELECT * FROM user WHERE username = '" + username + "' AND password = '" + password + "'";
            System.out.println(sql);
            ResultSet rs = stmt.executeQuery(sql);

使用PreparedStatement:

String sql = "SELECT * FROM user WHERE username = ? AND password = ?";
        try (Connection conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
             PreparedStatement pstmt = conn.prepareStatement(sql)) { // 3:编译、解析、优化
            // 设置参数值
            pstmt.setString(1, username);
            pstmt.setString(2, password);
            // 执行SQL语句
            ResultSet rs = pstmt.executeQuery(); // 执行
            if (rs.next()) {
                System.out.println("登录成功");
            } else {
                System.out.println("登录失败,用户名或密码不正确");
            }
        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值