【问题标题】:Storing rows from a MySQL table into an array in Java将 MySQL 表中的行存储到 Java 中的数组中
【发布时间】:2014-03-18 09:19:54
【问题描述】:

我正在尝试将表中的行存储到数组中。我可以获得第一个结果并存储它,但我似乎无法存储任何其他数据。

这是我写的代码

try 
    {
        test = "select * from Arsenal order by 'MatchNumber' ASC";                
        rs = st.executeQuery(test); 

        while (rs.next()) 
        {
            //This retrieves each row of Arsenal table and adds it to an array in the Team Results class.

            matchno = rs.getString("MatchNumber");                    
            hometeam = rs.getString("HomeTeam");                      
            awayteam = rs.getString("AwayTeam");                         
            homegoals = rs.getString("HomeGoals");                   
            awaygoals = rs.getString("AwayGoals");                   
            result = rs.getString("Result");                             


            teams = (matchno + "," + hometeam + "," + awayteam + "," + homegoals + "," + awaygoals + "," + result);     // Takes all the variables containging a single customers information and puts it into a string, seperated by commas.
            TeamResults.add(matchno,hometeam,awayteam,homegoals,awaygoals,result);
        }
    }

知道我哪里出错了吗?

【问题讨论】:

    标签: java mysql arrays


    【解决方案1】:

    验证一次列名。有时ALIAS 不起作用,我不知道为什么。

    从结果集中获取元数据:

    ResultSetMetaData metaData = resultSet.getMetaData();
    int size = metaData.getColumnCount();
    
    for (int i = 0; i < size; i ++)
        System.out.println(metaData.getColumnName(i);
    

    同样为了性能,列出列名,而不是在SELECT 查询中使用*。另外,你可以看看com.sun.rowset.CachedRowSetImpl. 的用法是这样的:

    CachedRowSetImpl crs = new CachedRowSetImpl();
    crs.populate(resultSet);
    

    我认为它也实现了CachedRowSet,但我并不完全确定。

    【讨论】:

      【解决方案2】:

      尝试使用以下方法:

       public void SelectData(String sqlcounter ,String sql){
      
              try {
               RsCounter=stmt.executeQuery(sqlcounter);
                  System.out.println(sqlcounter);
                  while(RsCounter.next()){
      
                      countrow=RsCounter.getInt("COUNTR");
                      System.out.println(countrow+"\n");
                                   }
                  System.out.println(sql);
               RsSelecting = stmt.executeQuery(sql);
               data=new String[countrow][RsSelecting.getMetaData().getColumnCount()];
      
               header= new String[RsSelecting.getMetaData().getColumnCount()];
      
           i=0;
           while(RsSelecting.next()){
            for(j=0;j<RsSelecting.getMetaData().getColumnCount();j++){
      
                    data[i][j]=(RsSelecting.getString(j+1));
                    header[j]=RsSelecting.getMetaData().getColumnName(j+1);
                    System.out.print(data[i][j]+"\n");
      
           }    
      
      
            i++;
      
           }
            i=j=0;
              } catch (SQLException ex) {
                             ex.printStackTrace();
      
                  Logger.getLogger(Connect.class.getName()).log(Level.SEVERE, null, ex);
              }
         }
      

      在哪里

      sqlcounter ="select COUNT(*) as COUNTR from Arsenal order by 'MatchNumber' ASC";
      

      sql ="select * from Arsenal order by 'MatchNumber' ASC";
      

      【讨论】:

        【解决方案3】:

        while-条件更改为hasNext(),并在循环内使用next() 将数据库光标向前移动。

        【讨论】:

        • 完全错了,next()负责将光标从当前位置向前移动一排,所以他不需要改变它,也没有hasNext()方法可用@ 987654326@班级
        • 是的,就像我写的那样。
        • while (rs.hasNext()) { rs.next(); ... }
        猜你喜欢
        • 2016-12-25
        • 1970-01-01
        • 2013-04-01
        • 1970-01-01
        • 2015-11-24
        • 2014-06-02
        • 1970-01-01
        • 2011-03-25
        • 1970-01-01
        相关资源
        最近更新 更多