web-dev-qa-db-ja.com

Java-MySQLデータベースからデータを取得する

4つのフィールドを含むMySQLデータベースに接続しました(最初のフィールドはIDで、後者はそれぞれvarchar文字列を含みます)。

データベースの最後の行を取得し、フィールドの内容を取得して、変数(intと3つの文字列)に設定して後で使用できるようにしています。

これまでのところ、接続を確立するための最低限の条件があります。ここからどこに行くのですか?ご覧のとおり、最後の行を取得するためにSQLステートメントを記述しようとしましたが、そこからすべてが間違っており、個別のフィールドに分割する方法がわかりません。

Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection con = DriverManager.getConnection("jdbc:mysql://localhost/t", "", "");

Statement st = con.createStatement();
String sql = ("SELECT * FROM posts ORDER BY id DESC LIMIT 1;");
st.getResultSet().getRow();
con.close();
8
mino

どうぞ :

Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection con = DriverManager.getConnection("jdbc:mysql://localhost/t", "", "");

Statement st = con.createStatement();
String sql = ("SELECT * FROM posts ORDER BY id DESC LIMIT 1;");
ResultSet rs = st.executeQuery(sql);
if(rs.next()) { 
 int id = rs.getInt("first_column_name"); 
 String str1 = rs.getString("second_column_name");
}

con.close();

rs.getIntまたはrs.getString渡すことができますcolumn_id から始まる 1、しかし私はcolumn_nameそのtableがどのindexであるかについて、データベースcolumnを調べる必要がないので、より情報的です。

UPDATE:rs.next

boolean next()はSQLExceptionをスローします

カーソルを現在の位置から1行前に移動します。 ResultSetカーソルは最初、最初の行の前に配置されます。次のメソッドの最初の呼び出しは、最初の行を現在の行にします。 2番目の呼び出しでは、2番目の行が現在の行になり、以下同様に続きます。

Nextメソッドの呼び出しがfalseを返すと、カーソルは最後の行の後に配置されます。現在の行を必要とするResultSetメソッドを呼び出すと、SQLExceptionがスローされます。結果セットのタイプがTYPE_FORWARD_ONLYの場合、JDBCドライバーの実装がfalseを返すか、nextへの後続の呼び出しでSQLExceptionをスローするかはベンダー指定です。

現在の行に対して入力ストリームが開いている場合、nextメソッドを呼び出すと、暗黙的に閉じられます。新しい行が読み込まれると、ResultSetオブジェクトの警告チェーンがクリアされます。

戻り値:新しい現在の行が有効な場合はtrue。行がもうない場合はfalse例外:SQLException-データベースアクセスエラーが発生した場合、またはこのメソッドが閉じた結果セットで呼び出された場合

参照

13
Harmeet Singh

このような何かがします:

public static void main(String[] args) {

    Connection con = null;
    Statement st = null;
    ResultSet rs = null;

    String url = "jdbc:mysql://localhost/t";
    String user = "";
    String password = "";

    try {
        Class.forName("com.mysql.jdbc.Driver");
        con = DriverManager.getConnection(url, user, password);
        st = con.createStatement();
        rs = st.executeQuery("SELECT * FROM posts ORDER BY id DESC LIMIT 1;");

        if (rs.next()) {//get first result
            System.out.println(rs.getString(1));//coloumn 1
        }

    } catch (SQLException ex) {
        Logger lgr = Logger.getLogger(Version.class.getName());
        lgr.log(Level.SEVERE, ex.getMessage(), ex);

    } finally {
        try {
            if (rs != null) {
                rs.close();
            }
            if (st != null) {
                st.close();
            }
            if (con != null) {
                con.close();
            }

        } catch (SQLException ex) {
            Logger lgr = Logger.getLogger(Version.class.getName());
            lgr.log(Level.WARNING, ex.getMessage(), ex);
        }
    }
}

次のようにwhileを使用して結果を反復できます。

while(rs.next())
{
System.out.println(rs.getString("Colomn_Name"));//or getString(1) for coloumn 1 etc
}

これらのようないくつかの優れたチュートリアルがいくつかあります:

Class.forName("com.mysql.jdbc.Driver").newInstance();の使用については JDBC接続-Class.forName vs Class.forName()。newInstance? を参照してください。これは、Class.forName("com.mysql.jdbc.Driver")を使用する必要がないため、自分で始める

参照:

3
David Kroukamp

これはうまくいくと思います...

ResultSet results = st.executeQuery(sql);

if(results.next()) { //there is a row
 int id = results.getInt(1); //ID if its 1st column
 String str1 = results.getString(2);
 ...
}
1
nullpotent

簡単なJava MySQLテーブルからデータを取得する方法:

/*
 * CREDIT : WWW.CODENIRVANA.IN
*/

String Data(String query){
    String get=null;
    try{

Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection con = (Connection)DriverManager.getConnection
("jdbc:mysql://localhost:3306/mysql","root","password");
Statement stmt = (Statement) con.createStatement();
ResultSet rs=stmt.executeQuery(query);
if (rs.next())
       {
get = rs.getString("");
        }

}
catch(Exception e){
JOptionPane.showMessageDialog (this, e.getMessage());
}
    return get;
}
0
Simran Sharma