TreeMind树图在线AI思维导图
当前位置:树图思维导图模板管理/培训工作方法学生数据的读取与写入数据库思维导图

学生数据的读取与写入数据库思维导图

  收藏
  分享
免费下载
免费使用文件
U520023381 浏览量:432023-04-02 16:35:38
已被使用4次
查看详情学生数据的读取与写入数据库思维导图

学生数据的读取与写入数据库

树图思维导图提供 学生数据的读取与写入数据库 在线思维导图免费制作,点击“编辑”按钮,可对 学生数据的读取与写入数据库  进行在线思维导图编辑,本思维导图属于思维导图模板主题,文件编号是:160a5ac615d83b1753b09119e83c4d74

思维导图大纲

学生数据的读取与写入数据库思维导图模板大纲

学生数据的读取

新建项目

name:DataCleasing

location:新建一个文件夹或者放在指定的文件夹里

language:Java

build system : maven

JDK: 1.8或者自己电脑安装好的jdk

pom依赖: Junit依赖(Junit依赖有几个常用的注解?)

首先看大哥<denpendencies>有了没有,没有大哥需要先加入大哥

<dependencies> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.31</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13.2</version> </dependency> </dependencies>

在大哥的范围里面加入小弟<denpendency>

<dependencies> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.31</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13.2</version> </dependency> </dependencies>

创建测试类

如果按照上面新建项目的方法创建的项目,已带有Test文件目录,如没有需要自行创建

创建测试类

测试类的路径与启动类包名一致

测试类名称与启动类名称一致,例如启动类:Dshuju,那么测试类DshujuTest

