【问题标题】:After exception caught control going back to caller class在异常捕获控制返回调用者类之后
【发布时间】: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 子句,它实际上是在为你处理这个问题。
  • 在您的问题中分享您的代码,男士/女士!

标签: java try-catch


【解决方案1】:

一旦在方法中捕获到异常,程序不会停止。 catch 块执行并且控制流回调用方法。

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

本质上,如果捕获到异常,则执行catch 块,然后执行catch 块之后的所有语句,控制流程照常进行。 catch 块执行后程序不会停止。

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

【讨论】:

    猜你喜欢
    • 2016-10-29
    • 1970-01-01
    • 2014-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-08
    相关资源
    最近更新 更多