【发布时间】:2015-12-31 06:02:45
【问题描述】:
您好,在我的代码中有一个输入文件。代码的工作是将每条记录插入到 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();
} }}
【问题讨论】:
-
那是因为你在方法中捕获了异常。仔细检查您的代码。你会找到一个
catch子句,它实际上是在为你处理这个问题。 -
在您的问题中分享您的代码,男士/女士!