这是我下面的数据库,我正在用java编码,而我的工作区是eclipse

java - 使用MySQL #JAVA的SQL查询-LMLPHP

我的问题是这样的:例如,我试图对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

10-07 23:29