MySQL学习笔记(3)--JDBC初体验

JDBC创建流程
1.加载驱动
2.获取连接
3.处理数据
4.释放资源


数据库环境已经搭建完成
在数据库中存在名称为 mydb 的数据库,其中存在一个user表,存放了一些信息,具体如下:

这里写图片描述


一 加载驱动

方法1:

DriverManager.registerDriver(new Driver())

此方法可以加载驱动


package com.mysql.cj.jdbc;
public class Driver extends NonRegisteringDriver implements java.sql.Driver {
    public Driver() throws SQLException {
    }

    static {
        try {
            DriverManager.registerDriver(new Driver());
        } catch (SQLException var1) {
            throw new RuntimeException("Can't register driver!");
        }
    }
}

但是使用此方法的时候会产生弊端

这里写图片描述

方法缺点:

1.内存中会产生两个Driver对象,一次是Driver类加载的时候通过静态代码块创建的,还有一个是方法本身创建的。这样虽然没有错误,但是会造成内存浪费。

2.new Driver() 对象是使用MySQL定义的方法调用的,一旦脱离MySQL的jar包,会导致代码失效。

package com.mysql.cj.jdbc;

解决办法:直接加载类而不创建对象,如何解决?
利用反射即可

方法 2:

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

通过此方法也可以注册驱动,不会导致驱动对象在内存中重复出现,并且采用此种方式,程序仅仅只需要一个字符串,不需要依赖具体的驱动,使程序的灵活性更高。


二 获取连接

获取连接的方法是:

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

此方法三个参数,分别是协议、用户名和密码。
方法的返回值类型为Connection对象。
关于用户名和密码是指数据库的用户名和密码;

url:
统一资源定位符。具体可参照
URL_百度百科

String url = "jdbc:mysql://localhost:3306/mydb";  // 5的版本

上面的代码中

jdbc: 是JDBC连接协议
mysql:// 是mysql数据库连接协议,JDBC子协议
localhost:3306 主机和端口
mydb 数据库
MySQL驱动版本5.xxx只需要上述内容即可。
升级到8之后,需要在原来的基础上增加参数列表参数=值&参数=值)。
增加服务时间区域和字符集

String url ="jdbc:mysql://localhost:3306/mydb?serverTimezone=UTC&characterEncoding=utf-8";  //8的版本

获取连接的代码

String url = "jdbc:mysql://localhost:3306/mydb?serverTimezone=UTC&characterEncoding=utf-8";  // 8的版本
Connection conn = DriverManager.getConnection(url, "root", "123456");

完成以上代码即可获取数据库和Java程序之间的连接,接下来就可以通过Java程序对数据库中的内容进行操作了


三 处理数据

1 首先需要得到要对数据库执行的操作的方法
操作方法分为两种
1.1 对数据库数据进行查询操作,即:采用select语句

String sql = "select * from user;";

1.2 对数据库数据进行更新操作

String sql = "insert into user values(null, 'xiaoqi', '123', '[email protected]');";

2 有了操作如何让操作进行运行呢?
2.1首先需要一个执行对象
Java中的Connection类中提供方法,通过Connection对象来获取一个执行对象

Statement stmt = conn.createStatement();

statement执行对象的作用
作用1:将Java字符串转换成SQL指令
作用2:将SQL指令交给MySQL底层执行

2.2有了执行对象以后就可以执行对数据库的操作命令了
根据方法返回结果的不同可采用三种方法操作数据库的数据

2.2.1 executeQuery(sql) – 返回值类型为ResultSet集合
此方法一般用于对数据进行查询(select)操作
源码:

ResultSet executeQuery(String sql) throws SQLException;

执行代码:

ResultSet rs = stmt.executeQuery(sql);

此方法的结果是一个ResultSet集合,需要通过遍历集合的方法来查看结果

next() 判断数据,结果为boolean类型。判断数据库是否下一行存在数据

ResultSet既然用于封装执行结果的,所以该对象提供的大部分方法都是用于获取数据的get方法

获取任意类型的数据
getObject(int index) – 通过光标位置获取
getObject(string columnName) – 通过指定列名获取

获取指定类型的数据,参考下表:
这里写图片描述

代码演示

while (rs.next()) {
    int id = rs.getInt("id");
    String username = rs.getString("username");
    String password = rs.getString("password");
    String email = rs.getString("email");
    System.out.println(id + " : " + username + " : " + password + " : " + email);
}

2.2.2 executeUpdate(sql) – 返回值类型为int类型

此方法一般用于对数据库进行更新(insert、delete、update)操作
源码:

int executeUpdate(String sql) throws SQLException;

执行代码

int count = stmt.executeUpdate(sql);

此方法返回的是int类型整数,表示的是对数据库进行修改的行数数量

代码演示

String sql = "update user set username='赵六', email='[email protected]' where id = 4;";
        stmt = conn.createStatement();
        int count = stmt.executeUpdate(sql);
        System.out.println("count = " + count);

2.2.3 execute(sql) – 返回值类型为boolean类型
使用此方法一般分为两种情况
第一种: 执行一个你已知返回多个结果会的存储过程,即:只需要执行代码,结果已知
第二种: 动态执行的未知SQL字符串。

源码:

boolean execute(String sql) throws SQLException;

此方法的返回值为true表示对数据库的进行查询操作
方法的返回值为false表示的是对数据库进行更改操作

获取连接
代码演示(1):

String sql = "select * from user;";
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);
while (rs.next()) {
    int id = rs.getInt("id");
    String username = rs.getString("username");
    String password = rs.getString("password");
    String email = rs.getString("email");
    System.out.println(id + " : " + username + " : " + password + " : " + email);
}

代码演示(2):

String sql = "update user set username='赵六', email='[email protected]' where id = 4;";
Statement stmt = conn.createStatement();
int count = stmt.executeUpdate(sql);
System.out.println("count = " + count);

四 释放资源

dbc程序运行完后,切记要释放程序在运行过程中,创建的那些与数据库进行交互的对象,这些对象通常是ResultSet, StatementConnection对象。
特别是Connection对象,它是非常稀有的资源,用完后必须马上释放,如果Connection不能及时、正确的关闭,极易导致系统宕机。
Connection的使用原则是尽量晚创建,尽量早的释放。

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

全部代码:

    @Test
    public void test3() throws Exception {
        // 1. 加载驱动
        Class.forName("com.mysql.cj.jdbc.Driver");

        // 2. 建立连接
        String url = "jdbc:mysql://localhost:3306/day04?serverTimezone=UTC&characterEncoding=utf-8";
        Connection conn = DriverManager.getConnection(url, "root", "123456");

        // 3. 操作数据
        // String sql = "insert into user values(null,'zhaoliu','123','[email protected]');";
        // String sql = "update user set username = '赵六', password = '123', email = '[email protected]' where id = 4;";
        String sql = "delete from user where username = '赵六';";
        Statement stmt = conn.createStatement();
        int updateCount = stmt.executeUpdate(sql);
        System.out.println("updateCount = " + updateCount);

        // 4. 释放资源
        stmt.close();
        conn.close();
    }

猜你喜欢

转载自blog.csdn.net/zyrdfly/article/details/82690030
今日推荐