私はジャスパーレポートを生成すると、Javaでデータを表示するには、このクエリを使用しMySQLのデータ操作クエリは結果を返しません?
DROP TABLE IF EXISTS tmp_acc;
DROP TABLE IF EXISTS tmp_loan;
CREATE
TEMPORARY TABLE
IF NOT EXISTS
tmp_acc AS
(SELECT
ac.date,
COALESCE((SELECT SUM(cash) FROM accounts WHERE MONTH(date) = MONTH(ac.date - INTERVAL 1 MONTH) AND YEAR(date) = YEAR(ac.date - INTERVAL 1 YEAR)), 0)AS op_cash,
COALESCE((SELECT SUM(bank) FROM accounts WHERE MONTH(date) = MONTH(ac.date - INTERVAL 1 MONTH) AND YEAR(date) = YEAR(ac.date - INTERVAL 1 YEAR)),0)AS op_bank,
COALESCE((SELECT SUM(ho_funds) FROM accounts WHERE date = ac.date), 0)AS ho_funds,
COALESCE((SELECT SUM(recieved) FROM funds WHERE date = ac.date AND branch_to = 'kandy' AND method = 'Cash'),0)AS funds_cash,
COALESCE((SELECT SUM(recieved) FROM funds WHERE date = ac.date AND branch_to = 'kandy' AND method = 'Bank'),0)AS funds_bank,
COALESCE((SELECT SUM(diposit) FROM bank WHERE date = ac.date),0)AS diposits,
COALESCE((SELECT SUM(withdraw) FROM bank WHERE date = ac.date),0)AS withdrawals
FROM accounts ac);
CREATE
TEMPORARY TABLE
IF NOT EXISTS
tmp_loan AS
SELECT ls.date, COUNT(l.idloan)AS count, l.interest,l.admission_fee,l.document_fee,l.insuarance,
(SELECT SUM(d1.overdue) FROM daily_collections d1 WHERE d1.loan_idloan = l.idloan)AS overdue_collection,
ls.completed_date
FROM loan l
LEFT OUTER JOIN daily_collections d ON l.idloan = d.loan_idloan
JOIN loan_session ls ON ls.loan_idloan = l.idloan
WHERE ls.completed = 'Yes'
GROUP BY ls.completed_date,l.interest;
SELECT
a.date,COALESCE(a.op_cash,0)AS op_cash,COALESCE(a.op_bank,0)AS op_bank, COALESCE(a.ho_funds,0)AS ho_funds,
COALESCE(a.funds_cash,0)AS funds_cash, COALESCE(a.funds_bank,0)AS funds_bank,COALESCE(a.diposits,0)AS diposits, COALESCE(a.withdrawals,0)AS withdrawals,
COALESCE(l.count,0)AS count, COALESCE(l.interest,0)AS interest, COALESCE(l.admission_fee,0)AS admision_fee,
COALESCE(l.document_fee,0)AS document_fee, COALESCE(l.insuarance,0)AS insrance, COALESCE(l.overdue_collection,0)AS overdue_collection
FROM tmp_acc a
LEFT OUTER JOIN tmp_loan l ON a.date = l.completed_date
WHERE MONTH(a.date) = MONTH(current_date())
、複数のテーブルからデータを取得するには、このクエリを作成しました。このクエリは、ワークベンチでうまく動作し、すべての結果を返します。
しかし、Javaでは動作しません。私はStatement.executeQuery()
を使用し、ResultSet
に割り当てました。私はResultSet
を印刷しましたが、何も印刷されていません。
Javaでこのクエリを実行するにはどうすればよいですか?デフォルトの設定で
Javaコード
public ArrayList<cashObject> getCashbookData(String date) {
ArrayList<cashObject> results = new ArrayList<>();
try {
conn c = new conn();
String query = "DROP TABLE IF EXISTS tmp_acc;\n"
+ "DROP TABLE IF EXISTS tmp_loan;\n"
+ " \n"
+ " CREATE \n"
+ " TEMPORARY TABLE \n"
+ " IF NOT EXISTS \n"
+ " tmp_acc AS \n"
+ " (SELECT\n"
+ " ac.date,\n"
+ " COALESCE((SELECT SUM(cash) FROM accounts WHERE MONTH(date) = MONTH(ac.date - INTERVAL 1 MONTH) AND YEAR(date) = YEAR(ac.date - INTERVAL 1 YEAR)), 0)AS op_cash,\n"
+ " COALESCE((SELECT SUM(bank) FROM accounts WHERE MONTH(date) = MONTH(ac.date - INTERVAL 1 MONTH) AND YEAR(date) = YEAR(ac.date - INTERVAL 1 YEAR)),0)AS op_bank,\n"
+ " COALESCE((SELECT SUM(ho_funds) FROM accounts WHERE date = ac.date), 0)AS ho_funds,\n"
+ " COALESCE((SELECT SUM(recieved) FROM funds WHERE date = ac.date AND branch_to = 'kandy' AND method = 'Cash'),0)AS funds_cash,\n"
+ " COALESCE((SELECT SUM(recieved) FROM funds WHERE date = ac.date AND branch_to = 'kandy' AND method = 'Bank'),0)AS funds_bank,\n"
+ " COALESCE((SELECT SUM(diposit) FROM bank WHERE date = ac.date),0)AS diposits,\n"
+ " COALESCE((SELECT SUM(withdraw) FROM bank WHERE date = ac.date),0)AS withdrawals\n"
+ " FROM accounts ac);\n"
+ " \n"
+ " CREATE \n"
+ " TEMPORARY TABLE \n"
+ " IF NOT EXISTS \n"
+ " tmp_loan AS \n"
+ " SELECT ls.date, COUNT(l.idloan)AS count, l.interest,l.admission_fee,l.document_fee,l.insuarance,\n"
+ " \n"
+ " (SELECT SUM(d1.overdue) FROM daily_collections d1 WHERE d1.loan_idloan = l.idloan)AS overdue_collection,\n"
+ " ls.completed_date\n"
+ " FROM loan l \n"
+ " LEFT OUTER JOIN daily_collections d ON l.idloan = d.loan_idloan \n"
+ " JOIN loan_session ls ON ls.loan_idloan = l.idloan\n"
+ " WHERE ls.completed = 'Yes'\n"
+ " GROUP BY ls.completed_date,l.interest;\n"
+ " \n"
+ " SELECT\n"
+ " a.date,COALESCE(a.op_cash,0)AS op_cash,COALESCE(a.op_bank,0)AS op_bank, COALESCE(a.ho_funds,0)AS ho_funds,\n"
+ " COALESCE(a.funds_cash,0)AS funds_cash, COALESCE(a.funds_bank,0)AS funds_bank,COALESCE(a.diposits,0)AS diposits, COALESCE(a.withdrawals,0)AS withdrawals,\n"
+ " COALESCE(l.count,0)AS count, COALESCE(l.interest,0)AS interest, COALESCE(l.admission_fee,0)AS admision_fee,\n"
+ " COALESCE(l.document_fee,0)AS document_fee, COALESCE(l.insuarance,0)AS insrance, COALESCE(l.overdue_collection,0)AS overdue_collection\n"
+ " FROM tmp_acc a \n"
+ " LEFT OUTER JOIN tmp_loan l ON a.date = l.completed_date\n"
+ " WHERE MONTH(a.date) = '" + date + "' ";
Statement st = c.getConnection().createStatement();
ResultSet rs =st.executeQuery(query);
System.out.println("RS :: " + rs);
while (rs.next()) {
cashObject o = new cashObject();
o.setDate(rs.getString(0));
o.setOp_cash(parseDouble(rs.getString(1)));
o.setOp_bank(parseDouble(rs.getString(2)));
o.setHo_funds(parseDouble(rs.getString(3)));
o.setFunds_cash(parseDouble(rs.getString(4)));
o.setFunds_bank(parseDouble(rs.getString(5)));
o.setDiposits(parseDouble(rs.getString(6)));
o.setWithdrawals(parseDouble(rs.getString(7)));
o.setCount(parseInt(rs.getString(8)));
o.setInterest(parseDouble(rs.getString(9)));
o.setAdmission_fee(parseDouble(rs.getString(10)));
o.setDocument_fee(parseDouble(rs.getString(11)));
o.setInsuarance(parseDouble(rs.getString(12)));
o.setOverdueCollection(parseDouble(rs.getString(13)));
results.add(o);
}
} catch (SQLException e) {
logger.error(e.getMessage());
}
// print size of arraylist
System.out.println("CLASS : " + results.size());
return results;
}
あなたが主張しているJavaコードが動作していないため、誰が知っていますか?あなたのコードをデバッグしようとしましたか? – jdv
@jdvありがとう、javaコード –
を追加しました。本当にJasperReportsを使用していますか? JRを使用している場合、 'Statement.executeQuery()'を使用する理由は何ですか? –