簡體   English   中英

Java中的SQL結果集

[英]SQL resultset in Java

您好我剛剛開始使用Java中的SQL(實際上也是不久前也開始使用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;
    }
}

ResultSetMetaData是一個接口,它提供有關ResultSet的所有信息,如生成的ResultSet的所有列名,類型,長度等。

只需使用該界面。 有關API的更多信息和文檔,請訪問Oracle網站。

試試下面的代碼。 使用所需的查詢和憑據更改查詢,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站點。

ResultSetMetaData的文檔和API

在你的while循環中你使用了賦值運算符。 rs.next()返回true或false

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

你可以簡單地說,

while(rs.next()) 
{}

它很容易在java中完成你很好的代碼,你可以指導和看到這個鏈接中的示例

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

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教程

有關如何從結果集中檢索值的信息,請參閱本教程的這一部分。

ResultSet對象是表示數據庫結果集的數據表,通常通過執行查詢數據庫的語句生成。

您可以通過游標訪問ResultSet對象中的數據。 請注意,此游標不是數據庫游標。 此游標是指向ResultSet中一行數據的指針。 最初,光標位於第一行之前。 ResultSet.next方法將光標移動到下一行。 如果光標位於最后一行之后,則此方法返回false。 此方法使用while循環重復調用ResultSet.next方法以迭代ResultSet中的所有數據。

ResultSet接口聲明getter方法(例如,getBoolean和getLong),用於從當前行檢索列值。 您可以使用列的索引號或列的別名或名稱來檢索值。 列索引通常更有效。 列從1開始編號。為了獲得最大的可移植性,每行中的結果集列應按從左到右的順序讀取,每列應只讀一次。

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

如果你需要循環它,只需使用

rs.next();

如果您需要通過別名獲取列:

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

您還有一個實用程序類,用於提取有關結果集的信息,如列數及其名稱:

rs.getMetaData();

確保在完成連接后關閉連接。

剛剛將結果集轉到下面的方法,它將返回您正在尋找的所需結果。

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;
}

處理Database Java提供了java.sql。*包。 您需要閱讀此API的Java文檔並了解它們的用法。 只有在了解java.sql。*包的用法時,才能根據業務需求應用最佳邏輯和技巧。

我建議你首先通過oracle文檔,然后如果你卡在某個地方就來社區。

瀏覽ResultSetMetaData接口。 我想這個界面是你問題的答案。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM