这是来自.txt文件的数据:
** S12 * * T0 0889 * B * 99 * N1C0〜** S12 * * T0 0880 * B * 99 * N1C0〜
这是我从.txt文件中读取数据的代码:
{
in = new BufferedReader(new FileReader("2.txt"));
String read = null;
while ((read = in.readLine()) != null) {
read = in.readLine();
String[] splited = read.split("\\*+");
PreparedStatement ps = null;
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");//Data Source Driver
Connection con=DriverManager.getConnection("jdbc:odbc:testing");//Data Connection
for (String part : splited){
ps=con.prepareStatement("insert into testing (d3)values('"+part+"')");//inserting data
System.out.println(part);//printing inserted data
System.out.println("inserted");//insertion confirmation
ps.executeUpdate();
}
从我的代码中我已经能够在“*”之间拆分数据并将其存储在一个数组中(拆分)。因此在数据库中,只插入了一列。
“*”之间的数据属于数据库中的单独列。
问题1: 我需要首先在“〜”之间分隔数据,然后在“*”之间分隔数据。 问题2: 我需要将分离的数据分组到数组中,以便以后可以插入到数据库中(每个数据在数据库中都有自己的列)。
预期输出:在数据库中(ms-Access)
S12 | T0 | S12 | B | 99 | N1C0 |< - 插入元素
答案 0 :(得分:0)
这样的事情:
public class Answer28535326 {
private static String input = "**S12*T0*0889*B*99*N1C0~**S12*T0*0880*B*99*N1C0~";
public static void main(String[] args)
{
String[] records = input.split("~");
for (String record : records)
{
System.out.println(record);
StringTokenizer tokenizer = new StringTokenizer(record, "*", false);
while(tokenizer.hasMoreTokens())
{
System.out.println(tokenizer.nextToken());
}
System.out.println("");
}
}
}
答案 1 :(得分:0)
尝试批量添加
public class Answer28535326 {
private static void addRows(PreparedStatement ps, String line) throws SQLException {
String[] records = line.split("~");
for (String record : records) {
String[] values = record.replaceAll("^\\*+", "").split("\\*+");
for (int i = 0; i < values.length; i++) {
ps.setString(i + 1, values[i]);
}
ps.addBatch();
}
}
public static void main(String[] args) throws Exception {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");// Data Source Driver
try ( Connection con = DriverManager.getConnection("jdbc:odbc:testing") ) {
try ( PreparedStatement ps = con.prepareStatement("insert into testing (d1, d2, d3, d4, d5, d6) values(?, ?, ?, ?, ?, ?)") ) {
try (BufferedReader in = new BufferedReader(new FileReader("2.txt"))) {
String read = null;
while ((read = in.readLine()) != null) {
read = in.readLine();
addRows(ps, read);
}
ps.executeBatch();
}
}
}
}
}
编辑:按要求说明
原始代码是它将每一列作为新行插入 数据库。 解决方案是使用准备好的语句 所有表格的列值的占位符
由于每行可能有1+条记录添加了一个方法 每行处理多个记录并将其作为批处理添加