簡體   English   中英

Java 代碼中的語法錯誤,但在 MySQL 工作組中運行

[英]Syntax error in Java code, but running in MySQL workbanch

我的查詢在工作組中運行完美,但不能使用 Java 發送 MySQL 語法錯誤的異常:

Set @total=0;
SET @amountDue=0;
SELECT (l.paid_date),c.customer_name,IF(@total=0,(SELECT total_amount FROM 
payment_loan WHERE loan_id=99)-(SELECT (installment_amount_month) FROM
payment_loan WHERE loan_id=99)*(SELECT (total_installments) 
FROM payment_loan
   WHERE loan_id=99),
       (SELECT (installment_amount_month) FROM payment_loan WHERE
       loan_id=99))AS AmountDue,
           @amountDue:=@amountDue+(SELECT IF(@total=0,(SELECT (total_amount)
          FROM payment_loan WHERE loan_id=99)-(SELECT (installment_amount_month) FROM payment_loan 
        WHERE loan_id=99)*(SELECT (total_installments) FROM payment_loan 
        WHERE loan_id=99),(SELECT (installment_amount_month) FROM 
      payment_loan WHERE loan_id=99))) as ComulativeDue,
     l.amount AS AmountPaid, @total := @total +l.amount AS comulativePaid, 
     (@total/@amountDue ) as percentage FROM payments_details l Join 
     customer c on (c.customer_id=l.customer_id) WHERE l.customer_id=115 
    GROUP BY l.paid_date ORDER BY   l.paid_date DESC LIMIT 1  ;    

我的java代碼是:

     PreparedStatement stmt = (PreparedStatement) connection.Connect.con.prepareStatement(query);
        rs = stmt.executeQuery();
        while (rs.next()) {
            cName = rs.getString(2);
            amountDue = rs.getInt(3);
       }

錯誤:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: 你的 SQL 語法有錯誤; 檢查與您的 MySQL 服務器版本相對應的手冊,了解在 'SET @amountDue=0; 附近使用的正確語法; SELECT (l.paid_date),c.customer_name,IF(@total=0,(SELECT total' at line 2

默認情況下,不允許在單個調用中進行多個查詢。 在在單個語句中在 java 中執行的多個查詢中得到了很好的描述:

在發送連接請求時,您需要將連接屬性allowMultiQueries=true附加到數據庫 url。 這是對那些已經存在的附加連接屬性,例如autoReConnect=true等。 allowMultiQueries屬性的可接受值為truefalseyesno 任何其他值在運行時都會被拒絕並SQLException

 String dbUrl = "jdbc:mysql:///test?allowMultiQueries=true";

...

修改您的查詢,以便:

SELECT (l.paid_date),c.customer_name,IF(@total=0,(SELECT total_amount FROM 
payment_loan WHERE loan_id=99)-(SELECT (installment_amount_month) FROM
payment_loan WHERE loan_id=99)*(SELECT (total_installments) 
FROM payment_loan, (SELECT @total:=0, @amountDue:=0) setup
   WHERE loan_id=99),
       (SELECT (installment_amount_month) FROM payment_loan WHERE
       loan_id=99))AS AmountDue,
           @amountDue:=@amountDue+(SELECT IF(@total=0,(SELECT (total_amount)
          FROM payment_loan WHERE loan_id=99)-(SELECT (installment_amount_month) FROM payment_loan 
        WHERE loan_id=99)*(SELECT (total_installments) FROM payment_loan 
        WHERE loan_id=99),(SELECT (installment_amount_month) FROM 
      payment_loan WHERE loan_id=99))) as ComulativeDue,
     l.amount AS AmountPaid, @total := @total +l.amount AS comulativePaid, 
     (@total/@amountDue ) as percentage FROM payments_details l Join 
     customer c on (c.customer_id=l.customer_id) WHERE l.customer_id=115 
    GROUP BY l.paid_date ORDER BY   l.paid_date DESC LIMIT 1  ; 

暫無
暫無

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

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