2

私の構文が間違っている場合は、私を訂正していただければ幸いです。SELECT...WHERE句が正しい場合にのみGoogleをチェックできました。

別のクエリで使用するためにstudent_idを取得したいのですが、これから取得するのは「0」だけのようです。

Javaファイルの場合:

rst = stmt.executeQuery("SELECT student_id FROM students WHERE name= 'to_delete'");
sid = rst.getInt("student_id");

to_deleteは、このJavaファイルがstudent_idを返さなければならないメソッドへのパラメーターとして受け取る文字列です。それは本当に正しい文字列を含んでいます(私はそれをチェックしました)。

テーブル「students」には、student_id、name、yearのファイルが含まれています。「to_delete」という名前のstudent_idを返す必要があります。

エラーや例外はありません。結果を表示すると、どの名前を入力してもid:0が表示されます。たぶん、rst.getString( "column_name")はexecuteUpdate(...)に対してのみ正しいのでしょうか?

前もって感謝します!

4

2 に答える 2

3

next()結果セットから何かを取得しようとする前に、結果セットを呼び出します。行を読み取るたびにnextメソッドを呼び出すことにより、ResultSetを反復処理します。nextがfalseを返すと、完了です。

次のメソッドのAPIドキュメントは次のとおりです。

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

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

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

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

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

于 2012-07-02T14:02:59.707 に答える
0

はい。問題は、そこから取得しようとする前に next() を呼び出す必要があることです。それ以外の場合、エラーは発生しませんでしたが、結果はありません。

于 2012-07-02T14:05:34.867 に答える