您好我的代码中有一个输入文件。代码的作用是将每条记录插入到db2表中。有2个班级。
主类读取每条记录并调用另一个类的方法将行插入db2表。
我发现当插入失败并且重复插入时,控制再次转到调用者类,程序尝试从文件处理下一条记录。
我的理解是,一旦发现异常,程序将停止并且不会运行以供将来处理。任何人都可以指导。感谢
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
public class UpdateInsert {
public static void main(String[] args) {
BufferedReader br = null;
BufferedWriter bw = null;
Update upd = null;
try {
bw = new BufferedWriter(new FileWriter("H:\\exception.txt"));
} catch (IOException e1) {
e1.printStackTrace();
}
try {
br = new BufferedReader(new FileReader("H:\\file1.txt"));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
String s = "";
try {
while ((s = br.readLine()) != null) {
String[] vals = s.split(",");
if (vals.length < 3) {
bw.write("Invalid record found - " + s);
continue;
}
if (vals[0].equals(" ") | vals[1].equals(" ")) {
bw.write("Invalid record found - " + s);
} else {
upd = new Update();
upd.Setc1(vals[0]);
upd.Setc2(vals[1]);
upd.Setc3(vals[2]);
upd.MethodUpdate();
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
bw.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
br.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
class Update {
Statement stmt;
Connection con;
String c1 = "";
String c2 = "";
String c3 = "";
void Setc1(String c1) {
this.c1 = c1;
}
void Setc2(String c2) {
this.c2 = c2;
}
void Setc3(String c3) {
this.c3 = c3;
}
void MethodUpdate() {
String subsys1 = "", creator1 = "", sql = "";
subsys1 = "XXXX";
creator1 = "XXXXXXX";
sql = "'" + c1 + "'" + "," + c2 + "," + "'" + c3 + "'";
try {
Connection con = DBConn.getDBConnect();
stmt = con.createStatement();
stmt.executeUpdate("INSERT INTO " + subsys1 + "." + creator1
+ ".MY_TABLE VALUES ( " + sql + ")" + ";");
} catch (SQLException e) {
e.printStackTrace();
} }}
答案 0 :(得分:0)
一旦方法中出现异常,程序将不会停止。 catch
块执行,控制流回调用方法。
在您的情况下,如果方法catch
中的MethodUpdate()
阻止执行,则控件将返回到while
循环的下一次迭代:while ((s = br.readLine()) != null)
实质上,如果捕获到异常,则执行catch
块,然后执行catch
块之后的所有语句,并且控制像往常一样流动。在catch
块执行后,程序不会停止。
在生成异常的语句之后,唯一不会执行的语句是try
块中的语句。