前言:算法课老师布置一个任务:用Python写一个点名器。突发奇想,可不可以将数据导入到数据库用jdbc通过Java写一个点名器?
思路:用sqlyog将名单导入到mysql数据库,通过jdbc连接,将数据存放到集合里并通过洗牌算法(shuffle())随机输出一个名字+学号
先创建一个表,图省事我只创建了两个字段:名字和学号。
注意:mysql4.0版本以下,varchar (50),指的是50字节,如果存放UTF8汉字时,只能存16个(每个汉字3字节) 5.0版本以上,varchar (50),指的是50字符,无论存放的是数字、字母还是UTF8汉字(每个汉字3字节),都可以存放50个。
Ascll里,1数字 = 1字节 ∴ int = 4 数字 从而推导出 int 最多储存4位数字。
选择一个数据库导入数据,推荐导入到已创建好的表当中,
一定要单击数据库后在导入数据,不然可能没有最下面一行。单击后没有就再试一次1.勾上班级名册旁边的框
2.在Destination选择想要导入进去的表;Map就是列映射和转换,如下图。
3.在Map中选中你想导入的数据:Destination是表中的字段(栏),Type改成相应的类型
设置之后的显示然后狂点下一步下一步就行
成品图因为本人边学边忘,所以采用了最简单的一种写法,更正规的请移步:JDBC的使用总结概括
public class JDBC {
public static void main(String[] args) throws Exception{
//1.导入jar包
//2.注册驱动
Class.forName("com.mysql.jdbc.Driver");
//3.获取连接
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","333");
//4.获取执行者对象 (statement:表现,声明,跟程序意思不匹配)
Statement stat = conn.createStatement();
//5.执行sql语句,并且接收结果
String sql = "select * from test_1";
ResultSet rs = stat.executeQuery(sql); //execute执行,query:查询,resultset:结果集
//6.处理结果
while(rs.next()) {
String name = rs.getString("name");
String id = rs.getString("id");
}
//7.释放资源
conn.close();
stat.close();
conn.close();
}
}
为什么推荐导入到已创建好的表当中?直接让sqlyog创建了个表之后发现死活连不上,可能是表名是中文的原因(字符集不匹配)。
在第六步之前创建一个arraylist对象,并在while循环里将数据add()进去。
//6.处理结果
ArrayList list = new ArrayList<>();
while (rs.next()) {
String name = rs.getString("name");
String id = rs.getString("id");
list.add(name+id);
}
System.out.println("连接成功");
洗牌算法介绍和使用
System.out.println("连接成功");
Collections.shuffle(list);
System.out.println(list.get(0));
运行结果就不放了
总的代码:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
import java.util.ResourceBundle;
/**
* @author Pzr
* @create 2022/9/19 - 16:41
*/
public class JDBC {
public static void main(String[] args) throws Exception {
//1.导入jar包
//2.注册驱动
Class.forName("com.mysql.jdbc.Driver");
//3.获取连接
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "333");
//4.获取执行者对象 (statement:表现,声明,跟程序意思不匹配)
Statement stat = conn.createStatement();
//5.执行sql语句,并且接收结果
String sql = "select * from test_1";
ResultSet rs = stat.executeQuery(sql); //execute执行,query:查询,resultset:结果集
//6.处理结果
ArrayList list = new ArrayList<>();
while (rs.next()) {
String name = rs.getString("name");
String id = rs.getString("id");
list.add(name+id);
}
System.out.println("连接成功");
Collections.shuffle(list);
System.out.println(list.get(0));
//7.释放资源
conn.close();
stat.close();
conn.close();
}
}
注意:在将数据导入的那步可能出现缺少驱动的情况:
解决方法: https://www.zhihu.com/question/391063453/answer/2680013999