前言:
在工作中,我时不时会遇到一些数据整理、数据清洗、数据统计等数据相关的小需求。有时候,我会把数据整理后放入数据库,通过SQL处理数据。如果SQL处理不了,我会从数据库中读取,放到Java程序中处理(PS:因为我使用Java语言比较顺手,Python和Shell简单的还可以,复杂的就不行了)。有时候,我也会直接从文件中读取数据,然后再放到Java程序中处理。
正文:
一、数据整理到数据库:
将数据整理到数据库的方法:我一般都是把数据放到Excel中,通过Navicat的导入功能将导入数据,然后再写SQl处理数据。
二、数据整理到Java程序中:
1. 从文件中读取数据:
从文件中读取数据,主要是使用Java处理I/O流的相关方法,将数据从文件中一行一行读取,存入Java内存。然后再通过Java程序处理数据,具体如下:
/**
* 通过文件读取数据
*
* @param filePath
* @return
*/
private static List<Map<String, String>> readDataByFile(String filePath) {
List<Map<String, String>> list = new ArrayList<>();
File file = new File(filePath);
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader(file));
String s = null;
// 使用readLine方法,一次读一行
while ((s = br.readLine()) != null) {
String[] array = s.split("#");
list.add(new HashMap<String, String>(4) {{
put("name", array[0]);
put("age", array[1]);
}});
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return list;
}
2. 从数据库中读取数据:
从数据库中读取数据,主要是使用Java的JDBC相关方法,首先注册相关数据库驱动,然后建立数据库连接,再执行相关SQL语句获取数据,再将数据存入Java内存中,最后不要忘记关闭数据库连接。具体实现如下:
private static final String DB_URL = "jdbc:mysql://localhost:3306/test?useSSL=false&useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true";
private static final String DB_USERNAME = "root";
public static final String DB_PASSWORD = "root";
public static final String SQL = "SELECT * FROM test";
/**
* 通过MySQL读取数据
*
* @return
*/
private static List<Map<String, String>> readDateByMySQL() {
List<Map<String, String>> list = new ArrayList<>();
Connection connection = null;
try {
// 注册驱动
DriverManager.registerDriver(new com.mysql.cj.jdbc.Driver());
// 创建连接
connection = DriverManager.getConnection(DB_URL, DB_USERNAME, DB_PASSWORD);
// 执行语句
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery(SQL);
// 获取元数据
ResultSetMetaData metaData = resultSet.getMetaData();
int columnCount = metaData.getColumnCount();
HashMap<String, String> map = null;
// 获取每一行数据
while (resultSet.next()) {
map = new HashMap<>(8);
for (int i = 0; i < columnCount; i++) {
// 获取列名
String colName = metaData.getColumnName(i + 1);
// 获取列对应的值
String value = resultSet.getString(colName);
map.put(colName, value);
}
list.add(map);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
// 关闭连接
try {
connection.close();
} catch (Exception ex) {
}
}
return list;
}
3.提示:
有时候,我们有可能在Liunx环境下执行单个Java文件,这时可以使用相应的java命令。但是要注意文件的编码格式,以及是否引用JDK以外的jar架包,举例如下:
Linux下编译和运行方法(多个jar包之间使用分号:):
javac -encoding UTF-8 -cp .:/data/test/mysql-connector-java-8.0.20.jar ./No1ReadData.java
java -Dfile.encoding=utf8 -cp .:/data/test/mysql-connector-java-8.0.20.jar No1ReadData
4.例子代码地址:
springboot_demo: springboot_demo springboot-java-basic-note模块 com.hanxiaozhang.practicalfunction.No1ReadData