有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java中的mysql SQL结果集

您好,我刚开始使用Java中的SQL(实际上不久前也开始使用Java….) 我创建了一个类来连接MySQL数据库,一切都很好

现在,我有一个问题要问你如何得到结果

在PHP中,我会做如下事情

While($row = mysql_fetch_assoc()) {
  echo $row['rowname'];
}

在Java中,我试图创建类似的东西,但我没有;I don’我不知道我是否走对了路,或者应该有很大的不同,或者其他什么。。以下是我所做的(参见getResultList方法)

public class MysqlConnect{

     private String query;
     private ResultSet rs;

    public void connectToAndQueryDatabase(String database, String username, String password) throws SQLException {

            Connection con = null;
            try {
                con = DriverManager.getConnection(
                                     "jdbc:mysql://localhost:3306/" + database,
                                     username,
                                     password);
            } catch (SQLException e) {
                e.printStackTrace();
            }

            Statement stmt = con.createStatement();
            rs = stmt.executeQuery(query);
    }

    public void setQuery(String query) {

        this.query = query;

    }

    public List getResultList() {
        ArrayList<HashMap> row = new ArrayList<HashMap>(); 
        while(row = rs.next()) {

        }

        return rs;
    }
}

共 (4) 个答案

  1. # 1 楼答案

    ResultSet中有很多方法来处理它

    如果你需要循环浏览,只需使用

    rs.next();
    

    如果需要通过别名获取列,请执行以下操作:

    rs.getString("alias");
    rs.getFloat("other_alias");
    // or by column index
    rs.getString(3);
    

    您还有一个实用程序类,用于提取有关结果集的信息,如列数及其名称:

    rs.getMetaData();
    

    确保在完成连接后关闭连接

  2. # 2 楼答案

    刚过你的结果设置为下面的方法,它会返回你想要的结果

    public List<Map<String, Object>> getResultsList(ResultSet rs) throws SQLException
    {
        ResultSetMetaData metadata = rs.getMetaData();
        int columns = metadata.getColumnCount();
    
        List<Map<String, Object>> results = new ArrayList<Map<String, Object>>();
        while (rs.next())
        {
            Map<String, Object> row = new HashMap<String, Object>(columns);
            for (int i = 1; i <= columns; ++i)
            {
                row.put(metadata.getColumnName(i), rs.getObject(i));
            }
            results.add(row);
        }
    
        return results;
    }
    
  3. # 3 楼答案

    试试下面的代码。使用所需的查询和凭据更改查询、url、用户、密码

    public static void main(String args[]) {
    
    String url = "database url";
    Connection con;
    String query = "Your select query here";
    Statement stmt;
    
    try {
      Class.forName("Full driver class name");
    
    } catch(java.lang.ClassNotFoundException e) {
      System.err.print("ClassNotFoundException: ");
      System.err.println(e.getMessage());
    }
    
    try {
      con = DriverManager.getConnection(url, 
                   "user", "password");
    
      stmt = con.createStatement();              
    
      ResultSet rs = stmt.executeQuery(query);
      ResultSetMetaData rsmd = rs.getMetaData();
      int numberOfColumns = rsmd.getColumnCount();
      int rowCount = 1;
      while (rs.next()) {
        System.out.println("Row " + rowCount + ":  ");
        for (int i = 1; i <= numberOfColumns; i++) {
          System.out.print("   Column " + i + ":  ");
          System.out.println(rs.getString(i));
        }
        System.out.println("");
        rowCount++;
      }
      stmt.close();
      con.close();
    
    } catch(SQLException ex) {
      System.err.print("SQLException: ");
      System.err.println(ex.getMessage());
    
    
     }  
      }
    

    有关文档和api,请访问以下oracle网站

    Documentation and api of ResultSetMetaData

  4. # 4 楼答案

    ResultSetMetaData是一个接口,它提供有关ResultSet的所有信息,如生成的ResultSet的所有列名、类型、长度等

    只要使用这个界面。有关API的更多信息和文档,请访问Oracle网站