JDBC 访问数据库

一、实验目的

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

二、实验要求

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

三、实验内容

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

1、设计数据库表

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

CREATE TABLE `tbl_user_info` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_name` varchar(20) NOT NULL,
  `age` int(11) NOT NULL,
  `sex` int(1) NOT NULL,
  `create_dt` date NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=61 DEFAULT CHARSET=utf8;

在用户表中定义了几个字段,分别是 id,user_name,age,sex,create_dt,其中 id 是主键, 是自增长的,user_name 表示用户名,age 表示用户年龄,sex 表示用户的性别,这里的性别用数字表示,0 表示女性,1 表示男性,create_dt 表示创建的时间。预先在数据库中插入几条数据,数据如下:
在这里插入图片描述

2、定义实体类

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

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 getCreateDt() {
        return createDt;
    }

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

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

}

3、定义数据库连接类

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

package com.imooc.jdbc;

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

public class DBUtil {

    private static final String URI = "jdbc:mysql://192.168.2.207:3306/equipmenitsystem?"
            + "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;
    }

}

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

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

package com.gec.dao;

import com.gec.com.gec.util.DBUtil;
import com.gec.entity.UserVO;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

public class UserDaoIab {

    //查询数据库所有信息
    public 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);
        System.out.println("数据库中全部用户信息如下:");
        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;
    }

    //查询数据库用户特定条件信息
    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);
        }
        System.out.println("搜索用户信息数据成功!!!");
        return userList;
    }

    //在数据库中新增一条用户信息
    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();
        System.out.println("添加用户信息数据成功!!!");
    }

    //在数据库中根据用户的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();
        System.out.println("删除用户信息数据成功!!!");
    }

    //在数据库中根据用户的id来更新用户信息
    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());
        System.out.println("更新用户信息数据成功!!!");
        pstmt.executeUpdate();
    }
}

5、测试用例

Uservotest.class

package com.gec.test;

import com.gec.dao.UserDao;
import com.gec.dao.UserDaoIab;
import com.gec.entity.UserVO;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class uservotest {
    //数据库所有信息查询
/*    public static void main(String[] args) {
        UserDaoIab dao = new UserDaoIab();

        try {
            List<UserVO> userList = dao.queryAll();
            for (UserVO user : userList) {
                System.out.println(user);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }*/
    //查询数据库特定条件信息
/*    public static void main(String[] args) {
        UserDaoIab dao = new UserDaoIab();

        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();
        }

    }*/
    //在数据库中新增一条信息
/*    public static void main(String[] args) {
        UserDaoIab dao = new UserDaoIab();
        UserVO user = new UserVO();

        user.setUserName("animal");
        user.setAge(85);
        user.setSex(0);
        try {
            dao.addUser(user);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }*/
    //在数据库中根据用户的id来删除数据
 /*   public static void main(String[] args) {
        UserDaoIab dao = new UserDaoIab();

        try {
            dao.deleteUser(4);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }*/
    //在数据库中根据用户的id来更新数据
/*    public static void main(String[] args) {
        UserDaoIab dao = new UserDaoIab();
        UserVO user = new UserVO();

        user.setUserName("张弛华");
        user.setAge(99);
        user.setSex(0);
        user.setId(1);

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

}

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

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南风如意

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值