簡體   English   中英

使用JDBC運行查詢時出現SQLException

[英]SQLException while running a query with JDBC

在我的程序中,我使用JDBC執行一些SQL查詢。 當我為該特定查詢運行程序時,出現以下錯誤:

SQLException:線程“主”中的異常java.sql.SQLException:at TransformData.main(TransformData.java:213)

這是這段代碼:

    try
    {
        dbcon = DriverManager.getConnection(url,"username","password");
        stmt = dbcon.createStatement();
        stmt1 = dbcon.createStatement();
        stmt13 = dbcon.createStatement();
        stmt14 = dbcon.createStatement();
        String sql1 = "SELECT DISTINCT payer_id FROM transactions ORDER BY payer_id";
        rs1 = stmt1.executeQuery(sql1);

        while (rs1.next())
        {
            Integer payer_id = rs1.getInt("payer_id");
            payer_ids.add(payer_id);
        }
        rs1.close();
        stmt1.close();
        for(int i = 0; i < payer_ids.size(); i++)
        {
            String sql13 = "SELECT COUNT(*)  AS counter, isCOrporate FROM transformed_table WHERE payer_id = "+payer_ids.get(i)+" ";
            rs5 = stmt13.executeQuery(sql13);
            while(rs5.next())
            {
                int counter = rs5.getInt("counter");
                int isCorporate = rs5.getInt("isCorporate");
                if ((counter - payer_ids.get(i).intValue() - isCorporate) < 1)
                {
                    String sql14 = "DELETE FROM transformed_table WHERE payer_id = "+payer_ids.get(i)+" ";
                    stmt14.executeUpdate(sql14);
                }
            }
        }
        rs5.close();
        stmt13.close();
        stmt14.close();

        dbcon.close();
     }
     catch(SQLException e)
     {
         System.out.print("SQLException: ");
                        throw new SQLException(errorMessages);

     }

213行是這一行: throw new SQLException(errorMessages); 趕上。 我試圖找到可能引發此異常的原因。 有人可以幫忙嗎?

這段代碼有很多地方出錯,但這是相關的提示:您的catch塊是錯誤的。 這樣寫:

catch(SQLException e) {
    e.printStackTrace();
}

您的方式將所有有用的信息從堆棧跟蹤中清除。 您無法調試其他錯誤操作。

進行更改,重新運行代碼,並讀取堆棧跟蹤。 它會告訴您真正的問題是什么。

要糾正的事情很多:

  1. 資源未正確關閉。 這些應該在finally塊中的單獨try / catch塊中完成。
  2. 編寫錯誤的SQL。 使用JOIN可以更有效地完成DELETE。
  3. 分解不良。 這里藏有2或3種方法。
  4. 沒有交易經理; 沒有ACID。
  5. 沒有連接池; 應該傳遞給此方法,而不是在范圍內實例化。
  6. 應該使用PreparedStatement和綁定而不是串聯String

我不確定,但是看起來您有三個SQL查詢:

  1. 選擇所有付款人ID
  2. 獲取COUNT個付款人ID
  3. 刪除您從SELECT獲取的列表中的所有付款人ID。

我能正確閱讀嗎? 如果是,為什么不像這樣在一個查詢中這樣做呢?

DELETE 
FROM transformed_table 
WHERE payer_id IN (SELECT DISTINCT payer_id FROM transactions)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM