我是靠谱客的博主 烂漫板凳,最近开发中收集的这篇文章主要介绍实验四 JDBC 访问数据库,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、实验目的:

理解 JDBC 的工作原理,掌握 JDBC 访问数据库;
掌握常见数据库 MYSQL ;

二、实验环境:

  1. 理解 JDBC 的应用。
  2. 掌握 JDBC 的编程接口。
  3. 熟练使用 IDEA 开发简单应用

三、实验内容:

(写出主要的内容)
现在使用 JDBC 写一个简单的小程序,主要是使用 JDBC 连接 MySQL 数据库,然后对数据库进行一些基本的增删改查操作。

1 、设计数据库表

先设计一个数据库表,用于保存用户信息,建表语句如下:

CREATE DATABASE jdbc

CREATE TABLE tbl_user_info
(
id INT NOT NULL AUTO_INCREMENT,
 user_name VARCHAR(20) NOT NULL,
 age INT NOT NULL,
 sex INT(1) NOT NULL,
 create_dt DATE NOT NULL,
 PRIMARY KEY (id)
 )
 ENGINE=INNODB DEFAULT CHARSET=utf8;
 
 INSERT INTO tbl_user_info VALUES('4','Mary','25','0','2016-06-24');
 INSERT INTO tbl_user_info VALUES('5','Jack','22','1','2016-06-24');
 INSERT INTO tbl_user_info VALUES('6','John','19','1','2016-06-24')
 
2 、定义实体类

定义一个 Bean,与数据库表中的各个字段对应:

package com.imooc.jdbc;

import java.util.Date;

public class UserVO {
    private int id;
    private String userName;
    private int age;
    private int sex;
    private Date createDt;

    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 int getAge()
    {return age;}

    public void setAge(int age)
    {this.age=age;}

    public int getSex()
    {return sex;}

    public void setSex(int sex)
    {this.sex=sex;}

    public Date getCreteDt()
    {return createDt;}

    public void setCreateDt(Date createDt)
    {this.createDt=createDt;}

    @Override
    public String toString() {
        return "UserName[id=" + id + ",userName=" + userName + ",age=" + age
                + ",sex=" + sex + ",createDt=" + createDt + "]";
    }
}

3 、定义数据库连接类

定义一个数据库连接类,用于获取 MySQL 的连接

package com.imooc.utils;

import java.sql.Connection;
import java.sql.DriverManager;

public class DBUtil {
    private static final String URI = "jdbc:mysql://localhost:3306/jdbc?" +
            "user=root&password=123456&useUnicode=true&characterEncoding=UTF-8";
    private static final String DRIVER = "com.mysql.jdbc.Driver";

    public static Connection connectDB() throws Exception {
    
        // 1、加载数据库驱动
        Class.forName(DRIVER);
       
        // 2、获取数据库连接
        Connection conn = DriverManager.getConnection(URI);
        return conn;
    }
}

  MySQL 的 JDBC URL 编写方式为:jdbc:mysql://主机名称:连接端口/数据库的名称?参数=
值,在这个例子中我连接的数据库主机是一台远程主机,所以主机名称为远程主机的 ip 地
址,如果数据库主机为本机,则可以定义为 localhost,在参数中指定用户名为 root,密码也
是 root,为了避免中文乱码要指定 useUnicode 和 characterEncoding。因为连接的是 MySQL
数据库,所以程序一开始需要加载 MySQL 的数据库驱动,然后通过 DriverManager.getConn
ection(String URL)方法获取数据库的连接。

4 、实现数据库的增删改查

在获取了数据库的连接之后,就可以操作数据库了,下面分别实现数据库的增删改查操作,
定义一个 UserDao 类用于操作数据库。

1 )查询

先看查询操作,查询可以一次查询出所有的数据,也可以根据相应的条件查询。

查询所有的数据,在 UserDao 中定义一个 queryAll()方法:

public static List<UserVO> queryAll() throws Exception {
        Connection conn = DBUtil.connectDB();
        String sql = "SELECT * FROM tbl_user_info";
        List<UserVO> userList = new ArrayList<UserVO>();

        Statement stmt = conn.createStatement();
        ResultSet rs = stmt.executeQuery(sql);
        while (rs.next()) {
            UserVO user = new UserVO();
            user.setId(rs.getInt("id"));
            user.setUserName(rs.getString("user_name"));
            user.setAge(rs.getInt("age"));
            user.setSex(rs.getInt("sex"));
            user.setCreateDt(rs.getDate("create_dt"));

            userList.add(user);
        }
        return userList;
    }

  这里使用 Connection.createStatement()方法获取一个 Statement 对象,这个对象里面有很多的方法可以操作数据库,使用 excuteQuery(String sql)执行查询操作,查询结果为一个结果集 ResultSet,可以通过这个结果集获取相关的信息。

定义 main 函数:

