maven的java工程获取mysql数据库数据【问题及解决过程记录】

news2025/2/3 8:47:38

创建数据库maven,指定字符集和排序规则

UTF8MB4常用的排序规则:utf8mb4_unicode_ci、utf8mb4_general_ci、utf8mb4_bin,选用哪种方式呢?先来分析一下:

  1、准确性:

  (1)utf8mb4_unicode_ci 是基于标准的Unicode来排序和比较,能够在各种语言之间精确排序,不区分大小写

  (2)utf8mb4_general_ci 没有实现Unicode排序规则,在遇到某些特殊语言或者字符集,排序结果可能不一致,不区分大小写

  2、性能:

  (1)utf8mb4_general_ci 在比较和排序的时候更快
  (2)utf8mb4_unicode_ci 在特殊情况下,Unicode排序规则为了能够处理特殊字符的情况,实现了略微复杂的排序算法。相比选择哪一种collation,使用者更应该关心字符集与排序规则在db里需要统一。
  (3)utf8mb4_bin:将字符串每个字符用二进制数据编译存储,区分大小写,而且可以存二进制的内容。

   总而言之,utf8mb4_general_ci 和utf8mb4_unicode_ci 是我们最常使用的排序规则。utf8mb4_unicode_ci 校对速度快,但准确度稍差。utf8_unicode_ci准确度高,但校对速度稍慢,两者都不区分大小写。这两个选哪个视自己情况而定,还是那句话尽可能保持db中的字符集和排序规则的统计。

 建表,填充数据

-- 创建一个user用户表
CREATE TABLE IF NOT EXISTS `user`(
`id` varchar(6) NOT NULL,
-- alter table user modify id varchar(6) auto_increment;
userName varchar(15) NOT NULL,
`password` varchar(8) NOT NULL,
age BIGINT DEFAULT NULL,
sex VARCHAR(1) DEFAULT NULL,
phone VARCHAR(11) DEFAULT NULL,
PRIMARY KEY (`id`)
);

-- 填充数据
INSERT INTO user 
(id,userName,password,age,sex,phone)
VALUES
('001','李火旺','123',17,'男','123456'),
('002','诸葛渊','123',32,'男','123456'),
('003','李岁','123',2,'女','123456'),
('004','季灾','123',27,'男','123456'),
('005','杨娜','123',18,'女','123456');

 未涉及页面交互,点击idea创建一个java新项目

 设置配置文件

<dependencies>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.30</version>
        <scope>runtime</scope>
    </dependency>

    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
    </dependency>
</dependencies>

 创建实体类

 写一个获取全部用户的接口方法UserDao及其实现类UserDaoImpl(注意两边都要抛出异常)

编写接口实现类:

/**
 * 要想从数据库中取出数据
 * 必须有四个属性:数据库驱动,连接数据库的地址,数据库用户名称,数据库密码。
 */
package com.wxx.dao.impl;

import com.wxx.dao.UserDao;
import com.wxx.domain.User;

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

/**
 * @author 乱码酱
 * @date :2022-12-20 10:30
 * @program: maven_mysql
 * @create:UserDao实现类
 */
public class UserDaoImpl implements UserDao {
    public List<User> findAll() throws Exception {
        //将数据库结果集转成java的list集合   为了返回list放到全局
        List<User> list = new ArrayList<User>();
        //获取connection对象   为了关闭资源放到全局
        Connection connection = null;
        //获取真正的操作数据的对象
        PreparedStatement pst = null;
        //执行数据库查询操作
        ResultSet rs = null;

        try {
            //加载驱动类
            Class.forName("org.example.jdbc.Driver");
            //获取connection对象
            connection = DriverManager.getConnection("jdbc:mysql:///maven","root","123321");
            //获取真正的操作数据的对象
            pst = connection.prepareCall("select * from user");
            //执行数据库查询操作
            rs = pst.executeQuery();
//            //将数据库结果集转成java的list集合
//            List<User> list = new ArrayList<User>();
            while (rs.next()) {
                User user = new User();
                user.setId(rs.getString("id"));
                user.setUserName(rs.getString("userName"));
                user.setPassword(rs.getString("password"));
                user.setAge(rs.getInt("age"));
                user.setPassword(rs.getString("sex"));
                user.setPassword(rs.getString("phone"));
                list.add(user);
            }

        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            //关闭资源
            connection.close();
            pst.close();
            rs.close();
        }
        
        return list;
    }
}

