Eu tenho o seguinte código:
import java.sql.*;
import java.util.Date;
public class MyTest {
Connection conn;
public MyTest(String db_prefix) throws Exception {
Class.forName("org.hsqldb.jdbcDriver");
conn = DriverManager.getConnection("jdbc:hsqldb:" + db_prefix, "sa", "");
}
public void shutdown() throws SQLException {
conn.close();
}
public synchronized void query(String expression) throws SQLException {
Statement st = null;
ResultSet rs = null;
st = conn.createStatement();
rs = st.executeQuery( expression );
dump(rs);
st.close();
}
public synchronized void update(String expression) throws SQLException {
Statement st = null;
st = conn.createStatement();
int i = st.executeUpdate(expression);
if (i == -1) {
System.out.println("db error : " + expression);
}
st.close();
}
public static void dump(ResultSet rs) throws SQLException {
ResultSetMetaData meta = rs.getMetaData();
int colmax = meta.getColumnCount();
int i;
Object o = null;
for(int j=1; j<=colmax; j++ ) {
System.out.print(meta.getColumnName(j)+" ");
}
System.out.println(" ");
while( rs.next() ) {
for (i = 0; i < colmax; ++i) {
o = rs.getObject(i + 1);
System.out.print(o==null ? "" : o.toString() + " ");
}
System.out.println(" ");
}
}
public static void main(String[] args) {
MyTest db = null;
try {
db = new MyTest("MyTest");
} catch (Exception ex1) {
ex1.printStackTrace();
return;
}
try {
db.query("CREATE TEXT TABLE pessoa ( id INTEGER IDENTITY, nome VARCHAR(50), idade INTEGER, data_nasc DATE)");
db.query("SET TABLE pessoa SOURCE "pessoa.csv"");
} catch (SQLException ex2) {
ex2.printStackTrace(); // second time we run program
}
try {
db.update("INSERT INTO pessoa(nome,idade,data_nasc) VALUES('Daniel', 24, '12-07-1979')");
db.update("INSERT INTO pessoa(nome,idade,data_nasc) VALUES('Marcelo', 23, null)");
db.query("SELECT * FROM pessoa"); //WHERE idade > 20");
} catch (SQLException ex3) {
ex3.printStackTrace();
} finally {
if( db != null ) try { db.shutdown(); } catch( Exception ex ) {}
}
}
}
Estou usando o HSQLDB 1.7.1. Neste modo, que grava os dados em um arquivo texto, separado por ;, estranhamente ele não grava o último campo definido na criação da tabela. alguém sabe se isso é um bug do HSQLDB?
Se eu uso o modo normal ele funciona.
Pergunta, qual a menlhor maneira de usar este DB com persistência dos dados em disco?