【发布时间】:2019-01-02 23:08:44
【问题描述】:
我有一个包含几行的文本文件。
我想将整行添加到数据库表中。
在插入到表之前,它应该是substring 以获取数据库表的字段值。我认为我的代码(查询)不适合大数据。我知道还有其他方法可以做到这一点。
public class ReaderFilesData {
LinkedList<String> listFiles = new LinkedList<String>();
private Path path = Paths.get("src/FilesDownloaded/");
DataTRX dataTRX = new DataTRX();
public void readFiles() {
File[] listFile = new File(path.toString()).listFiles();
for (File file : listFile) {
if (file.isFile()) {
listFiles.add(file.getName());
}
}
System.out.println("Total Files : " +listFiles.size());
}
public void readData() {
Path pathsourceFile;
String line;
BufferedReader reader;
for (int i=0; i<listFiles.size(); i++) {
try {
String fileName = listFiles.get(i);
System.out.println("FileName : " +fileName);
pathsourceFile = Paths.get("src/FilesDownloaded/"+fileName+"");
reader = new BufferedReader(new FileReader(pathsourceFile.toString());
while ((line = reader.readLine())!=null) {
int startPoint = line.lastIndexOf(';')+1;
String valueLine = new String(line.substring(startPoint));
System.out.println("Transaction data : " +valueLine);
dataTRX.setId(valueLine.substring(0,2));
dataTRX.setAmount(Integer.parseInt(valueLine.substring(2, 10)));
dataTRX.setDesc(valueLine.substring(10, 18));
System.out.println("getId : " + dataTRX.getId());
System.out.println("getAmount : " + dataTRX.getAmount());
System.out.println("getDesc : " + dataTRX.getDesc());
importData(dataTRX.getId(),
dataTRX.getAmount(),
dataTRX.getDesc(),
}
reader.close();
} catch (Exception e) {
e.getMessage();
}
}
}
public void importData(String id, int amount, String discount ) {
String insertData = "INSERT INTO tbl_trx (id, amount, desc) "
+ "VALUES (?,?,?)";
try {
try (PreparedStatement ps = GeneralRules.conn.prepareStatement(insertData)) {
ps.setString(1, id);
ps.setInt(2, amount);
ps.setString(4, desc);
ps.executeUpdate();
System.out.println("Data successfully update to database!!!\n");
ps.close();
}
} catch (Exception e) {
e.getMessage();
}
}
这是file.txt的示例数据
- 320000000200000001
- 2G0000000500000002
- AB0000001500000001
我在上面一行做子字符串数据库:
- 子字符串 id,amount,discount (32,00000002,00000001)
- 子字符串 id,amount,discount (2G,00000005,00000002)
- 子字符串 id,amount,discount (AB,00000015,00000001)
【问题讨论】:
-
真正的问题是什么?
-
在尝试提出更多问题之前,请先阅读How do I ask a question that is answerable?,这样您才能更好地准备好并能够提出一个广受欢迎且更重要的是可回答的问题。。跨度>
-
主要基于意见 - 许多好的问题会根据专家经验产生一定程度的意见,但这个问题的答案往往几乎完全基于意见,而不是事实、参考资料或特定专业知识。请先阅读What types of questions should I avoid asking?,然后再尝试自动提出过于宽泛的更多问题。
标签: java postgresql filereader java-io