测试中显示版本过低

问题一:

java.lang.ClassNotFoundException: org.example.jdbc.Driver

问题二:

 java.lang.NullPointerException

报错源代码:
//加载驱动类
Class.forName("org.example.jdbc.Driver");

 重新查看发现是加载驱动类有分歧,应该是

//加载驱动类  (固定用法)
Class.forName("com.mysql.jdbc.Driver");

修改后成功了!

 完整代码:

UserDao
package com.wxx.dao;

import com.wxx.domain.User;

import java.util.List;

/**
 * @author 乱码酱
 * @date :2022-12-20 10:27
 * @program: maven_mysql
 * @create:用户接口
 */
public interface UserDao {
//    查询所有用户
    public List<User> findAll() throws Exception;
}
UserDaoImpl 
package com.wxx.dao.impl;

import com.wxx.dao.UserDao;
import com.wxx.domain.User;

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

/**
 * @author 乱码酱
 * @date :2022-12-20 10:30
 * @program: maven_mysql
 * @create:UserDao实现类
 */
public class UserDaoImpl implements UserDao {
    public List<User> findAll() throws Exception {
        //将数据库结果集转成java的list集合   为了返回list放到全局
        List<User> list = new ArrayList<User>();
        //获取connection对象   为了关闭资源放到全局
        Connection connection = null;
        //获取真正的操作数据的对象
        PreparedStatement pst = null;
        //执行数据库查询操作
        ResultSet rs = null;

        try {
            //加载驱动类
            Class.forName("com.mysql.jdbc.Driver");
            //获取connection对象
            connection = DriverManager.getConnection("jdbc:mysql:///maven","root","123321");
            //获取真正的操作数据的对象
            pst = connection.prepareCall("select * from user");
            //执行数据库查询操作
            rs = pst.executeQuery();
//            //将数据库结果集转成java的list集合
//            List<User> list = new ArrayList<User>();
            while (rs.next()) {
                User user = new User();
                user.setId(rs.getString("id"));
                user.setUserName(rs.getString("userName"));
                user.setPassword(rs.getString("password"));
                user.setAge(rs.getInt("age"));
                user.setPassword(rs.getString("sex"));
                user.setPassword(rs.getString("phone"));
                list.add(user);
            }

        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            //关闭资源
            connection.close();
            pst.close();
            rs.close();
        }

        return list;
    }
}
UserTest
package com.wxx.test;

import com.wxx.dao.UserDao;
import com.wxx.dao.impl.UserDaoImpl;
import com.wxx.domain.User;
import org.junit.jupiter.api.Test;

import java.util.List;

/**
 * @author 乱码酱
 * @date :2022-12-20 19:31
 * @program: maven_mysql
 * @create:测试类
 */
public class UserTest {
    @Test
    public void findAll() throws Exception {
        UserDao userDao = new UserDaoImpl();
        List<User> list = userDao.findAll();
        for (User user : list) {
            System.out.println(user.getUserName());
        }
    }
}

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

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

相关文章

ffmpeg-时间基tbn、tbc、tbr

时间基的作用 源码来自ffmpeg5.1。 时间基在ffmpeg中是通过数据结构有理数AVRational描述的。时间基为时间戳的单位&#xff0c;比如时间基tbn(AVStream.time_base)0.001秒&#xff0c;AVPacket的pts40&#xff0c;则表明该AVPacket要在tbn*pts0.04秒开始显示。 /** 代码路径…

