Hallo, ich will bevor ich einen neuen Datensatz in meine Tabelle schreibe prüfen, ob der Index schon existiert. Dazu habe ich folgenden Code geschrieben, da es so scheint, als ob der Treiber immer eine Exception wirft, wenn man nach einem nicht vorhandenen Index sucht.
Der Output ist aber nicht sehr erfolgsversprechend:
Die Tabelle sieht so aus:
Ich habe es auch mit einem Code versucht, der mit ResultSet.last() und dann ResultSet.getRow() arbeitet, aber das hatte noch weniger Erfolg, da man bis zu dem Code aufgrund der Exception überhaupt nie kam...
Ich komm nicht weiter. Hat jemand einen Tip?
Vielen Dank im Voraus.
Java:
private String getIndex() throws SQLException {
final SimpleDateFormat df = new SimpleDateFormat("ddMMyyHHmmss");
Calendar c = Calendar.getInstance();
String index = df.format(c.getTime());
while (indexExsists(index)){
int sec = c.get(Calendar.SECOND);
c.set(Calendar.SECOND, (sec-1));
index = df.format(c.getTime());
}
return index;
}
private boolean indexExsists(String index){
try {
//DEBUG
System.out.println("Versuche index: " + index);
Statement s = connection.createStatement();
ResultSet rs = s.executeQuery("SELECT box FROM " + table + " WHERE INDEX=\"" + index + "\";");
return true;
} catch (SQLException sqle) {
//DEBUG
System.out.println("Exception: true");
return false;
}
}
Der Output ist aber nicht sehr erfolgsversprechend:
Java:
Versuche index: 170710180224
Exception: true
Versuche index: 170710180224
java.sql.SQLException: integrity constraint violation: unique constraint or index violation; SYS_PK_10027 table: VOCABLES
Exception: true
at org.hsqldb.jdbc.Util.sqlException(Util.java:200)
at org.hsqldb.jdbc.JDBCStatement.fetchResult(JDBCStatement.java:1805)
at org.hsqldb.jdbc.JDBCStatement.executeUpdate(JDBCStatement.java:206)
Die Tabelle sieht so aus:
Java:
"CREATE TABLE " + table + " (index CHARACTER VARYING(12) NOT NULL PRIMARY KEY, germanimport CHARACTER VARYING(500) NOT NULL, foreignimport CHARACTER VARYING(500) NOT NULL, box SMALLINT DEFAULT 0, knowngf NUMERIC, unknowngf NUMERIC, knownfg NUMERIC, unknownfg NUMERIC, apposition TIMESTAMP DEFAULT LOCALTIMESTAMP, lastinterrogation TIMESTAMP);"
Ich habe es auch mit einem Code versucht, der mit ResultSet.last() und dann ResultSet.getRow() arbeitet, aber das hatte noch weniger Erfolg, da man bis zu dem Code aufgrund der Exception überhaupt nie kam...
Ich komm nicht weiter. Hat jemand einen Tip?
Vielen Dank im Voraus.