2014-10-29 38 views
1

我是嵌入式數據庫概念的新手,並選擇HSQLDB作爲我的Java應用程序的嵌入式數據庫。我想我根本不理解的東西:沒有在任何地方我看到如何/在哪裏:初始化HSQLDB實例,然後在應用程序中使用

  • 定義必須用於連接到數據庫
  • 創建一個新的數據庫的用戶名/密碼憑證(e..g ,db_myapp
  • 爲新的數據庫

對於非嵌入式(「正常」)DB創建表,我會首先使用DB客戶端連接到數據庫,並CREATEdb_myapp DB以及作爲它應該有的任何表格。我的應用程序然後期望這些表在運行時存在。

但是對於HSQLDB,我沒有這樣的數據庫服務器來連接,所以我沒有看到我的應用程序在運行之前如何/在哪裏創建這些數據庫/表/憑證。

也許這正是「嵌入式」DB所做的;也許它是嵌入JDBC驅動程序中的整個數據庫?無論如何,我仍然需要一種方法來完成上面列出的三件事。

我唯一能想到的就是每次啓動應用程序時都運行一些初始化代碼。這段代碼會檢查這些結構的存在,如果它們不存在,那麼它會創建它們。

這裏有幾個問題:

  • 這種做法可能與數據庫和表工作,但沒有證書,我需要在JDBC Connection本身。我如何/在哪裏創建這些?
  • 我甚至不確定這是使用嵌入式HSQLDB的正確方法嗎?有人可以確認我正在跟蹤(也就是說,「檢查 - 看看,如果它存在和如果沒有,然後創建」的方法)?
  • 如果我意外地執行了代碼,當它已經存在時嘗試創建新的數據庫/表格前夕,會發生什麼情況? HSQLDB會忽略它還是會吹掉我現有的DB /表?

回答

2

簡短的回答是,你幾乎在正確的軌道上。

除了連接字符串有點不同外,連接到嵌入式數據庫與連接到普通數據庫服務器確實沒有區別。 This section有關於此的信息。問題在於你沒有單獨的'數據庫'可供選擇,它只是在連接字符串中指定的。對於連接:

Connection c = DriverManager.getConnection("jdbc:hsqldb:file:/opt/db/testdb", "SA", "");

這會給你,在/opt/db/testdb仍然存在文件中的數據嵌入式數據庫引擎的連接。嵌入式數據庫的默認用戶名將始終爲「SA」,不含密碼。我真的不知道它是否可以工作,但如果你確實需要設置不同的密碼,你可以嘗試執行ALTER USER SA SET PASSWORD <newPassword>。它可能會工作...

就創建表等而言,有幾種方法可以解決這個問題,這取決於數據庫是作爲文件還是存儲在內存中。通常情況下,嵌入式數據庫會用於非常簡單的數據,因此通過在初始化連接後立即執行語句來創建表。 CREATE TABLE IF NOT EXISTS ...是通常的做事方式。這允許您僅在尚不存在的情況下才創建表。

如果您使用的是基於文件的數據庫,那麼hsqldb會爲您提供另一個選項。看看this documentation關於使用他們的工具訪問數據庫。這將允許您提前創建基於文件的數據庫,並設置用戶名/密碼等內容並設置所有表格。然後您可以複製生成的文件以供應用程序使用。然後,在應用程序連接到它之前,將設置所有內容。

因此,最終,你可以選擇任何一種方式。您可以讓應用程序在初始化連接時設置所有內容,也可以提前手動進行設置。我的首選是讓應用程序在代碼中設置它,因爲這樣你的表定義就更接近實際使用它們的代碼。儘管如此,我還沒有使用像這樣的嵌入式數據庫來處理複雜的數據,所以我不能誠實地說出這種規模有多好。