异常捕获控制后返回调用者类

时间:2015-12-31 06:02:45

标签: java try-catch

您好我的代码中有一个输入文件。代码的作用是将每条记录插入到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();

        }   }}

1 个答案:

答案 0 :(得分:0)

一旦方法中出现异常,程序将不会停止。 catch块执行,控制流回调用方法。

在您的情况下,如果方法catch中的MethodUpdate()阻止执行,则控件将返回到while循环的下一次迭代:while ((s = br.readLine()) != null)

实质上,如果捕获到异常,则执行catch块,然后执行catch块之后的所有语句,并且控制像往常一样流动。在catch块执行后,程序不会停止。

在生成异常的语句之后,唯一不会执行的语句是try块中的语句。