这是我下面的数据库,我正在用java编码,而我的工作区是eclipse
我的问题是这样的:例如,我试图对1月份的每个月的monthlypaid
列求和,但appartmentnum除外:1:每付款一次
值0表示(该月未付款)
所以在一月530 + 530 + 700 + 660 + 490 + 200
然后在570 + 530 + 700 + 200
我应该像这样打印1月1日和2月2日
我不知道怎么做
我尝试过但是我认为我离解决方案还很遥远
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