2017-05-02 22 views
1

我試圖執行一個Biggest SQL和6個日期參數,並在JTable中顯示,但它不執行,我不知道實際的問題是什麼。PreparedStatement參數不在Java中執行的最大查詢

但令人困惑的是,我能夠執行與固定參數使用Statement接口和顯示JTable中相同的查詢,但無法使用,以顯示PreparedStatement

我的源代碼:

public String start_date; 
    public String end_date; 

    public void getMonthWithDropCombobox() 
    { 
     if(month_sands.getSelectedIndex() != -1){ 
      int monthnumber = month_sands.getSelectedIndex() + 1; 

      if(monthnumber>=9) 
      { 
       month=String.valueOf(monthnumber); 

      }else 
      { 
       month="0"+String.valueOf(monthnumber); 
      } 

     } 

     String dateString = year_sands.getSelectedItem().toString()+"-"+month+"-"+"01"; 
     DateTimeFormatter dateFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd", Locale.US); 
     LocalDate date = LocalDate.parse(dateString, dateFormat); 
     LocalDate startDate=date.withDayOfMonth(1); 
     LocalDate endDate = date.withDayOfMonth(date.getMonth().maxLength()); 

     start_date=startDate.toString(); 
     end_date=endDate.toString(); 


    } 

    public void getAllVendorDetails() 
    { 
     getMonthWithDropCombobox(); 

     StockAndSales sas1=new StockAndSales(); 
     if(company_dropdown_sas.getSelectedItem().equals("View All Vendors")) 
     { 

      try { 


       String totalStockAndSales="select '' as Vendor_Company, '', product, price,sellprice, openingstock as openingStock, " 
       + "openingstock*price as op_value, receipts as receipts, receipts*price as re_value, totalstock as totalstock, " 
       + "totalstock*price as ts_value, sales as sales, sales*sellprice as s_value, return as returns,return*sellprice " 
       + "as rt_value, closingstock as closingstock, closingstock*price as cl_value from purchase_table where date " 

       + "between ? and ? " 

       + "union all select orgname , 'TOTAL', '', sum(price),sum(sellprice), sum(openingstock) as openingStock, " 
       + "sum(openingstock*price) as op_value, sum(receipts) as receipts, sum(receipts*price) as re_value, sum(totalstock) " 
       + "as totalstock, sum(totalstock*price) as ts_value, sum(sales) as sales, sum(sales*sellprice) as s_value, sum(return) " 
       + "as returns,sum(return*sellprice) as rt_value, sum(closingstock) as closingstock, sum(closingstock*price) as cl_value " 
       + "from purchase_table where date " 

       + "between ? and ? " 

       + "group by orgname union all select 'Grand Total' , '', '',sum(price),sum(sellprice), sum(openingstock) as " 
       + "openingStock, sum(openingstock*price) as op_value, sum(receipts) as receipts, sum(receipts*price) as re_value, " 
       + "sum(totalstock) as totalstock, sum(totalstock*price) as ts_value, sum(sales) as sales, sum(sales*sellprice) as " 
       + "s_value, sum(return) as returns,sum(return*sellprice) as rt_value, sum(closingstock) as closingstock, " 
       + "sum(closingstock*price) as cl_value from purchase_table where date " 

       + "between ? and ? " 

       + "orde0r by closingstock asc"; 



      PreparedStatement ps_tsas=connection.prepareStatement(totalStockAndSales); 
      ps_tsas.setString(1, start_date); 
      ps_tsas.setString(2, end_date); 
      ps_tsas.setString(3, start_date); 
      ps_tsas.setString(4, end_date); 
      ps_tsas.setString(5,start_date); 
      ps_tsas.setString(6, end_date); 

      ResultSet set_tsas=ps_tsas.executeQuery(); 
      sas1.table_sas.setModel(DbUtils.resultSetToTableModel(set_tsas)); 
      sas1.show_month_year_sas.setText("All Vendors Stock and Sales"); 
      sas1.name_of_user.setText(user_name_display.getText()); 
      sas1.setVisible(true); 
      return; 
     } catch (Exception e) { 
      // TODO: handle exception 
     } 
     } 

    } 
+1

不要只是吞下異常(// TODO:處理異常)。至少打印出異常消息+堆棧跟蹤。有了這個異常消息,它也會更容易幫助(假設拋出異常) –

+1

查詢中日期的字符串表示形式與DB側的預期格式不匹配。嘗試使用'PreparedStatement'的'setDate(int parameterIndex,java.sql.Date)'方法。 – Berger

回答

2

取而代之的setString()那裏日期setDate()

ps_tsas.setDate(1, java.sql.Date.valueOf(start_date)); 

實例有R實際日期:

ps_tsas.setDate(1, java.sql.Date.valueOf("2017-05-22")); 

對於其他日期也是如此。

+1

我不知道如何感謝你,但是,我真的很高興你幫了我,從我工作+1,但我有點困惑,在我所有以前的準備聲明的我用setString所有日期參數它的工作,但爲什麼它不適用於這個特定的查詢。任何合理的答案 –

相關問題