0

データベースへのMySQLクエリを使用してMainActivityクラスから値を受け取った後、GridViewにいくつかのデータを表示する非常に単純なAndroidアプリを構築しようとしています。MySQLサーバーでクエリをテストしましたが、正しいのですが、アプリで実行すると、すべてが正確に1行を返します。実際には、実行するたびにwinScheduleQueryとlossScheduleQueryがそれぞれ0から10の範囲で返されるはずです。行程度、これはteamQuery結果の各行に対して。ですから、明らかに奇妙なことが起こっていますが、私には理解できません。クエリを実行するアクティビティクラスは次のとおりです。

public class ViewTeamsActivity extends Activity {

      ArrayList<String> scheduleData = new ArrayList<String>();
      String dcode;

      private void initClasses(String dcode){
        String teamResult = "";
        MySQLClient mc = 
            new MySQLClient("http://someServletURL/servlet/EMBLServices");
        try {
          String teamQuery = 
            "SELECT coach, tno FROM team WHERE dcode='" + dcode + "'";

          teamResult = mc.runSQL(teamQuery);
          String[] rows = teamResult.split("\n");
          Log.d("NUMBER_OF_COACHES", rows.length + "");
          String winResult = "";
          String lossResult = "";
          for(int i = 1; i < rows.length; i++){
            String[] cols = rows[i].split(",");
            String winScheduleQuery = 
                      "(SELECT * FROM schedule WHERE dcode='" + dcode + "' AND hometeam=" + cols[1] + 
                            " AND (homescore > awayscore))" +
                            " UNION ALL " +
                            "(SELECT * FROM  schedule WHERE dcode='" + dcode + "' AND awayteam=" + cols[1] + 
                            " AND (awayscore > homescore))";

            String lossScheduleQuery = 
                      "(SELECT * FROM schedule WHERE dcode='" + dcode + "' AND hometeam=" + cols[1] + 
                      " AND (homescore < awayscore))" +
                      "UNION ALL" +
                      "(SELECT * FROM schedule WHERE dcode='" + dcode + "' AND awayteam=" + cols[1] + 
                      " AND (awayscore < homescore))";

            winResult = mc.runSQL(winScheduleQuery);
            lossResult = mc.runSQL(lossScheduleQuery);
            String[] winRows = winResult.split("\n");
            String[] lossRows = lossResult.split("\n");
            scheduleData.add(cols[0] + "");
            scheduleData.add(winRows.length + "");
            scheduleData.add(lossRows.length + "");

            Log.d("Win query", winScheduleQuery);
            Log.d("Loss query", lossScheduleQuery);

          }
        } catch (Exception e) {
            Log.d("MyAppException",e.getMessage());
          } 

      }


      /** Called when the activity is first created. */
      @Override
      public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_view_teams);

        if (android.os.Build.VERSION.SDK_INT > 9) {
          StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
          StrictMode.setThreadPolicy(policy);
        }

        dcode = getIntent().getStringExtra("DCODE");
        initClasses(dcode);

        GridView scheduleDataGridView = (GridView)findViewById(R.id.gridview);
        ArrayAdapter<String> teamArrayAdapter = 
          new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, scheduleData);    
        scheduleDataGridView.setAdapter(teamArrayAdapter);
      }
}

SQLClientクラスは、サーブレットから受け取った行を改行文字(\ n)で分割します。そのため、lossResult、winResult、teamResultを'\ n'で分割して、クエリ結果を行に分割します。ログは「NUMBER_OF_COACHES」が正しいことを報告しているので、teamQueryは正しく機能しています。問題は、lossScheduleQueryとwinScheduleQueryです。ログはまた、winScheduleQueryとlossScheduleQueryを、私が思っていたとおりに報告します。

4

1 に答える 1

0

私はそれを考え出した。他の誰かが作成したMySQLClientクラスを使用していますが、何らかの理由で、selectステートメントに中括弧を含めることはできません。

于 2013-02-03T09:09:02.463 に答える