Ich bin mit JDBC mit mysql-connector-java-6.0.2.jar, und, wenn ich etwas falsch tue, denke ich DatabaseMetaData.ownDeletesAreVisible und DatabaseMetaData.deletesAreDetected Implementierungen handeln irgendwie uneinheitlich untereinander.DatabaseMetaData.ownDeletesAreVisible vs DatabaseMetaData.deletesAreDetected Kontroverse
Hier ist, was die JDBC-Spezifikation sagt in Bezug auf ownDeletesAreVisible.
"... Wenn die gelöschte Zeile entfernt oder durch eine leere Zeile ersetzt, wobei das Verfahren DatabaseMetaData.ownDeletesAreVisible (int-Typ) wird return true Es gibt false, wenn das ResultSet-Objekt noch die gelöschte Zeile enthält, was bedeutet, dass das Löschen zu ResultSet Objekten des angegebenen Typs nicht sichtbar als eine Änderung ist ... „
Und deletesAreDetected zu:
“ .. .Das Meth od deletesAreDetected false zurückgibt, wenn eine Zeile aus dem ResultSet-Objekt gelöscht wird daraus entfernt und dann, wenn die gelöschte Zeile durch eine leere oder ungültige Zeile ersetzt wird ... "
Ich habe die Ausgänge als Kommentare:
import static java.sql.ResultSet.CONCUR_UPDATABLE;
import static java.sql.ResultSet.TYPE_SCROLL_INSENSITIVE;
import java.sql.*;
public class Deletions {
public static void main(String[] args) throws SQLException {
try (Connection conn = DBUtils.getConnection();
Statement stmt = conn.createStatement(TYPE_SCROLL_INSENSITIVE, CONCUR_UPDATABLE);
ResultSet rs = stmt.executeQuery("select * from book")) {
DatabaseMetaData dbmd = conn.getMetaData();
//prints false
System.out.println(dbmd.ownDeletesAreVisible(TYPE_SCROLL_INSENSITIVE));
// prints false. Controversy?
System.out.println(dbmd.deletesAreDetected(TYPE_SCROLL_INSENSITIVE));
// Prints everything including foo
printAll(rs);
// deletes foo
while (rs.next()) {
String title = rs.getString(2);
if (title.equalsIgnoreCase("foo")) {
rs.deleteRow();
}
}
// Prints everything without foo
printAll(rs);
}
}
private static void printAll(ResultSet rs) throws SQLException {
rs.beforeFirst();
while (rs.next()) {
System.out.println(rs.getString(2));
}
rs.beforeFirst();
}
}
Sie sollten Ihre Kommentare wirklich in den Textkörper einfügen, was das Lesen wesentlich erleichtert. –
Vielen Dank für den Hinweis. Erledigt. –