java - 将 SqlRowSet 导出到文件
问题描述
我想将通过 JDBC 触发的 SQL 查询的结果导出到文件中;然后在稍后的某个时间导入该结果。
我目前正在通过查询数据库来做到这一点NamedParameterJdbcTemplate
,Spring
其中一个返回一个SqlRowSet
我可以迭代的。在每次迭代中,我提取所需的字段并将结果转储到CSV
文件中,使用PrintWriter
.
final SqlRowSet rs = namedJdbcTemplate.queryForRowSet(sql,params);
while (rs.next()) {
问题是当我读回文件时,它们都是String
s ,我需要将它们转换为正确的类型,例如Integer
,String
等Date
。
while (line != null) {
String[] csvLine = line.split(";");
Object[] params = new Object[14];
params[0] = csvLine[0];
params[1] = csvLine[1];
params[2] = Integer.parseInt(csvLine[2]);
params[3] = csvLine[3];
params[4] = csvLine[4];
params[5] = Integer.parseInt(csvLine[5]);
params[6] = Integer.parseInt(csvLine[6]);
params[7] = Long.parseLong(csvLine[7]);
params[8] = formatter.parse(csvLine[8]);
params[9] = Integer.parseInt(csvLine[9]);
params[10] = Double.parseDouble(csvLine[10]);
params[11] = Double.parseDouble(csvLine[11]);
params[12] = Double.parseDouble(csvLine[12]);
params[13] = Double.parseDouble(csvLine[13]);
batchParams.add(params);
line = reader.readLine();
}
有没有更好的方法将其导出SqlRowSet
到文件中,以方便以后的导入过程;某种存储模式以便更轻松地插入数据库的方法?
解决方案
如果解析是您关心的问题,处理此问题的一种方法是,
- 创建一个解析器
Factory
接口,比如说ParserFactory
- 创建一个解析接口,比如说
MyParser
- 已
MyParser
使用 Factory MethodPattern
等实现IntegerParser implements MyParser
。 - 将工厂类名称作为 CSV 中的标题
这样你的调用代码看起来像,
List<String> headerRow = reader.readLine().split(";"); // Get the 1st row here
Map<String, MyParser> parsers = new HashMap<>();
for(int i = 0; i < headerRow.length(); i++) {
if(!parser.containsKey(headerRow[i]))
parsers.put(headerRow[i], ParserFactory.get(headerRow[i]));
}
line = reader.readLine();
while (line != null) { // From 2nd row onwards
String[] row = line.split(";");
Object[] params = new Object[row.length()];
for(int i = 0; i<row.length(); i++) {
params[i] = parser.get(headerRow[i]).parse(row[i]);
}
batchParams.add(params);
line = reader.readLine();
}
您可能希望将解析器映射的创建提取到它自己的方法中。或者让您ParserFactory
作为headerRow
参数,并返回相应的解析器作为结果。就像是,
List<String> headerRow = reader.readLine().split(";"); // Get the 1st row here
Map<String, MyParser> parsers = ParserFactory.getParsers(headerRow);
推荐阅读
- r - 匹配子字符串和其他变量
- javascript - Stenciljs 路由问题
- javascript - 使用鼠标在 HTML5 画布上绘图时,鼠标位置未正确定位
- javascript - 触摸 datazoom 的滑块时出现 eCharts 错误
- android - playAnimation() 不会触发抽签动画
- postgresql - 将 Postgres 服务与自定义容器映像连接的 Github 操作
- asp.net-core - 带有 ViewComponent 的 Net Core 中的模态窗口
- angular - 具有多个参数的角度路由,其中一些在中间
- powershell - 在命令提示符下从 WebClient.DownloadString 运行 Powershell 脚本
- macos - 在 Applescript 中获取所选 Apple Note 的 ID