JDBC 访问数据库

news2024/10/3 2:17:15

文章目录

  • 一、实验目的
  • 二、实验要求
  • 三、实验内容
    • 1、设计数据库表
    • 2、定义实体类
    • 3、定义数据库连接类
    • 4、实现数据库的增删改查
    • 5、测试用例

一、实验目的

理解 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();
        }
    }*/

}

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/54201.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【华为上机真题 2022】字符串序列判定

&#x1f388; 作者&#xff1a;Linux猿 &#x1f388; 简介&#xff1a;CSDN博客专家&#x1f3c6;&#xff0c;华为云享专家&#x1f3c6;&#xff0c;Linux、C/C、云计算、物联网、面试、刷题、算法尽管咨询我&#xff0c;关注我&#xff0c;有问题私聊&#xff01; &…

中断系统中的设备树__中断号的演变与irq_domain

1 中断号与硬件相关_号码固定 当我们的系统中只有一两个中断控制器时&#xff0c;上面的方法很有用&#xff0c;可以给每一个中断预先确定好他的虚拟中断号&#xff0c;但是当中断控制器越来越多、当中断越来越多&#xff0c;上述方法(virq和hwirq固定绑定)有缺陷: a. 增加工作…

马克思的手稿-第11届蓝桥杯Scratch选拔赛真题精选

[导读]&#xff1a;超平老师计划推出Scratch蓝桥杯真题解析100讲&#xff0c;这是超平老师解读Scratch蓝桥真题系列的第92讲。 蓝桥杯选拔赛每一届都要举行4~5次&#xff0c;和省赛、国赛相比&#xff0c;题目要简单不少&#xff0c;再加上篇幅有限&#xff0c;因此我精挑细选…

23软考备考已开始,网络工程师知识点速记~(2)

新一轮软考备考来啦~ 为了帮助大家提高备考效率&#xff0c;将2023上半年软考网络工程师知识点速记分享给大家&#xff0c;快来跟着一起打卡学习吧&#xff01; 指令系统 指令系统是中央处理器所有指令的集合&#xff0c;通常一条指令可分解为操作码和地址码两部分&#xff…

python 从一道作业题到制作一个图形界面的“诈金花”游戏

题目很简单&#xff1a;就是自己写一个程序&#xff0c;实现诈金花游戏的发牌、判断输赢。 规则&#xff1a; 一付扑克牌&#xff0c;去掉大小王&#xff0c;每个玩家发3张牌&#xff0c;最后比大小&#xff0c;看谁赢。 牌型&#xff1a; 豹子&#xff1a;三张一样的牌&am…

Fluent案例:肾动脉RDN治疗过程的仿真

1 问题背景 肾动脉消融&#xff08;Renal denervation&#xff0c;简称RDN&#xff09;是一种治疗高血压的办法&#xff0c;其基本原理为利用插入肾动脉的电极消融导管进行射频消融&#xff0c;使肾动脉血管壁附近的交感神经因高温而损伤失活&#xff0c;减少神经系统过度活跃的…

想转行做IC,却找不到适合自己的岗位?

想跨行从事IC行业&#xff0c;但是没有一个比较好的学历&#xff0c;也没有一个很好的专业&#xff0c;或者受限于各种各样的外在条件&#xff0c;那么在这个行业里面&#xff0c;到底有没有个岗位能够适合自己上手呢&#xff1f; 当然有&#xff0c;不是所有芯片岗位都要高学…

什么是自监督,自监督和有监督的区别什么是SSL

有监督 就是让机器做题目&#xff0c;给他标准答案 那无监督 可以自己推出来的吧 就是没有给标准答案 也就是label 或者在目标检测里面说是groundTruth 什么是Ground-truth&#xff0c;Ground-truth什么意思_&#xff1a;&#xff09;&#xfffd;东东要拼命的博客-CSDN博客_…

基于日特征气象因素的支持向量机预测电力负荷(Matlab代码实现)

