Это моя база данных ниже. Я кодирую java, и мое рабочее пространство - eclipse.
Мой вопрос звучит так: я пытаюсь суммировать столбцы monthlypaid
для каждого месяца, например, в январе, за исключением appartmentnum: 1 каждый платит, где значение 0 означает (не выплачивалось в этом месяце)
Так в январе 530 + 530 + 700 + 660 + 490 + 200
и может быть 570 + 530 + 700 + 200
Я должен напечатать это, как это, 1, январь sum 2, febsum, и у меня нет подсказки, как это сделать
Я пробовал это, но я думаю, что я далеко от решения
public static String select_Month_payment(String username) {
int i=1;
String answer="",ans="";
try {
PreparedStatement statement = connect.prepareStatement("select january,february,march,april,may,june,july,august,september,october,november,december from tenant where username= "+"'"+username+"'");
ResultSet result = statement.executeQuery();
while(result.next())
{
for (i=1;i<13;i++)
{
answer=result.getString(i);
if(!answer.matches("0") )
ans+= answer + " " ;
}
}
} catch (SQLException var2) {
var2.printStackTrace();
}
return ans;
}
Вы можете попробовать:
Double sum = 0.0;
PreparedStatement pstmt = conn.prepareStatement("SELECT sum(monthlyPaid) as ans FROM tenant WHERE username = ?");
pstmt.setString(1, YOUR_USER_NAME);
res = pstmt.executeQuery();
sum = res.getString(1);
В SQL есть встроенная функция, которая возвращает сумму столбца. Возможно, вам не захочется изобретать колесо, когда оно уже есть.
ПЛЮС:
Конкатенация переменной по вашему запросу является плохой практикой. Ваше приложение будет уязвимым для sql injections
. Использовать ?
вместо этого он называется named perimeters
как этот: pstmt.setDouble(n, YOUR_VARIABLE);
,
Для получения дополнительной информации см. Https://www.javaworld.com/article/2077706/core-java/named-parameters-for-preparedstatement.html.