ciao!
so che scala non è molto usato, ma penso che il problema sia più altro che il linguaggio in se.
allora, in fase di avvio se il file del db non è presente lo creo ed eseguo determinate operazioni.
se invece esiste faccio solo le altre operazioni.
codice:
@main
def main(): Unit = {
if (!checkDbExists()) {
val conn = createConn()
createDb(conn)
test(conn)
conn.close()
} else {
val conn = createConn()
test(conn)
}
}
def test(conn: Connection): Unit = {
addLog(conn)
getAllLog(conn)
addSync(conn)
getAllSync(conn)
}
al primo avvio funziona tutto.
al secondo avvio, con db esistente, ottengo questo errore:
codice:
Exception in thread "main" org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "OPERATION_LOG" not found; SQL statement:
INSERT INTO operation_log (operation, date) VALUES (?, ?) [42102-232]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:514)
at org.h2.message.DbException.getJdbcSQLException(DbException.java:489)
at org.h2.message.DbException.get(DbException.java:223)
at org.h2.message.DbException.get(DbException.java:199)
at org.h2.command.Parser.getTableOrViewNotFoundDbException(Parser.java:7945)
at org.h2.command.Parser.getTableOrViewNotFoundDbException(Parser.java:7916)
at org.h2.command.Parser.readTableOrView(Parser.java:7895)
at org.h2.command.Parser.readTableOrView(Parser.java:7857)
at org.h2.command.Parser.parseInsert(Parser.java:1521)
at org.h2.command.Parser.parsePrepared(Parser.java:698)
at org.h2.command.Parser.parse(Parser.java:581)
at org.h2.command.Parser.parse(Parser.java:556)
at org.h2.command.Parser.prepareCommand(Parser.java:484)
at org.h2.engine.SessionLocal.prepareLocal(SessionLocal.java:645)
at org.h2.engine.SessionLocal.prepareCommand(SessionLocal.java:561)
at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1164)
at org.h2.jdbc.JdbcPreparedStatement.<init>(JdbcPreparedStatement.java:93)
at org.h2.jdbc.JdbcConnection.prepareStatement(JdbcConnection.java:315)
at log$package$.addLog(log.scala:24)
at main$package$.test(main.scala:70)
at main$package$.main(main.scala:19)
at main.main(main.scala:6)
però è strano, perchè invece nel primo avvio creo il db con le tabelle, inserisco i record e li visualizzo senza problemi.
sembra come non si riesca a connettere nel caso già esista.
possibile?
questa la funzione della connessione:
codice:
import java.sql.{Connection, DriverManager}
def createConn(): Connection = {
Class.forName("org.h2.Driver")
DriverManager.getConnection("jdbc:h2:./DATABASE/my_db", "", "")
}