Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用JDBC运行查询时发生SQLException_Java_Sql Server_Jdbc_Sqlexception - Fatal编程技术网

Java 使用JDBC运行查询时发生SQLException

Java 使用JDBC运行查询时发生SQLException,java,sql-server,jdbc,sqlexception,Java,Sql Server,Jdbc,Sqlexception,在我的程序中,我使用JDBC执行一些SQL查询。当我为此特定查询运行程序时,我得到以下错误: SQLException:线程“main”java.sql.SQLException中的异常:位于TransformData.main(TransformData.java:213) 以下是这部分代码: try { dbcon = DriverManager.getConnection(url,"username","password"); stmt =

在我的程序中,我使用JDBC执行一些SQL查询。当我为此特定查询运行程序时,我得到以下错误:

SQLException:线程“main”java.sql.SQLException中的异常:位于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);

     }
试试看
{
dbcon=DriverManager.getConnection(url,“用户名”、“密码”);
stmt=dbcon.createStatement();
stmt1=dbcon.createStatement();
stmt13=dbcon.createStatement();
stmt14=dbcon.createStatement();
String sql1=“按付款人id从交易订单中选择不同的付款人id”;
rs1=stmt1.executeQuery(sql1);
while(rs1.next())
{
整数payer_id=rs1.getInt(“payer_id”);
付款人标识。添加(付款人标识);
}
rs1.close();
stmt1.close();
对于(int i=0;i
第213行是这一行:
抛出新的SQLException(errorMessages)在捕获中。

我正在试图找到可能引发此异常的原因。有人能帮忙吗?

这段代码有很多地方出错,但这里有一个相关的提示:您的catch块出错了。这样写:

catch(SQLException e) {
    e.printStackTrace();
}
您的方式会从堆栈跟踪中耗尽所有有用的信息。你不能调试你还做错了什么

进行更改,重新运行代码,然后读取堆栈跟踪。它会告诉你你真正的问题是什么

要纠正的事情太多了:

  • 资源未正确关闭。这些应该在finally块中的单个try/catch块中完成
  • 编写糟糕的SQL。使用联接可以更有效地执行删除
  • 分解不良。这里隐藏了2到3种方法
  • 没有交易经理;没有酸
  • 没有连接池;应该传递到此方法中,而不是在范围中实例化
  • 应该使用
    PreparedStatement
    和绑定,而不是串接
    String
    我不确定,但看起来您有三个SQL查询:

  • 选择所有付款人ID
  • 获取付款人ID的计数
  • 删除从SELECT获得的列表中的所有付款人ID
  • 我读对了吗?如果是,为什么不在一个查询中这样做呢

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

    这段代码有很多错误,但这里有一个相关的提示:您的catch块是错误的。这样写:

    catch(SQLException e) {
        e.printStackTrace();
    }
    
    您的方式会从堆栈跟踪中耗尽所有有用的信息。你不能调试你还做错了什么

    进行更改,重新运行代码,然后读取堆栈跟踪。它会告诉你你真正的问题是什么

    要纠正的事情太多了:

  • 资源未正确关闭。这些应该在finally块中的单个try/catch块中完成
  • 编写糟糕的SQL。使用联接可以更有效地执行删除
  • 分解不良。这里隐藏了2到3种方法
  • 没有交易经理;没有酸
  • 没有连接池;应该传递到此方法中,而不是在范围中实例化
  • 应该使用
    PreparedStatement
    和绑定,而不是串接
    String
    我不确定,但看起来您有三个SQL查询:

  • 选择所有付款人ID
  • 获取付款人ID的计数
  • 删除从SELECT获得的列表中的所有付款人ID
  • 我读对了吗?如果是,为什么不在一个查询中这样做呢

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

    哪一个是第213行?@PritamBanerjee我在我的问题中说,
    抛出新的SQLException(errorMessages)如果您使用catch块来抑制异常,那么抛出会破坏这一点。打印堆栈跟踪以找出是什么导致它被抛出。在调试器中进入/跳过方法可能会向您显示一些额外的信息(您可以查看变量值并创建观察程序)。哪一个是第213行?@PritamBanerjee我在我的问题中说过,
    抛出新的SQLException(errorMessages)如果您使用catch块来抑制异常,那么抛出会破坏这一点。打印堆栈跟踪以找出是什么导致它被抛出。在调试器中单步执行/over方法可能会向您显示一些额外的信息(您可以查看变量值并创建观察者)。第二个查询有错误,因此我更正了它并运行程序。我不知道现在是否可以在一个查询中写入。然而,这
    e.printStackTrace()非常有用。多谢各位!第二个查询有错误,所以我更正了它,然后程序运行。我不知道现在是否可以在一个查询中写入。然而,这
    e.printStackTrace()非常有用。多谢各位!