用mysql和java写一个简易点名器

        前言:算法课老师布置一个任务:用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连接数据库

        因为本人边学边忘,所以采用了最简单的一种写法,更正规的请移步: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<String> 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<String> 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

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 12
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值