[英]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
屬性的可接受值為true
、false
、yes
和no
。 任何其他值在運行時都會被拒絕並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.