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