Java中的SQL结果集

时间:2012-12-20 11:15:47

标签: java mysql jdbc

您好我刚开始用Java编写Java(实际上也是不久前用Java开始的......) 我创建了一个与MySQL数据库连接的类,这一切都运行良好。

现在我有一个获得结果的问题。

在PHP中

我会做类似

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

在Java中,我尝试创建类似于此的东西,但我不知道我是以正确的方式还是应该有很大的不同或其他......这就是我所做的(参见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;
    }
}

8 个答案:

答案 0 :(得分:3)

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

只需使用该界面即可。有关API的更多信息和文档,请访问Oracle网站。

答案 1 :(得分:3)

尝试以下代码。使用所需的查询和凭据更改查询,网址,用户,密码。

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

答案 2 :(得分:2)

在你的while循环中你使用了赋值运算符。 rs.next()返回true或false

 while(row=rs.next()) 
{}

你可以简单地说,

while(rs.next()) 
{}

答案 3 :(得分:2)

它非常容易在java中完成,你很擅长这个代码,你可以在这个链接中看到并查看示例

http://www.roseindia.net/answers/viewqa/Java-Beginners/3488-mysql-with-jsp.html

答案 4 :(得分:2)

public void connectToAndQueryDatabase(String username, String password) {

    Connection con = DriverManager.getConnection(
                         "jdbc:myDriver:myDatabase",
                         username,
                         password);

    Statement stmt = con.createStatement();
    ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM Table1");

    while (rs.next()) {
        int x = rs.getInt("a");
        String s = rs.getString("b");
        float f = rs.getFloat("c");
    }
}

了解如何使用JDBC的最佳位置是Oracle网站的JDBC tutorial

要了解如何从结果集中检索值,请查看本教程的this部分。

  

ResultSet对象是表示数据库结果集的数据表,通常通过执行查询数据库的语句生成。

     

您可以通过游标访问ResultSet对象中的数据。注意   此游标不是数据库游标。这个游标是一个指针   指向ResultSet中的一行数据。最初,光标是   位于第一行之前。 ResultSet.next方法移动了   光标到下一行。如果光标是,则此方法返回false   位于最后一排之后。这种方法反复调用   带有while循环的ResultSet.next方法迭代遍历所有   ResultSet中的数据。

     

ResultSet接口声明了getter方法(例如,   getBoolean和getLong)用于从当前检索列值   行。您可以使用索引编号检索值   列或列的别名或名称。列索引通常是   更高效。列从1开始编号。为了最大程度的便携性,   应该从左到右读取每行中的结果集列   订单,每列应该只读一次。

答案 5 :(得分:2)

ResultSet中有很多方法可以处理它。

如果您需要循环播放,请使用

rs.next();

如果您需要通过别名获取列:

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

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

rs.getMetaData();

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

答案 6 :(得分: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;
}

答案 7 :(得分:2)

处理Database Java提供了java.sql。*包。您需要阅读此API的Java文档并了解它们的用法。只有在了解java.sql。* package的用法时,才能根据业务需求应用最佳逻辑和技巧。

我建议您首先浏览oracle文档,然后在某个地方找到社区。

浏览ResultSetMetaData接口。我想这个界面可以回答你的问题。

http://docs.oracle.com/javase/1.4.2/docs/api/java/sql/ResultSetMetaData.html