【JDBC】学习路径2-编写第一个JDBC程序

Posted on 2022-05-20 13:27  罗芭Remoo  阅读(76)  评论(0编辑  收藏  举报

第一章:导入jar包

在未安装MySQL数据库的请务必安装,安装教程:【MySQL】从入门到掌握2-下载安装

connector/J下载地址:https://dev.mysql.com/downloads/connector/j/

选择对应平台下载即可。

Mac端请直接选择Platform Independent

意思是“平台无关”,全平台通用。

 

下载完后解压包如下。

 

在IDEA中,选择项目结构,点击Libraries导入刚才下载的文件。

然后就可以了。

 

第二章:注册连接数据库


1-创建(测试用)数据库

连接数据库之前,先创建一个数据库。

打开控制台(终端),mysql -uroot -p   

进入数据库后创建数据库:create database jdbc_01;

创建一张表格,一会用做测试:create table user(id int not null auto_increment,username varchar(45),password varchar(45),primary key(id));

插入几条数据:insert into user(username,password) values('remoo1','1234');

insert into user(username,password) values('remoo2','121234');

insert into user(username,password) values('BruceLiu','882200');

insert into user(username,password) values('Mariana','122344');


2-注册连接数据库

回到IDEA,

键入代码:

import java.sql.*;

public class demo01 {
    public static void main(String[] args) {
        try {
            //注册驱动,使用该驱动连接数据库
            Class.forName("com.mysql.jdbc.Driver");

            //输入我们刚才创建的数据库名称
            //String url = "jdbc:mysql://localhost:3306/jdbc_01";
            String url = "jdbc:mysql://localhost:3306/jdbc_01?useUnicode=true&characterEncoding=UTF8";

            //数据库用户名和密码
            String user = "root";
            String password = "88888888";

            //与数据库建立连接
            Connection con = DriverManager.getConnection(url,user,password);

            //SQL语句执行机
            Statement stmt = con.createStatement();
            //结果集合
            ResultSet rs;

            //通过语句执行机stmt执行SQL的查询命令,返回到结果集rs中
            rs = stmt.executeQuery("select * from user");

            //从rs结果集合中获取信息
            while(rs.next()){
                int r_id = rs.getInt(1);
                String r_username = rs.getString(2);
                String r_password = rs.getString(3);
                System.out.println(r_id+"\t用户名:"+r_username+"\t密码:"+r_password);
            }

            //依次关闭,先关闭最后启动的
            rs.close();
            stmt.close();
            con.close();


        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

主要注意的是:

  1. 结果集合rs 中,next()方法相当于移动指针,不会读取数据,只会查看是否在新的指针位置中是否有数据。
  2. 这个ResultSet和iterator遍历器有相似之处。
  3. 调用结果集合rs的getInt()方法的时候,我们不仅可以直接传递columnIndex,还可以直接传递column的名字,如rs.getInt("username")

 

输入返回:

 

和控制台(终端)的结果一样。

3-异常抛出

Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.

意思是com.mysql.jdbc.Driver已经被弃用了,改为com.mysql.cj.jdbc.Driver即可。

 

第三章:优化JDBC程序

在当前位置调用close()关闭rs,stmt,con是不合理的。

如果上面的语句出现了异常,那么rs,stmt,con就不会关闭了。

把他们放在finally中。

并且把rs等对象的初始化放在try语句块的外部。

并且在关闭前查看一下对象是非为空。

import java.sql.*;

public class demo01 {
    public static void main(String[] args) {
        //与数据库建立连接
        Connection con = null;
        //SQL语句执行机
        Statement stmt = null;
        //结果集合
        ResultSet rs = null;
        try {
            //注册驱动,使用该驱动连接数据库
//            Class.forName("com.mysql.jdbc.Driver");
            Class.forName("com.mysql.cj.jdbc.Driver");

            //输入我们刚才创建的数据库名称
            //String url = "jdbc:mysql://localhost:3306/jdbc_01";
            String url = "jdbc:mysql://localhost:3306/jdbc_01?useUnicode=true&characterEncoding=UTF8";

            //数据库用户名和密码
            String user = "root";
            String password = "88888888";

            //与数据库建立连接
            con = DriverManager.getConnection(url, user, password);

            //SQL语句执行机
            stmt = con.createStatement();


            //通过语句执行机stmt执行SQL的查询命令,返回到结果集rs中
            rs = stmt.executeQuery("select * from user");

            //从rs结果集合中获取信息
            while (rs.next()) {
                int r_id = rs.getInt(1);
                String r_username = rs.getString(2);
                String r_password = rs.getString(3);
                System.out.println(r_id + "\t用户名:" + r_username + "\t密码:" + r_password);
            }

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //依次关闭,先关闭最后启动的
            try {
                if (rs != null)
                    rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            try {
                if (stmt != null)
                    stmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            try {
                if (con != null)
                    con.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}