/** * * EmbeddedFulltextDatabase * * @version 1.0.0 vom 31.08.2014 * @author Daniel Ruf */ import java.sql.*; import org.h2.tools.*; import org.apache.lucene.*; import org.h2.fulltext.FullTextLucene; public class embeddedfulltextdatabase { public static void main(String[] args) throws Exception { String version = "1.0.0"; String program = "EmbeddedFulltextDatabase"; System.out.println(program + " " + version ); Class.forName("org.h2.Driver"); Runtime.getRuntime().addShutdownHook(new Thread() { @Override public void run() { try { Connection conn = DriverManager.getConnection("jdbc:h2:./test;MODE=MySQL;MV_STORE=FALSE;MVCC=FALSE;MAX_COMPACT_TIME=2000", "sa", ""); conn.createStatement().execute("DROP ALL OBJECTS DELETE FILES;"); conn.createStatement().execute("SHUTDOWN COMPACT"); conn.close(); } catch(Exception e) { } } }); Connection conn = DriverManager.getConnection("jdbc:h2:./test;MODE=MySQL;MV_STORE=FALSE;MVCC=FALSE;MAX_COMPACT_TIME=2000", "sa", ""); conn.createStatement().execute("CREATE ALIAS IF NOT EXISTS FTL_INIT FOR \"org.h2.fulltext.FullTextLucene.init\";"); conn.createStatement().execute("CALL FTL_INIT();"); conn.createStatement().execute("CREATE TABLE IF NOT EXISTS TEST(ID INT PRIMARY KEY, NAME VARCHAR);"); conn.createStatement().execute("INSERT INTO TEST SELECT * FROM ( SELECT 1, 'Hello World') x WHERE NOT EXISTS (SELECT * FROM TEST);"); conn.createStatement().execute("CALL FTL_CREATE_INDEX('PUBLIC', 'TEST', NULL);"); ResultSet rs = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY).executeQuery("SELECT T.*, SCORE FROM FTL_SEARCH_DATA('Hello World', 0, 0) FT, TEST T WHERE FT.TABLE='TEST' AND T.ID=FT.KEYS[0];"); //ResultSet rs = conn.createStatement().executeQuery("SELECT * FROM FTL_SEARCH('Hello 123', 0, 0);"); //ResultSet rs = conn.createStatement().executeQuery("SELECT * FROM TEST;"); ResultSetMetaData meta = rs.getMetaData(); conn.createStatement().execute("CALL FTL_DROP_ALL();"); int columns = meta.getColumnCount(); int[] len = new int[columns]; for (int i=1; i<=columns; i++) { if (meta.getColumnName(i).length()>len[i-1])len[i-1]=meta.getColumnName(i).length()+5; } // end of for while(rs.next()) { for (int i=1; i<=columns; i++) { if (rs.getString(i).length()>len[i-1])len[i-1]=rs.getString(i).length()+5; } } rs.beforeFirst(); for (int i=1; i<=columns; i++) { System.out.format("%-"+len[i-1]+"s",meta.getColumnName(i)); } // end of for System.out.println("\r"); while(rs.next()) { for (int i=1; i<=columns; i++) { if (meta.getColumnName(i).equals("SCORE")) { System.out.format("%-"+len[i-1]+"s",rs.getString(i)); } // end of if else { System.out.format("%-"+len[i-1]+"s",rs.getString(i)); } // end of if-else } // end of for System.out.println("\r"); } rs.close(); conn.createStatement().execute("DROP ALL OBJECTS DELETE FILES;"); conn.createStatement().execute("SHUTDOWN COMPACT"); conn.close(); } // end of main } // end of class database