JavaScript 网页特效

一、Offset 1.1 概述 offset > 偏移量 &#xff0c;可以动态的获取的元素的位置、大小等属性。 获得元素距离带有定位父元素的位置获得元素自身的大小(宽度高度) 返回的数值都不带单位 offset常用属性&#xff1a; 属性作用element.offsetParent返回作为该元素带有定位…

全球汽车后行业发展现状:欧洲市场保持稳健 中国产业规模增速较快

根据观研报告网发布的《2022年中国汽车后市场分析报告-市场发展格局与投资潜力研究》显示&#xff0c;汽车后市场&#xff08;AM市场&#xff09;是指汽车在销售之后维修和保养服务及其所包含的汽车零部件、汽车用品和材料的交易市场&#xff0c;它涵盖了消费者买车后所需要的一…

LeetCode 321 周赛

2485. 找出中枢整数 给你一个正整数 n &#xff0c;找出满足下述条件的 中枢整数 x &#xff1a; 1 和 x 之间的所有元素之和等于 x 和 n 之间所有元素之和。 返回中枢整数 x 。如果不存在中枢整数&#xff0c;则返回 -1 。题目保证对于给定的输入&#xff0c;至多存在一个中…

STM32单片机直流电机PID速度控制正反转控制(霍尔磁铁测速)LCD1602

实践制作DIY- GC0116-直流电机PID速度控制 一、功能说明&#xff1a; 基于STM32单片机设计-直流电机PID速度控制 功能介绍&#xff1a; STM32F103C系列最小系统LCD1602直流电机磁铁霍尔传感器MX15系列驱动模块4个按键&#xff08;速度减、速度加、开/关、正转/反转&#xff0…

【复习笔记】【嵌入式】嵌入式系统及其原理复习重点——篇二

嵌入式系统及其原理复习重点笔记 2 ARM处理器和指令集 ARM处理器简介 ARM架构与ARM处理器对应关系 V1版架构 该版架构只在原型机ARM1出现过,处理能力有限&#xff0c;其基本性能&#xff1a; 寻址空间&#xff1a;64M字节(26位)基本的数据处理指令(无乘法)字节、半字和字的…

4个封神的电脑软件,颠覆你对白嫖的认知,干货奉上

闲话少说&#xff0c;直上干货。 1、TinyWow TinyWow虽说是国外网站工具&#xff0c;但不得不承认真的无敌好用&#xff0c;收纳工具超200个&#xff0c;完全免费&#xff0c;无任何弹屏广告&#xff0c;更为良心的是&#xff0c;不需要注册登录&#xff0c;随用随走&#xff0…

如何优化大场景实时渲染?HMS Core 3D Engine这么做

在先前举办的华为开发者大会2022&#xff08;HDC&#xff09;上&#xff0c;华为通过3D数字溪村展示了自有3D引擎“HMS Core 3D Engine”&#xff08;以下简称3D Engine&#xff09;的强大能力。作为一款高性能、高画质、高扩展性的3D引擎&#xff0c;3D Engine不仅能通过实时光…

C++文件流

1、【转】string和stringstream用法总结 - 小金乌会发光&#xff0d;Z&M - 博客园 2、C&#xff1a;std::stringstream【数据类型转换、多个字符串拼接、分割字符串】_u013250861的博客-CSDN博客_c stringstream转string 3、C使用stringstream进行数据类型转换_puppylpg的…

TCP延迟应答、捎带应答、粘包问题、异常处理

TCP延迟应答、捎带应答、粘包问题、异常处理一、延迟应答二、捎带应答三、面向字节流 -- 粘包问题四、TCP中的异常处理五、补充一、延迟应答 上篇博客我们讲到TCP滑动窗口、流量控制、拥塞控制。 如果接收数据的主机立刻返回ACK应答&#xff0c;这时候返回的窗口可能比较小。…

[ vulhub漏洞复现篇 ] Airflow dag中的命令注入漏洞复现 CVE-2020-11978

&#x1f36c; 博主介绍 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 _PowerShell &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 &#x1f389;点赞➕评论➕收藏 养成习…

web前端-javascript-function函数的arguments对象(类数组对象,它也可以通过索引来操作数据,也可以获取长度)

arguments 对象 1. 引出 arguments 在调用 function 函数时&#xff0c;浏览器每次都会传递进两个隐含的参数 函数的上下文对象 this封装实参的对象 arguments 2. 说明 arguments 是一个类数组对象,它也可以通过索引来操作数据&#xff0c;也可以获取长度在调用函数时&#…

ACL会议介绍 - Call for Main Conference Papers

The 61st Annual Meeting of the Association for Computational Linguistics Toronto, Canada July 9-14, 2023 网址&#xff1a;The 61st Annual Meeting of the Association for Computational Linguistics - ACL 2023 目录 征集主要会议文件 Submission Topics 主题轨迹…

Stm32标准库函数3——BlueTooth 蓝牙通讯测试 Stm32中继

//在使用本程序前&#xff0c;先将模块与手机端匹配成功&#xff0c;波特率38400 //串口1&#xff08;A9、A10&#xff09;接电脑&#xff0c;串口2&#xff08;A2、A3&#xff09;接蓝牙模块 //所有的波特率都为38400&#xff0c;蓝牙的供电为3.3-5v //程序功能&#xff0c;转…

Discrete Optimization课程笔记(4)—混合整数规划

目录​​​​​​​ 1.MIP介绍(Mixed Integer Program) Case1: Warehouse Location Case2: Knapsack Problem(Branch and Bound) 2.MIP模型(modeling) Case3: Coloring Problem(Big-M Transformation) 3.割平面法(Cutting planes) 4.多面体切割(Polyhedral Cuts) Cas…

前端工程化VUE-cli

六 前端工程化vue-cli Vue是渐近式框架&#xff0c;你可以用它一个功能&#xff0c;也可以用全家桶。前面的章节中&#xff0c;我们是在html中引入vue.js&#xff0c;只用它核心的数据绑定功能。但基于vue的扩展还有很多&#xff0c;比如vueRouter&#xff0c;axios&#xff0…

Base64编码剖析

文章目录Base64编码概述Base64原理索引表如何转换&#xff1f;Java实操Java代码实现Base64参考文章Base64编码概述 百度百科中对Base64有一个很好的解释&#xff1a;“Base64是网络上最常见的用于传输8Bit字节码的编码方式之一&#xff0c;Base64就是一种基于64个可打印字符来…

【面试题】5年前端 - 历时1个月收获7个offer

大厂面试题分享 面试题库 前端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★ 地址&#xff1a;前端面试题库 前言 省流&#xff1a;最终拿到了58、UMU、便利蜂、虾皮、快手、腾讯、字节的offer。 金三银四面试的, 这次整体面试通过率还挺高的, …

深入解读云场景下的网络抖动

一、网络抖动背景 延时高&#xff0c;网络卡&#xff0c;卡住了美好&#xff01; 应用抖&#xff0c;业务惊&#xff0c;惊扰了谁的心&#xff1f; 当你在观看世界杯梅西主罚点球突然视频中断了几秒钟 当你在游戏中奋力厮杀突然手机在转圈圈无法响应 当你守候多时为了抢一…

数据结构与算法-二叉树

什么树 树是 n&#xff08;n>0&#xff09;个有限集。n0是空树&#xff0c;在n>1的非空树中有且仅有一个根节点作为树根&#xff0c;其他结构分散在根节点下形成一个个子树。各个子树互不相交。在实际的编码环节中&#xff0c;我们可以用链表和数组来模拟树结构。 为什么…