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();
どうぞ :
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-データベースアクセスエラーが発生した場合、またはこのメソッドが閉じた結果セットで呼び出された場合
このような何かがします:
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")
を使用する必要がないため、自分で始める
参照:
これはうまくいくと思います...
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);
...
}
簡単な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;
}