public class StudentCommon { public class StudentCommonTest {

在测试类里面写入@Before,@Test

@Before public void aaa() { System.out.println("我要烧水"); }

@Test public void aa() { System.out.println("我要喝咖啡"); }

创建启动类

在main目录下的com.bm.commmon包下创建StudentCommon类

在类里面写入两个方法:cleanFile()和writeDB()并在两个方法分别输出一个打印语句

public void cleanFile(){ System.out.println("开始清洗数据了~"); File dirfile = new File("C:\\Users\\贝贝\\Desktop\\7\\学生数据"); File[] studentFiles = dirfile.listFiles(); for (File file:studentFiles) { String filePath = file.getPath(); System.out.println(filePath); cleanFile(filePath); } } public void cleanFile(String filePath){ ArrayList<String[]> list = FileUtil.CSV2ArrayStudent(filePath); for (String[] line:list ) { for (String word:line ) { System.out.print(word+"\t"); } System.out.println(); } System.out.println(list.size()); }

public void writeDB(){ File dirfile = new File("C:\\Users\\贝贝\\Desktop\\7\\学生数据"); File[] studentFiles = dirfile.listFiles(); for (File file:studentFiles) { String filePath = file.getPath(); writeDB(); } } public void writeDB(String filePath){ Connection conn = null; // 申明数据库连接对象 Statement stmt = null; // 申明数据库执行工具 int row = 0 ; // 数据库受影响行数 StringBuilder sql = new StringBuilder(); // 申明 SQL 拼接工具 sql.append("INSERT INTO t_student VALUES "); // INSERT 语句的开头 // 读取清洗后的 CSV 文件,拼接成 SQL 批量插入语句 ArrayList<String[]> list = FileUtil.CSV2ArrayStudent(filePath); for (String[] line: list) { // 循环每一行数据 sql.append("(null,"); // 一行的开始 for (String word: line) { // 循环每一行中的每个字段数据 if(word.length()==0){ sql.append("null").append("'").append(",");} else { sql.append("'").append(word).append("'").append(","); } word = word.replaceAll("\\s",""); // 替换字符串中所有的空格 sql.append("'").append(word).append("'").append(","); // 拼接每个字段 } // 一行中的每个字段,循环结束 sql.deleteCharAt(sql.length()-1); // 去掉最后一个字符,多余的 逗号 sql.append(") ,"); // 一行的结束 } sql.deleteCharAt(sql.length()-1); // 去掉最后一个字符,多余的 逗号 try { conn = JdbcUtil.getConnection(); // 获取数据库连接对象 stmt = conn.createStatement(); // 获取执行 SQL 的工具 row = stmt.executeUpdate(sql.toString()); // 执行拼接的 SQL System.out.println("受影响行数:"+ row ); // 打印受影响行数(插入多少条数据) } catch (SQLException e) { throw new RuntimeException(e); }finally { JdbcUtil.release(conn,stmt); // 回收资源 } } }

子主题 1

去测试类测试启动类的方法是否可以运行

申明一个启动类的对象

StudentCommon studentCommon = new StudentCommon();

创建2个@Test注解,分别在注解下面写两个方法,并在方法里面调用启动类对象,方法

@Test public void cleanFile(){ studentCommon.cleanFile(); } @Test public void writeDB(){ studentCommon.writeDB(); }

获取学生数据

获取学生CSV文件路径

获取学生文件夹下的学生数据文件路径

public void cleanFile(){ // 确定 CSV 文件路径 ArrayList<String[]> list = FileUtil.CSV2Array("D:\\DATE\\数据\\脏数据\\School-yi.csv"); StringBuilder sb = new StringBuilder(); // 创建字符串拼接工具 int row = 1; int col = 1; for (String[] line: list) { // 循环每一行数据 for (String word: line) { // 循环每一行中的每个字段数据 word = word.replaceAll("\\s",""); // 替换字符串中所有的空格 if (word.length() == 0){// 判断字符串长度,为0,数据缺失 sb.append(row).append(" - ").append(col).append(" :数据缺失\n"); // 记录数据缺失的行号 } col++; // 读取下个字段,列自增 } row++; // 读取下一行,行自增 col = 1; // 字段恢复到底一列 } System.out.println(sb); // 打印数据异常行号 }

去测试类中测试是否可以获取到学生数据文件的路径

public class MainTest { public static void main(String[] args) { System.out.println("+------------------------- +"); System.out.println("| 欢迎使用 |"); System.out.println("+--------------------------+"); System.out.println("| 数据清洗程序 Java 1.8 版 |"); System.out.println("+--------------------------+"); CollegeClean collegeClean = new CollegeClean();// 创建学校清洗类 // collegeClean.cleanFile(); // 调用清洗方法 collegeClean.writeDB(); // 调用写入数据库 } }

获取学生CSV文件中的数据

将FileUtile类中的CSV2Array()复制粘贴到启动类,并修改名字CSV2ArrayStudent()

修改参数

在切割数据之后,将第一行跳过

br.readLine(); //跳过第一行

去掉所以得空格

while ((line=br.readLine())!=null) { // 读取当前行数据,判断是否有内容 line = line.replaceAll("\\s","");

处理证书文件的是与否改为对应的1或0

onerow = line.split(","); //按照逗号将一行字符串,分割成一段段的,放入字符串数组中 String certificate = onerow[onerow.length-1]; if ("是".equals(certificate)){ onerow[onerow.length-1] = "1"; } else { onerow[onerow.length-1] = "0"; } alldata.add(onerow); // 将分割后的字符串数组放入集合 }

去启动类加入一个单个文件清洗方法cleanFille(传入学生文件路径的参数),并读取数据

public void cleanFile(String filePath){ ArrayList<String[]> list = FileUtil.CSV2ArrayStudent(filePath); for (String[] line:list ) { for (String word:line ) { System.out.print(word+"\t"); } System.out.println(); } System.out.println(list.size()); }

在开始创建的cleanFile()方法里面调用单个清洗文件的方法

public void cleanFile(){ System.out.println("开始清洗数据了~"); File dirfile = new File("C:\\Users\\贝贝\\Desktop\\7\\学生数据"); File[] studentFiles = dirfile.listFiles(); for (File file:studentFiles) { String filePath = file.getPath(); System.out.println(filePath); cleanFile(filePath); } }

在测试类中测试启动类的清洗方法

public void cleanFile(){ studentCommon.cleanFile(); }

学生数据写入MySQL数据库

创建学生数据表t_student

stu_id不为空

stu_id BIGINT(20) NOT NULL AUTO_INCREMENT

stu_id是主键

PRIMARY KEY (stu_id)

stu_id递增

stu_id BIGINT(20) NOT NULL AUTO_INCREMENT

去CollegeClean类中复制WriteDB()方法粘贴到启动类中

public void writeDB() { File dirfile = new File("C:\\Users\\贝贝\\Desktop\\7\\学生数据"); File[] studentFiles = dirfile.listFiles(); for (File file : studentFiles) { String filePath = file.getPath(); writeDB(filePath); } }

修改数据

把nsert语句的表名改为s_student

sql.append("INSERT INTO `t_student` VALUES "); // INSERT 语句的开头

修改FileUtil的方法名并传入路径参数

ArrayList<String[]> list = FileUtil.CSV2ArrayStudent(filePath);

由于表中第一个字段是自增的,所以读取的第一个字段默认是null

for (String[] line: list) { // 循环每一行数据 sql.append("(Null,"); // 一行的开始

判断当前读取的字段是否为空值,若为空,则拼接null

for (String word: line) { // 循环每一行中的每个字段数据 if (word.length() == 0){ sql.append("null").append("'").append(","); } else{ sql.append("'").append(word).append("'").append(","); }

去测试类中测试单个文件的写入的情况

批量写入文件

将启动类中的CleanFile()中获取路径代码复制到批量写入数据库的方法writeDB()中,并调用单个写入数据的方法writeDB(传入路径参数)

public void writeDB(String filePath){ Connection conn = null; // 申明数据库连接对象 Statement stmt = null; // 申明数据库执行工具 int row = 0 ; // 数据库受影响行数 StringBuilder sql = new StringBuilder(); // 申明 SQL 拼接工具 sql.append("INSERT INTO t_student VALUES "); // INSERT 语句的开头 // 读取清洗后的 CSV 文件,拼接成 SQL 批量插入语句 ArrayList<String[]> list = FileUtil.CSV2ArrayStudent(filePath); for (String[] line: list) { // 循环每一行数据 sql.append("(null,"); // 一行的开始 for (String word: line) { // 循环每一行中的每个字段数据 if(word.length()==0){ sql.append("null").append("'").append(",");} else { sql.append("'").append(word).append("'").append(","); } word = word.replaceAll("\\s",""); // 替换字符串中所有的空格 sql.append("'").append(word).append("'").append(","); // 拼接每个字段 } // 一行中的每个字段,循环结束 sql.deleteCharAt(sql.length()-1); // 去掉最后一个字符,多余的 逗号 sql.append(") ,"); // 一行的结束 } sql.deleteCharAt(sql.length()-1); // 去掉最后一个字符,多余的 逗号 try { conn = JdbcUtil.getConnection(); // 获取数据库连接对象 stmt = conn.createStatement(); // 获取执行 SQL 的工具 row = stmt.executeUpdate(sql.toString()); // 执行拼接的 SQL System.out.println("受影响行数:"+ row ); // 打印受影响行数(插入多少条数据) } catch (SQLException e) { throw new RuntimeException(e); }finally { JdbcUtil.release(conn,stmt); // 回收资源 } }

去测试类调用批量写入数据的方法

public void writeDB(){ studentCommon.writeDB(); }

去MySQL里面执行查询总共数据条数的sql语句,核实插入的与数据条数和源数据条数是否一致:select count (stu_id from t_student)

相关思维导图模板

关于玉的思维导图思维导图

树图思维导图提供 关于玉的思维导图 在线思维导图免费制作,点击“编辑”按钮,可对 关于玉的思维导图  进行在线思维导图编辑,本思维导图属于思维导图模板主题,文件编号是:bfb71476203e1f873dd5c54a2f9588cb

中国汉字的起源与发展思维导图

树图思维导图提供 中国汉字的起源与发展 在线思维导图免费制作,点击“编辑”按钮,可对 中国汉字的起源与发展  进行在线思维导图编辑,本思维导图属于思维导图模板主题,文件编号是:004892bda8d4f647a62dd99565229ff2