Day2:JDBC的使用

安装MySQL

可以参考前一篇日志
另外安装SQLyog,运行安装包,一路next即可。

创建数据库

  1. 创建数据库
    首先打开SQLyog,创建新连接,用户名和密码是安装数据库时所填写的。
    1-1
    在界面左侧空白处右键选择创建数据库,或者上方菜单栏选择数据库 ->创建数据库,再或者使用快捷键 Ctrl + D 进行数据库的创建,这里名称为user,另外注意选择字符集和排序规则。
    1-2
  2. 创建表
    选中所创建的数据库中的项,右键,选择创建表
    1-3
    新表名为userinfo,字符集和核对与数据库相同,为表添加三列,其中id为主键且设为自增,具体设置如下,最后点击保存。
    1-4
  3. 加入数据
    表创建完成之后,选择打开表。1-5
    添加一行数据,这里只需加入用户名和密码即可,id自动生成,添加后点击保存更改。
    1-6

JDBC编程

前期准备

  1. 创建项目
    打开IDEA,创建项目Test,在src目录下新建com.zhongruan包。
    2-1
  2. 导入jar包
    在根目录创建lib包,将mysql-connector-java-5.1.36.jar文件复制到其中。
    2-2
    选中添加的包,右键,点击 Add as Library… 将包导入。
  3. 在com.zhongruan包下创建Test类,开始项目。

具体步骤

  1. 加载驱动
Class.forName("com.mysql.jdbc.Driver");

此处会抛出异常,可以将其捕获或者抛出,下面类似不再赘述,完整代码后面给出。

  1. 创建连接
connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/user?" +
                    "useSSL=true&characterEncoding=utf-8&user=root&password=123");

其中,用户名和密码根据之前数据库的配置进行填写。

  1. 写sql
    例如查询之前的userinfo表
String sql = "select * from userinfo";
  1. 得到statement对象
PreparedStatement statement = connection.prepareStatement(sql);
  1. 执行sql得到结果集
ResultSet rs = statement.executeQuery();
  1. 处理结果集
while (rs.next()) {
    System.out.println(rs.getInt(1));
    System.out.println(rs.getString(2));
    System.out.println(rs.getString(3));
}
  1. 关闭资源
    结合实际情况,考虑到可能出现异常,因此将资源的关闭写在finally块中。此处给出全部代码。
package com.zhongruan;
import java.sql.*;
public class Test {
    public static void main(String[] args) {
        ResultSet rs = null;
        PreparedStatement statement = null;
        Connection connection = null;
        try {
            // 1.加载驱动
            Class.forName("com.mysql.jdbc.Driver");
            // 2.创建连接
            connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/user?" +
                    "useSSL=true&characterEncoding=utf-8&user=root&password=123");
            System.out.println("创建连接成功");
            // 3.写sql
            String sql = "select * from userinfo";
            // 4.得到statement对象
            statement = connection.prepareStatement(sql);
            // 5.执行sql得到结果集
            rs = statement.executeQuery();
            // 6.处理结果集
            while (rs.next()) {
                System.out.println(rs.getInt(1));
                System.out.println(rs.getString(2));
                System.out.println(rs.getString(3));
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 7.关闭资源
            if (rs != null) {
                try {
                    rs.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (statement != null) {
                try {
                    statement.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (connection != null) {
                try {
                    connection.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

代码封装

  1. 封装数据库连接和资源的关闭
    在添加插入、更新、删除功能后,会有大量重复代码。首先对数据库连接和资源的关闭进行封装。在com.zhongruan目录下创建util包,在其中创建DBUtil类,在此类中实现数据库连接和资源的关闭。
package com.zhongruan.util;
import java.sql.*;
public class DBUtil {
    public static Connection getConnection() {
        Connection connection = null;
        try {
            // 加载驱动
            Class.forName("com.mysql.jdbc.Driver");
            // 创建连接
            connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/user?" +
                    "useSSL=true&characterEncoding=utf-8&user=root&password=123");
        } catch (Exception e) {
            e.printStackTrace();
        }
        return connection;
    }
    public static void close(ResultSet rs, Statement statement, Connection connection) {
        // 关闭资源
        if (rs != null) {
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (statement != null) {
            try {
                statement.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (connection != null) {
            try {
                connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

封装之后,使用如下的方法进行连接和关闭连接:

try {
    connection = DBUtil.getConnection();
    // ...
    }
} catch (Exception e) {
    e.printStackTrace();
} finally {
    DBUtil.close(rs, statement, connection);
}
  1. 添加实体类
    在com.zhongruan目录下添加bean包,在其中创建UserInfo类保存用户信息。同时添加get/set方法,toString方法。
package com.zhongruan.bean;
public class UserInfo {
    private int id;
    private String username;
    private String password;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    @Override
    public String toString() {
        return "UserInfo{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

之后使用如下的方法保存数据库中读取的信息:

List<UserInfo> list = new ArrayList<>();
try {
    // ...
    // 执行sql得到结果集
    rs = statement.executeQuery();
    // 处理结果集
    while (rs.next()) {
        UserInfo userInfo = new UserInfo();
        userInfo.setId(rs.getInt(1));
        userInfo.setUsername(rs.getString(2));
        userInfo.setPassword(rs.getString(3));
        list.add(userInfo);
    }
} catch (Exception e) {
    e.printStackTrace();
} 
return list;
  1. 抽取数据库操作
    在com.zhongruan目录下添加dao包,在其中创建UserInfoDao类保存对表userinfo的操作。
public class UserInfoDao {
    public List<UserInfo> findAll() {
        // 查询操作
        // ...
    }

    public void add(UserInfo userInfo){
        // 插入操作
        // ...
    }
}

在Test类中调用如下:

public class Test {
    public static void main(String[] args) {
        UserInfoDao userInfoDao = new UserInfoDao();
        List<UserInfo> list = userInfoDao.findAll();
        System.out.println(list);
    }
}

增删改查

将删除、修改功能加至UserInfoDao中。

public class UserInfoDao {
    public List<UserInfo> findAll() {
        ResultSet rs = null;
        PreparedStatement statement = null;
        Connection connection = null;
        List<UserInfo> list = new ArrayList<>();
        try {
            // 1.加载驱动
            // 2.创建连接
            connection = DBUtil.getConnection();
            System.out.println("创建连接成功");
            // 3.写sql
            String sql = "select * from userinfo";
            // 4.得到statement对象
            statement = connection.prepareStatement(sql);
            // 5.执行sql得到结果集
            rs = statement.executeQuery();
            // 6.处理结果集
            while (rs.next()) {
                UserInfo userInfo = new UserInfo();
                userInfo.setId(rs.getInt(1));
                userInfo.setUsername(rs.getString(2));
                userInfo.setPassword(rs.getString(3));
                list.add(userInfo);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 7.关闭资源
            DBUtil.close(rs, statement, connection);
        }
        return list;
    }

    public void add() {
        PreparedStatement statement = null;
        Connection connection = null;
        try {
            connection = DBUtil.getConnection();
            String sql = "insert into userinfo(username,password) values(?,?)";
            statement = connection.prepareStatement(sql);
            statement.setString(1, "hahaha");
            statement.setString(2, "1234");
            statement.executeUpdate();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 关闭资源
            DBUtil.close(null, statement, connection);
        }
    }

    public void del() {
        PreparedStatement statement = null;
        Connection connection = null;
        try {
            connection = DBUtil.getConnection();
            String sql = "delete from userinfo where username=?";
            statement = connection.prepareStatement(sql);
            statement.setString(1, "hahaha");
            statement.executeUpdate();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            DBUtil.close(null, statement, connection);
        }
    }

    public void update() {
        PreparedStatement statement = null;
        Connection connection = null;
        try {
            connection = DBUtil.getConnection();
            String sql = "update userinfo set password=? where id=?";
            statement = connection.prepareStatement(sql);
            statement.setString(1, "1234567");
            statement.setInt(2, 2);
            statement.executeUpdate();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            DBUtil.close(null, statement, connection);
        }
    }
}

最后,附上完整代码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值