6

こんにちは、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;
    }
}
4

7 に答える 7

4
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 Web サイトのJDBC チュートリアルが最適です。

結果セットから値を取得する方法を理解するには、チュートリアルのこの部分を参照してください。

ResultSet オブジェクトは、データベースの結果セットを表すデータのテーブルであり、通常、データベースにクエリを実行するステートメントを実行することによって生成されます。

カーソルを介して ResultSet オブジェクトのデータにアクセスします。このカーソルはデータベース カーソルではないことに注意してください。このカーソルは、ResultSet 内の 1 行のデータを指すポインターです。最初、カーソルは最初の行の前に配置されます。メソッド ResultSet.next は、カーソルを次の行に移動します。カーソルが最後の行の後に配置されている場合、このメソッドは false を返します。このメソッドは、while ループを使用して ResultSet.next メソッドを繰り返し呼び出し、ResultSet 内のすべてのデータを反復処理します。

ResultSet インターフェイスは、現在の行から列の値を取得するための getter メソッド (getBoolean や getLong など) を宣言します。列のインデックス番号、列のエイリアスまたは名前を使用して値を取得できます。通常、列インデックスの方が効率的です。列には 1 から番号が付けられます。移植性を最大限に高めるために、各行内の結果セットの列は左から右の順序で読み取られ、各列は 1 回だけ読み取られる必要があります。

于 2012-12-20T11:27:39.323 に答える
3

ResultSetMetaDataは、生成されたResultSetのすべての列名、タイプ、長さなど、ResultSetに関するすべての情報を提供するインターフェイスです。

そのインターフェースを使用するだけです。APIの詳細とドキュメントについては、OracleのWebサイトにアクセスしてください。

于 2012-12-21T16:12:59.593 に答える
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 については、以下のオラクル サイトにアクセスしてください。

ResultSetMetaData のドキュメントと API

于 2012-12-23T03:44:36.080 に答える
2

データベースを処理するために、Javaはjava.sql。*パッケージを提供します。このAPIのJavaドキュメントを読み、その使用法を学ぶ必要があります。java.sql。*パッケージの使用法を知っている場合にのみ、ビジネス要件に基づいて最適なロジックとトリックを適用できます。

最初にオラクルのドキュメントを確認してから、どこかで立ち往生している場合はコミュニティにアクセスすることをお勧めします。

ResultSetMetaDataインターフェイスを通過します。このインターフェースがあなたの質問への答えだと思います。

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

于 2012-12-26T14:58:01.247 に答える
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;
}
于 2012-12-20T11:40:57.590 に答える
2

ResultSetには、それを処理するための多くのメソッドがあります。

ループする必要がある場合は、使用してください

rs.next();

エイリアスで列を取得する必要がある場合:

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

列の数や名前など、結果セットに関する情報を抽出するためのユーティリティ クラスもあります。

rs.getMetaData();

接続が完了したら、必ず接続を閉じてください。

于 2012-12-20T11:29:22.993 に答える
2

while ループで代入演算子を使用しました。rs.next() は true または false を返します

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

簡単に言うと、

while(rs.next()) 
{}
于 2012-12-20T11:22:59.737 に答える