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

创建数据库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());
        }
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值