&#x1f352;&#x1f352;&#x1f352;欢迎关注&#x1f308;&#x1f308;&#x1f308; &#x1f4dd;个人主页&#xff1a;我爱Matlab &#x1f44d;点赞➕评论➕收藏 养成习惯&#xff08;一键三连&#xff09;&#x1f33b;&#x1f33b;&#x1f33b; &#x1f34c;希…

tkinter绘制组件(37)——普通图片

tkinter绘制组件&#xff08;37&#xff09;——普通图片引言布局函数结构添加图片图片缩放完整函数代码效果测试代码最终效果github项目pip下载结语引言 其实&#xff0c;本来不打算专门为TinUI写图片元素控件的&#xff0c;让编写者自行使用PhotoImage类和画布自带的create_…

[附源码]JAVA毕业设计计算机类课程实验平台(系统+LW)

[附源码]JAVA毕业设计计算机类课程实验平台&#xff08;系统LW&#xff09; 目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目…

【编程题】【Scratch一级】2022.09 踢足球

踢足球 1. 准备工作 &#xff08;1&#xff09;选择背景Baseball 2&#xff1b; &#xff08;2&#xff09;删除默认的小猫角色&#xff0c;选择角色Ben和Soccer Ball。 2. 功能实现 &#xff08;1&#xff09;Ben初始造型为ben-a&#xff0c;初始位置为舞台左下角&#xf…

开发3年入职饿了么P6,全靠这份MyBatis学习笔记了

前言 相信大部分程序员工作中都有接触过MyBatis&#xff0c;那么它到底重不重要呢&#xff1f;答案是肯定的呀&#xff01; 互联网公司基本都是用Mybatis做为持久层框架的&#xff0c;所以&#xff0c;Mybatis是一定要学的&#xff01;&#xff01;&#xff01; 不管是在工作中…

[附源码]Python计算机毕业设计Django公共台账管理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

PMP项目管理中的各种图

直方图 柱状图,条形图,用来统计 帕累托图 就是把直方图进行排序 散点图 分析2个元素之间的相关性 矩阵图 在行列交叉的位置展示因素、原因和目标之间的关系强弱

10 个你必须要知道的重要JavaScript 数组方法

数组方法在 JavaScript 中是必不可少的&#xff0c;数组方法有很多。对于忙碌的初学者&#xff0c;我选择了 10 种最常见的数组方法&#xff0c;你必须学习它们&#xff0c;这些可以帮助你提升学习效率&#xff0c;节省时间。 为了便于理解&#xff0c;我为每个数组方法提供了…

不强迫登录!Apipost用着真爽!

Apipost在上个版本推出了Apipost网页版&#xff0c;用户无需下载软件在官网就可以直接体验到Apipost的很多强大功能。 Apipost 7版本在使用网页版时的登录问题上&#xff0c;让用户在无需下载的基础上&#xff0c;更无需登录&#xff0c;就可以便捷使用Apipost更多的功能&…

Promise期约函数的实现

前言 Promise也叫期约函数,是ES6中新增的特性,是解决异步编程的一种方案,取代回调函数避免回调地狱。 const p new Promise((resolve,reject)>{resolve(1); });// 链式调用 p.then(res > Promise.resolve(res 2)).then(res > Promise.resolve(res 3)).then(res &…

嵌入式系统硬件概述

文章目录嵌入式系统硬件平台(1) 嵌入式处理器的分类(2) 嵌入式微处理器MIPS处理器PowerPC处理器ARM处理器ARM发展历史ARM公司介绍ARM市场份额嵌入式微控制器&#xff08;MCU&#xff09;数字信号处理器&#xff08;DSP&#xff09;嵌入式片上系统&#xff08;SoC&#xff09;嵌…

【uni-app】总结uni-app订单支付和打包发布

前言 总结uni-app订单支付和打包发布 1- 支付 1.1 app的支付 1.1.1 准备工作 支付厂商 获取id 去微信支付平台接入微信支付 支付宝 打包时候 去mainifest.json文件下&#xff0c;找到 app模块配置 &#xff0c;勾选payment支付 1.1.2 代码 获取支付厂商 uni.getProvide() u…