は、私がループし、値に、このテーブルにユーザーを挿入したいautocommitがfalseに設定されているときに、selectは最後に挿入された行を返しますか?
..私はユーザーとUser2、フォーマット USER1とユーザ名をという名前の列という名前のテーブルを持っていると言いますすべてのエントリは前のものに依存します。新しいエントリの値は、テーブル内のアルファベット順に最大のエントリ、つまりユーザによって生成されます。
AutoCommitがfalseに設定されている間にJDBC APIで挿入後にgetGeneratedKeys
になる可能性があります。下記のような状況では
:
connection.setAutoCommit(false);
while(someCondition)
{
ResultSet rs = connection.createStatement("select max(username) from users").executeQuery();
if(rs.next())
{
name= rs.getString("username"); //returns user1
}
String newName = generateNewName(name); // simply makes user1 -> user2
connection.createStatement("insert into users (name,...) values ("+newName+",...)").executeUpdate(); ///and inserts..
}
はそれが私がループを開始前にテーブルでの最大列を返し、最後の挿入された値 かを 返すクエリを選択しますか?
現在の最大値を返します。値をコミットするまで、別のセッション(=別のユーザー/アプリケーションなどの別の接続)で古い値が表示される可能性があります。そのため、単一のユーザー環境での使用が安全です。また、 'user2> user10'というのは辞書順であるので、あなたが期待する値と異なる最大値を得るかもしれないことに注意してください。 – Solarflare
@Solarflareは返信に感謝します。あなたが任意のドキュメント参照を追加してそれを回答することができれば、私はそれを受け入れます。ところで、ユーザーの例は、私が実際に達成しようとしているものと同様のものに過ぎませんでしたが、警告に感謝します。 – alegria