在哪里可以看到HSQL数据库和表

arj*_*jun 3 java jdbc hsqldb

我下载了一个hsqldb.jar并设置为项目buildpath,然后我编写了程序

  Class.forName("org.hsqldb.jdbc.JDBCDriver");
Connection conn = DriverManager.getConnection(
                     "jdbc:hsqldb:mem:mydb", "SA", "");

String bookTableSQL = "create table MY_TABLE ("+
" TITLE varchar(256) not null primary key,"+
" AUTHOR varchar(256) not null"+
");";

Statement st = conn.createStatement();
st.execute(bookTableSQL);
System.out.println(st);
String sql = "INSERT INTO MY_TABLE " +
"VALUES ('Mahnaz', 'Fatma')";

st.executeUpdate(sql);
Run Code Online (Sandbox Code Playgroud)

数据库和表创建成功。在下一步中,我插入了一个示例数据并获得了正在显示的数据

String sqlsel = "SELECT TITLE,AUTHOR FROM MY_TABLE";
 ResultSet rs = st.executeQuery(sqlsel);
 //STEP 5: Extract data from result set
 while(rs.next()){
    //Retrieve by column name
     String id  = rs.getString("TITLE");
     String age = rs.getString("AUTHOR");

    //Display values
    System.out.print("ID: " + id);
    System.out.print(", Age: " + age);

 }
Run Code Online (Sandbox Code Playgroud)

我的问题是我没有创建“ mydb”数据库。另外在哪里可以看到创建的数据库和表?

Iva*_*nin 6

您已经在内存中创建了数据库,因此表/数据没有持久性文件,然后关闭应用程序,所有数据都丢失了。

如果要使其永久修复,请修复连接创建:将mem替换为file。像这样:

Connection conn = DriverManager.getConnection("jdbc:hsqldb:file:mydb", "sa", "");
Run Code Online (Sandbox Code Playgroud)

您可以在此处了解不同的HSQLDB模式。您也可以指定路径,数据库将在其中存储文件:

jdbc:hsqldb:file:/file/path/to/test"
Run Code Online (Sandbox Code Playgroud)

首次运行后,HSQLDB将创建几个文件。您可以在这里阅读每个文件的目的。

test.properties 包含条目“ modified”。如果条目“ modified”设置为“ yes”,则说明数据库正在运行或未正确关闭(因为关闭算法最后将“ modified”设置为“ no”)。

test.script 该文件包含组成数据库的SQL语句,直到最后一个检查点-它与test.backup同步。

test.data 此文件仅包含CACHED表的(二进制)数据记录。

test.backup 这是压缩的文件,其中包含最后一个检查点时旧test.data文件的完整备份。

test.log 该文件包含自上一个检查点以来已修改数据库的多余SQL语句(类似于“ Redo-log”或“ Transaction-log”,只是文本)。


顺便说一句,您可以使用此查询获取所有表:

SELECT * FROM INFORMATION_SCHEMA.SYSTEM_TABLES where TABLE_TYPE='TABLE'
Run Code Online (Sandbox Code Playgroud)

您可以像普通查询一样执行此查询:

Statement st = conn.createStatement();
ResultSet rs = st.executeQuery("SELECT * FROM INFORMATION_SCHEMA.SYSTEM_TABLES where TABLE_TYPE='TABLE'");

while(rs.next()) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

您也可以使用内置管理器查看数据库。您可以使用以下命令开始:

java -cp /path/to/hsqldb.jar org.hsqldb.util.DatabaseManager 
Run Code Online (Sandbox Code Playgroud)

然后指定数据库的路径:

jdbc:hsqldb:file:mydb
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用SQuirreL之类的流行工具。