Io uso hsqldb per eseguire i miei test di unità che richiedono un accesso al database.Esecuzione di uno script per creare tabelle con HSQLDB
Per il momento, quando voglio creare un tavolo per un test specifico, ho il seguente codice:
private void createTable() {
PreparedStatement ps;
try {
ps = getConnection().prepareStatement("CREATE TABLE T_DATE (ID NUMERIC PRIMARY KEY, DATEID TIMESTAMP)");
ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
}
Il metodo getConnection()
recuperare un DataSource definito in un contesto Spring
:
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="org.hsqldb.jdbcDriver"/>
<property name="url" value="jdbc:hsqldb:mem:memoryDB"/>
<property name="username" value="SA"/>
<property name="password" value=""/>
</bean>
Ora, voglio creare la mia tabella da uno script SQL (ovviamente, questo script conterrà più di una creazione tabella):
CREATE TABLE T_DATE_FOO (ID NUMERIC PRIMARY KEY, DATEID TIMESTAMP);
CREATE TABLE T_DATE_BAR (ID NUMERIC PRIMARY KEY, DATEID TIMESTAMP);
...
Ho visto nella documentazione HSQLDB che posso chiedergli di run a script at the startup. Tuttavia, non soddisfa i miei requisiti, poiché voglio eseguire uno script in fase di esecuzione.
Naturalmente, posso leggere il file da solo, e per ogni istruzione SQL, eseguo un comando ps.executeUpdate()
, ma non voglio usare questo tipo di soluzione (tranne se non ci sono altre soluzioni).
Qualche idea?
Questo funziona, grazie! Tuttavia, non capisco perché Spring rifiuti di avere un'istruzione in più righe (anche con un ';' alla fine) ... – romaintaz
quale metodo executeSqlScript usi? c'è una differenza nell'implementazione –