我正在开发一个小项目来读取文本文档并将内容保存到数据库中。目前我的程序正在处理一个小缺陷。它读取文本文档并将其放入数据库中,但是当有多行时,我希望有多个插入。每一行都应该是一个新的插入(所有的行都有相同的结构)我使用标签信息,例如35 = 8我使用多个ifs只获得8但是用标签35 =等识别它。这是代码我到目前为止。
public class insert5 {
public static Properties loadPropertiesFile() throws Exception {
//
//declaring prop object
Properties prop = new Properties();
// reading properties file
InputStream in = new FileInputStream("jdbc.properties");
prop.load(in);
in.close();
return prop;
}
public static void main(String[] args) {
System.out.println("create jdbc connection using properties file");
Connection con = null;
Scanner userin = new Scanner(System.in);
// use try becuase it tends to fail sometimes and we want error messages
try {
//load properties file we have created
Properties prop = loadPropertiesFile();
//declare vars and get the properties at the same time
String driverClass = prop.getProperty("SQLSERVERJDBC.driver");
String url = prop.getProperty("SQLSERVERJDBC.url");
String username = prop.getProperty("SQLSERVERJDBC.username");
String password = prop.getProperty("SQLSERVERJDBC.password");
// have to instance driver
Class.forName(driverClass).newInstance();
// make connection object using the previous things as parameters
con = DriverManager.getConnection(url, username, password);
//this if is to verify the connection
if (con != null) {
System.out.println("connection created successfully using properties file");
}
else {
System.out.println(" unable to create connection");
}
BufferedReader reader = new BufferedReader(new FileReader(
"C:\\Users\\darroyo\\Desktop\\pruebasx.txt"));
ArrayList<String> array1 = new ArrayList<String>();
// Read line from file.
while (true) {
String line = reader.readLine();
if (line == null) {
break;
}
// Split line on space.
String[] parts = line.split("");
//part in parts
for (String part : parts) {
//part is the element in this case each fix tag with value
array1.add(part);
}
}
System.out.println(array1);
reader.close();
//creating the statement(should check to use prepared statement in the future
// fecha recp y fecha sentra in query and for and ? and order
String query = " insert into FRONTMC.HECHO (folio_hecho, folio_orden, emisora, serie,"
+ "clave_sentido, titulos_hecho, precio, importe, liquidacion, contraparte, id_estatus, isin, contrato,"
+ "secondary_exec_id, exec_id, F11_ClOrdID, fecha_recepcion, fecha_sentra)"
+ " values ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,convert(varchar(30),cast(? as datetime),120),convert(varchar(30),cast(? as datetime),120))";
// create the mysql insert preparedstatement
PreparedStatement preparedStmt = con.prepareStatement(query);
for(int counter =0; counter< array1.size();counter++){
if(array1.get(counter).substring(0, 3).equals("37=")){
preparedStmt.setString (1, array1.get(counter).substring(3));
}
if(array1.get(counter).substring(0, 3).equals("37=")){
preparedStmt.setString (2, array1.get(counter).substring(3));
}
// change emisora and serie to 48 with bd
if(array1.get(counter).substring(0, 3).equals("49=")){
preparedStmt.setString (3, array1.get(counter).substring(3));
}
if(array1.get(counter).substring(0, 4).equals("447=")){
preparedStmt.setString (4, array1.get(counter).substring(4));
}
if(array1.get(counter).substring(0, 3).equals("54=")){
preparedStmt.setString (5, array1.get(counter).substring(3));
}
if(array1.get(counter).substring(0, 3).equals("32=")){
preparedStmt.setString (6, array1.get(counter).substring(3));
}
if(array1.get(counter).substring(0, 3).equals("31=")){
preparedStmt.setString (7, array1.get(counter).substring(3));
}
if(array1.get(counter).substring(0, 4).equals("381=")){
preparedStmt.setString (8, array1.get(counter).substring(4));
}
if(array1.get(counter).substring(0, 3).equals("63=")){
preparedStmt.setString (9, array1.get(counter).substring(3));
}
if(array1.get(counter).substring(0, 4).equals("448=")){
preparedStmt.setString (10, array1.get(counter).substring(4));
}
if(array1.get(counter).substring(0, 4).equals("150=")){
preparedStmt.setString (11, array1.get(counter).substring(4));
}
if(array1.get(counter).substring(0, 3).equals("48=")){
preparedStmt.setString (12, array1.get(counter).substring(3));
}
if(array1.get(counter).substring(0, 2).equals("1=")){
preparedStmt.setString (13, array1.get(counter).substring(2));
}
if(array1.get(counter).substring(0, 4).equals("527=")){
preparedStmt.setString (14, array1.get(counter).substring(4));
}
if(array1.get(counter).substring(0, 3).equals("17=")){
preparedStmt.setString (15, array1.get(counter).substring(3));
}
if(array1.get(counter).substring(0, 3).equals("11=")){
preparedStmt.setString (16, array1.get(counter).substring(3));
}
if(array1.get(counter).substring(0, 3).equals("52=")){
String date = array1.get(counter).substring(3);
String date2 = date.substring(3,18);
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyMMdd");
SimpleDateFormat sdf2 = new SimpleDateFormat("dd/MM/yyyy");
String ds2 = sdf2.format(sdf1.parse(date));
String x = date.substring(9, 21);
String newfecha1 = ds2+" "+x;
System.out.println(newfecha1);
preparedStmt.setString (17, newfecha1);
}
if(array1.get(counter).substring(0, 3).equals("52=")){
String date = array1.get(counter).substring(3);
String date2 = date.substring(3,18);
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyMMdd");
SimpleDateFormat sdf2 = new SimpleDateFormat("dd/MM/yyyy");
String ds2 = sdf2.format(sdf1.parse(date));
String x = date.substring(9, 21);
String newfecha1 = ds2+" "+x;
System.out.println(newfecha1);
preparedStmt.setString (18, newfecha1);
}
}
// execute the preparedstatement
preparedStmt.execute();
//notifies you that it was completed
System.out.println("insert complete");
// loop to check the digits ex. for() array.1get(counter).substring(0,3).equals("23=")
//error messages
}catch (SQLException e) {
e.printStackTrace();
}
catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (con != null) {
con.close();
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
}
答案 0 :(得分:0)
try (BufferedReader br = new BufferedReader(new FileReader(path))) {
String line;
while ((line = br.readLine()) != null) {
// process the line.
}
}
catch (IOException e) {
System.err.println("Caught IOException: " + e.getMessage());
}
答案 1 :(得分:0)
要扩展Berger的注释,您应该创建一个辅助方法,该方法接收数组,准备语句并设置值。然后,在while循环中的for循环之后,使用数组调用该方法。这将为您文件中的每一行执行准备好的语句。
我还建议将array1.get(counter)设置为局部变量,以便于阅读。