0

第一个 while 循环仅遍历一个记录,然后另一个 while 循环遍历多个记录,但第一个 while 循环没有获得对第二个记录或更远的引用。我使用两个不同的结果集对象和单个语句对象我做错了什么请回复并提前感谢。

   public void generateCsvFile()
   {
       String vSQL = "";
       String mSQL = "";
       String mDealer_id = "";
        try
        {
            //mSQL = "mSQL"
            mSQL = "select distinct em_controller_id as dealer_id from entity_master";
            System.out.println("mSQL :: \n"+mSQL);
            rs1 = stmt.executeQuery(mSQL);

            while(rs1.next())
            {           

                //System.out.println("@#@# Dealer id @##@#::"+rs1.getString("dealer_id"));
                mDealer_id = rs1.getString("dealer_id");
                vSQL = "select e.em_entity_id,e.em_name,e.em_address_line_1,e.em_address_line_2,e.em_address_line_3,e.em_phone_no_1,e.em_phone_no_2,e.em_dob,e.em_pan_no,e.em_exch_client_id from entity_master e where e.em_controller_id='"+mDealer_id+"'";   
                System.out.println("vSQL :: \n"+vSQL);
                rs = stmt.executeQuery(vSQL);

                FileWriter writer = new FileWriter(mDealer_id+".csv");

                while(rs.next())
                {

                    System.out.println("em_entity_id !@!@!('"+mDealer_id+"') :: "+rs.getString("em_entity_id"));
                    System.out.println("ENTITY :: "+rs.getString("em_entity_id"));
                    writer.append(rs.getString("em_entity_id"));
                    writer.append(',');
                    writer.append(rs.getString("em_name"));
                    writer.append(',');
                    writer.append(rs.getString("em_address_line_1"));
                    writer.append(',');
                    writer.append(rs.getString("em_address_line_2"));
                    writer.append(',');
                    writer.append(rs.getString("em_address_line_3"));
                    writer.append(',');
                    writer.append(rs.getString("em_phone_no_1"));
                    writer.append(',');
                    writer.append(rs.getString("em_phone_no_2"));
                    writer.append(',');
                    writer.append(rs.getString("em_dob"));
                    writer.append(',');
                    writer.append(rs.getString("em_pan_no"));
                    writer.append(',');
                    writer.append(rs.getString("em_exch_client_id"));
                    writer.append('\n');
                }
                rs.close();
//              //generate whatever data you want
                writer.flush();
                writer.close();

            }
            rs1.close();

        }
        catch(Exception e)
        {
             e.printStackTrace();
        }
    }
4

2 回答 2

4

我怀疑这是问题所在:

rs1 = stmt.executeQuery(mSQL);
// later...
rs = stmt.executeQuery(vSQL);

看起来您Statement对两个并发查询使用相同的。我对那失败并不感到惊讶。使用两个单独Statement的变量 - 理想情况下,在您的方法中声明的变量。还:

  • 您还应该关闭finally块内的所有内容,这样即使抛出异常,您仍然可以关闭它们。
  • 您应该使用参数化 SQL 而不是这样的代码:

    where e.em_controller_id='"+mDealer_id+"'"
    
  • 您应该使用连接而不是执行 N+1 查询
于 2012-12-12T06:53:50.697 回答
2

从 Java API:

默认情况下,每个 Statement 对象只能同时打开一个 ResultSet 对象。因此,如果一个 ResultSet 对象的读取与另一个 ResultSet 对象的读取交错,则每个对象都必须由不同的 Statement 对象生成。Statement 接口中的所有执行方法都会隐式关闭语句的当前 ResultSet 对象(如果存在打开的对象)。

http://docs.oracle.com/javase/1.4.2/docs/api/java/sql/Statement.html

于 2012-12-12T06:53:48.953 回答