public static void main(String[] args) {
        UserDao dao = new UserDao();
        try {
            List<UserVO> userList = dao.queryAll();
            for(UserVO user : userList) {
                System.out.println(user);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

执行结果:
在这里插入图片描述
根据条件查询,定义一个 queryByParams 方法:

public List<UserVO>queryByParams(List<Map<String,Object>>params) throws Exception{
        Connection conn=DBUtil.connectDB();
        StringBuilder sql=new StringBuilder("SELECT * FROM tbl_user_info WHERE 1=1");
        for(Map<String,Object>param:params){
            sql.append(" and ");
            sql.append(" "+param.get("col")+" ");
            sql.append(" "+param.get("rel")+" ");
            sql.append(" "+param.get("value")+ " ");
        }
        System.out.println(sql.toString());

        List<UserVO>userList=new ArrayList<UserVO>();

        Statement stmt=conn.createStatement();
        ResultSet rs=stmt.executeQuery(sql.toString());
        while(rs.next()){
            UserVO user=new UserVO();
            user.setId(rs.getInt("id"));
            user.setUserName(rs.getString("user_name"));
            user.setAge(rs.getInt("age"));
            user.setSex(rs.getInt("sex"));
            user.setCreateDt(rs.getDate("create_dt"));

            userList.add(user);
        }
        return userList;
    }

  这个方法可以自由选择查询的条件,只需要向方法中传入一个条件的 List 即可,这些条件
都是由 Map 组成的,每一个 Map 包含三个元素,col 表示查询条件对应哪一列,rel 表示查
询条件的关系是什么,value 是指查询条件的值。这样写集成了多查询条件的方法,很多的
业务下,查询的逻辑可能很多,这样写只用一个统一的方法就可以解决多种不同查询条件的
业务逻辑。

main 函数测试一下:

public static void main(String[] args){
        UserDao dao = new UserDao();
        List<Map<String, Object>> params = new ArrayList<Map<String,Object>>();
        Map<String, Object> param1 = new HashMap<String, Object>();
        param1.put("col", "user_name");
        param1.put("rel", "like");
        param1.put("value", "'%John%'");
        params.add(param1);

        Map<String, Object> param2 = new HashMap<String, Object>();
        param2.put("col", "sex");
        param2.put("rel", "=");
        param2.put("value", 1);
        params.add(param2);
        try {
            List<UserVO> userList = dao.queryByParams(params);
            for(UserVO user : userList) {
                System.out.println(user);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

执行结果:
在这里插入图片描述

2 )增加

现在在 UserDao 中写一个 addUser 方法用于新增一条信息:

public void addUser(UserVO user)throws Exception{
        Connection conn=DBUtil.connectDB();
        String sql="INSERT INTO tbl_user_info(user_name,age,sex, create_dt)"
                +"VALUES(?,?,?,?)";

        PreparedStatement pstmt= conn.prepareStatement(sql);
        pstmt.setString(1,user.getUserName());
        pstmt.setInt(2,user.getAge());
        pstmt.setInt(3,user.getSex());
        pstmt.setDate(4,new Date(new java.util.Date().getTime()));
        pstmt.execute();
    }

  这个方法使用 Connection.prepareStatement(String sql)方法获取一个 PreparedStatement 对象,使用这个方法可以传入带参数的 SQL 语句,而参数的值可以通过 PreparedStatement.setXXX
(int index, XXX value)的方法指定,其中 XXX 为各种不同的类型,index 指定第几个参数
的下标。指定了参数的值之后,便可以执行 excute()方法执行 SQL 语句了。

main 方法来验证这个增加的方法:

public static void main(String[] args) {
        UserDao dao = new UserDao();
        UserVO user = new UserVO();
        user.setUserName("gong");
        user.setAge(20);
        user.setSex(1);
        try {
            dao.addUser(user);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

执行后再查看数据库,发现 Tom 这个用户已经插入成功了。

在这里插入图片描述

3 )删除

接下来再写一个删除的方法,根据用户的 id 来删除数据:

public void deleteUser(int id)throws Exception{
        Connection conn=DBUtil.connectDB();
        String sql="DELETE FROM tbl_user_info WHERE id=?";

        PreparedStatement pstmt= conn.prepareStatement(sql);
        pstmt.setInt(1,id);

        pstmt.execute();
    }

然后写一个 main 方法来验证:

删除 id 为 4 的用户,运行后查看 数据库:

在这里插入图片描述

4 )更新数据库

最后来看一下更新数据库:

public void updateUser(UserVO user)throws Exception{
        Connection conn = DBUtil.connectDB();
        String sql = "UPDATE tbl_user_info SET user_name=?, age=?, sex=?"
                + " WHERE id=?";

        PreparedStatement pstmt = conn.prepareStatement(sql);
        pstmt.setString(1, user.getUserName());
        pstmt.setInt(2, user.getAge());
        pstmt.setInt(3, user.getSex());
        pstmt.setInt(4, user.getId());

        pstmt.executeUpdate();
    }

从 SQL 语句中可以看出更新也是根据用户的 id 进行选择性的更新的。

写一个 main 方法来验证:

  public static void main(String[] args) {
        UserDao dao=new UserDao();
        UserVO user=new UserVO();

        user.setUserName("Jack");
        user.setAge(30);
        user.setSex(0);
        user.setId(2);

        try {
            dao.updateUser(user);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

在这里插入图片描述

最后

以上就是烂漫板凳为你收集整理的实验四 JDBC 访问数据库的全部内容,希望文章能够帮你解决实验四 JDBC 访问数据库所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(58)

评论列表共有 0 条评论

立即
投稿
返回
顶部