㈠ java可以直接讀寫後綴為.db的文件嗎
不可以...
所有的大程序都需要通過資料庫存儲數據的.
不過如果是簡單的數據你可以用java輸出到文本文件中保存起來.
如果數據很多很復雜就辦不到了
㈡ JavaDB的一些問題
javaDB其實就是Derby,它並不是一個新的資料庫產品,它是由IBM捐獻給Apache的DB項目的一個純Java資料庫,JDK6.0裡面帶的這個Derby的版本是 10.2.1.7,支持存儲過程和觸發器;有兩種運行模式,一種是作為嵌入式資料庫,另一種是作為網路資料庫,前者的資料庫伺服器鎮仔和客戶端都在同一個 JVM裡面運行,後者允許資料庫伺服器端和客戶端不在同一個JVM裡面,而且允許這兩者在不同的物理機器上.值得注意的是JDK6裡面的這個Derby支持JDK6的新特性JDBC 4.0規范(JSR 221),現在我們如果要練習JDBC的用法,沒有必要單獨裝一個資料庫產品了,直接用Derby就行.
1、本身沒有操作界面,可以用第三方工具來管理(也就是你說的操作界面),Aqua Data Studio 具備管理功能的用於 Apache Derby 關系資料庫的管理工具和資料庫查詢工具。直觀管理功能讓用戶能夠瀏覽和修改資料庫結構,包括架構對象和資料庫存儲,以及維護資料庫安全。集成查詢工具讓您能夠迅速創建、編輯和執行 SQL 查詢與腳本。Aqua Data Studio 進一步提供導入與導出工具,從而輕松地將數據移入和移出不同的數據格式及 Apache Derby 資料庫。集成在這些工具內的是庫瀏覽器 (Repository Browser),擁有 CVS 和 Subversion (SVN) 的完整來源控制客戶端。
2、兩者的區別,簡單的說,就是javaDB是一個簡化輕量級資料庫,適合小型系統的小規模測試用,完全可以跑在內存里的資料庫,它只有3M大小,而MySQL則是可以應用部署大型系統的資料庫,功能更多更全,也更穩定,是用范圍更廣。
3、下面是個使用derby的簡單例子:
首先導入JAR包:derby.jar,如果你裝的是JDK6,在C:\Program Files\Sun\JavaDB\lib目錄下就可以找到.
然後衫州就要創建資料庫了:
代碼
private Connection getConnection() throws SQLException {
Connection connection = DriverManager
.getConnection("jdbc:derby:userDB;create=true;user=test;password=test");
connection.setAutoCommit(false);
return connection;
}
其中userDB是要連接資料庫的名字,create=true表示如果該資料庫不存在,則創建該資料庫,如果資料庫存在,則用用戶user=test;密碼password=test連接資料庫.
有了數御塌汪據庫,接下來該建表了:
代碼
private void createTable(Connection connection) throws SQLException {
Statement statement = connection.createStatement();
String sql = "create table USERS("
+ " ID BIGINT not null generated by default as identity,"
+ " USER_NAME VARCHAR(20) not null,"
+ " PASSWORD VARCHAR(20),"
+ " constraint P_KEY_1 primary key (ID))";
statement.execute(sql);
sql = "create unique index USER_NAME_INDEX on USERS ("
+ " USER_NAME ASC)";
statement.execute(sql);
statement.close();
}
創建了 USERS表,包括ID,USER_NAME,PASSWORD三個列,其中ID是主鍵,其中generated by default as identity 的作用類似sequence,identity是定義自動加一的列,
GENERATED BY ALWAYS AS IDENTITY
GENERATED BY DEFAULT AS IDENTITY
By always和by default是說明生成這個IDENTITY的方式。
By always是完全由系統自動生成。
by default是可以由用戶來指定一個值。
編寫與USERS表對應的javabean(這個就不多說了),:
代碼
public class User implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
private Long id;
private String userName;
private String password;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
接下來就可以就資料庫進行增刪改查的操作了:
插入數據:
代碼
private void create(User user) {
Connection connection = null;
try {
connection = this.getConnection();
PreparedStatement statement = connection
.prepareStatement("insert into users (user_name,password) values(?,?)");
int index = 1;
statement.setString(index++, user.getUserName());
statement.setString(index++, user.getPassword());
statement.execute();
user.setId(this.getId(connection));
connection.commit();
} catch (SQLException e) {
rollback(connection);
throw new RuntimeException(e);
} finally {
if (connection != null) {
close(connection);
}
}
}
代碼
private Long getId(Connection connection) throws SQLException {
CallableStatement callableStatement = connection
.prepareCall("values identity_val_local()");
ResultSet resultSet = callableStatement.executeQuery();
resultSet.next();
Long id = resultSet.getLong(1);
resultSet.close();
callableStatement.close();
return id;
}
getId方法是獲得系統默認的id值,是通過 identity_val_local()獲得的,而函數IDENTITY_VAL_LOCAL()則可以在INSERT語句執行之後,為我們返回剛才系統為id所產生的值.感覺還是有點想sequence的curr_val.
修改數據:
代碼
private void update(User user) {
Connection connection = null;
try {
connection = this.getConnection();
PreparedStatement statement = connection
.prepareStatement("update users set user_name=?,password=? where id=?");
int index = 1;
statement.setString(index++, user.getUserName());
statement.setString(index++, user.getPassword());
statement.setLong(index++, user.getId());
statement.execute();
connection.commit();
} catch (SQLException e) {
rollback(connection);
throw new RuntimeException(e);
} finally {
if (connection != null) {
close(connection);
}
}
}
刪除數據:
代碼
public void delete(Long id) {
Connection connection = null;
try {
connection = this.getConnection();
PreparedStatement statement = connection
.prepareStatement("delete from users where id=?");
statement.setLong(1, id);
statement.execute();
connection.commit();
} catch (SQLException e) {
rollback(connection);
throw new RuntimeException(e);
} finally {
if (connection != null) {
close(connection);
}
}
}
查詢數據:
代碼
public User findById(Long id) {
Connection connection = null;
try {
connection = this.getConnection();
PreparedStatement statement = connection
.prepareStatement("select user_name,password from users where id=?");
statement.setLong(1, id);
ResultSet resultSet = statement.executeQuery();
User user = null;
if (resultSet.next()) {
user = new User();
user.setId(id);
user.setUserName(resultSet.getString("user_name"));
user.setPassword(resultSet.getString("password"));
}
resultSet.close();
statement.close();
connection.commit();
return user;
} catch (SQLException e) {
throw new RuntimeException(e);
} finally {
if (connection != null) {
close(connection);
}
}
}
㈢ Java DB是什麼
它卻是一個先進的全事務處理的基於Java技術的資料庫,它支悉如圓持各類開放標准、觸發器和存儲程序。Java DB可以客戶端伺服器模式使用,也可以直接嵌入到一個Java應用程序中。在這些場合,Java DB都可以在同樣的Java虛擬機(JVM)中運行,這就無需在應用程序之外單獨購買、下載、安裝或管理這個資料庫。對於選擇在生產中採用Java DB的客戶,Sun將提供支持服務。橡好 Java DB:Java 6 里的資料庫新安裝了 JDK 6 的程序員們也許會發現,除了傳統的 bin、jre 等目錄,JDK 6 新增了一個名為 javadb 的目錄。這便是 Java 6 的新成員:Java DB。這是一個純 Java 實現、開源的資料庫管理系統(DBMS),源於 Apache 軟體基金會(ASF)名下的項目 Derby。它只有 3MB 大小,對比動輒上 G 的資料庫來說可謂袖珍。但這並不妨礙 Derby 功能齊備,支持幾乎大部分的資料庫應用所需要的特性。更難能可貴的是,依託於 ASF 強大的社區力量,Derby 得到了包括 IBM 和 Sun 等大公司睜塌以及全世界優秀程序員們的支持。這也難怪 Sun 公司會選擇其 10.2.2 版本納入到 JDK 6 中,作為內嵌的資料庫。這就好像為 JDK 注入了一股全新的活力:Java 程序員不再需要耗費大量精力安裝和配置資料庫,就能進行安全、易用、標准、並且免費的資料庫編程。
㈣ 共享文件夾的.db文件如何讀取出來java
共享文件耐耐源畝敗夾的.db文件如何讀取出來java:創建libs文件夾放入後,解壓包:file-project-structure-dependencies 點擊右上角+號,選jars即可。
如果有報錯紅線,滑鼠放上去:more actions-surround with try/昌態catach
㈤ db.properties 在Java中又什麼作用
db應該是英文database(資料庫)的意思,.properties後綴的文察拍件,是java中常用的Java 資源文件,用於定義一些需要經常修改的配置設定。db.properties一般情況下會保存資料庫連接所需的相關配置設定。
一般.properties中定義的參數格式如下:
<參數命名>=<參數設定值(可為空)>
.properties中使用缺激已定義的參數名時格式如下示例:
#發布目錄
publish.dir=${rel.dir}/${project.revision}
其中「publish.dir」為參數名,「rel.dir」和「project.revision」為被引伏沒襪用的參數名。
一般會在系統啟動類中使用properties載入方法,將相關設定資料庫相關配置載入到內存中。
㈥ Java SE 6 新特性: Java DB&n
年底 Sun 公司發布了 Java Standard Edition (Java SE )的最終正式版 代號 Mustang(野馬) 跟 Tiger(Java SE )相備冊陸比 Mustang 在性能方面有了不錯的提升 與 Tiger 在 API 庫方面的大幅度加強相比 雖然 Mustang 在 API 庫方面的新特性顯得不太多 但是也提供了許多實用和方便的功能 在腳本 WebService XML 編譯器 API 資料庫 JMX 網路和 Instrumentation 方面都有不錯的新特性和功能加強 本系列 文章主要介紹 Java SE 在 API 庫方面的部分新特性 通過一些例子和講解 幫助開發者在編程實踐當中更好的運用 Java SE 提高開發效率
本文是系列文章的第 篇 介紹了 Java SE 在資料庫編程方面的新特性
Java DB Java 里的資料庫
新安裝了 JDK 的程序員們也許會發現 除了傳統的 bin jre 等目錄 JDK 新增了一個名為 db 的目錄 這便是 Java 的新成員 Java DB 這是一個純 Java 實現 開源的資料庫管理系統(DBMS) 源於 Apache 軟體基金會(ASF)名下的項目 Derby 它只有 MB 大小 對比動輒上 G 的資料庫來說可謂袖珍 但這並不妨礙 Derby 功能齊備 支持幾乎大部分的資料庫應用所需要的特性 更難能可貴的是 依託於 ASF 強大的社區力量 Derby 得到了包括 IBM 和 Sun 等大公司以及全世界優秀程序員們的支持 這也難怪 Sun 公司會選擇其 版本納入到 JDK 中 作為內嵌的資料庫 這就好像為 JDK 注入了一股全新的活力 Java 程序員不再需要耗費大量精力安裝和配置資料庫 就能進行安全 易用 標准仿頃 並且免費的資料庫編程 在這一章中 我們將初窺 Java DB 的世界 來探究如何使用它編寫出功能豐富的程序
Hello Java DB 內嵌模式的Derby
既然有了內嵌(embedded)的資料庫 就讓我們從一個簡單的範例(代碼在 清單 中列出)開始 試著使用它吧 這個程序做了大多數資料庫應用都可能會做的操作 在 DBMS 中創建了一個名為 helloDB 的數據姿笑庫 創建了一張數據表 取名為 hellotable 向表內插入了兩條數據 然後 查詢數據並將結果列印在控制台上 最後 刪除表和資料庫 釋放資源
清單 HelloJavaDB 的代碼
public class HelloJavaDB { public static void main(String[] args) { try { // load the driver Class forName( apache derby jdbc EmbeddedDriver ) newInstance(); System out println( Load the embedded driver ); Connection conn = null; Properties props = new Properties(); props put( user user ); props put( password user ); //create and connect the database named helloDB conn=DriverManager getConnection( jdbc:derby:helloDB;create=true props); System out println( create and connect to helloDB ); conn setAutoCommit(false); // create a table and insert o records Statement s = conn createStatement(); s execute( create table hellotable(name varchar( ) score int) ); System out println( Created table hellotable ); s execute( insert into hellotable values( Ruth Cao ) ); s execute( insert into hellotable values ( Flora Shi ) ); // list the o records ResultSet rs = s executeQuery( SELECT name score FROM hellotable ORDER BY score ); System out println( name score ); while(rs next()) { StringBuilder builder = new StringBuilder(rs getString( )); builder append( ); builder append(rs getInt( )); System out println(builder toString()); } // delete the table s execute( drop table hellotable ); System out println( Dropped table hellotable ); rs close(); s close(); System out println( Closed result set and statement ); mit(); conn close(); System out println( Committed transaction and closed connection ); try { // perform a clean shutdown DriverManager getConnection( jdbc:derby:;shutdown=true ); } catch (SQLException se) { System out println( Database shut down normally ); } } catch (Throwable e) { // handle the exception } System out println( SimpleApp finished ); }}
隨後 我們在命令行(本例為 Windows 平台 當然 其它系統下稍作改動即可)下鍵入以下命令
清單 運行 HelloJavaDB 命令
java –cp ;%JAVA_HOME%dblibderby jar HelloJavaDB
程序將會按照我們預想的那樣執行 圖 是執行結果的一部分截屏
圖 HelloJavaDB 程序的執行結果
上述的程序和以往沒什麼區別 不同的是我們不需要再為 DBMS 的配置而勞神 因為 Derby 已經自動地在當前目錄下新建了一個名為 helloDB 的目錄 來物理地存儲數據和日誌 需要做的只是注意命名問題 在內嵌模式下驅動的名字應為 apache derby jdbc EmbeddedDriver 創建一個新資料庫時需要在協議後加入 create=true 另外 關閉所有資料庫以及 Derby 的引擎可以使用以下代碼
清單 關閉所有資料庫及 Derby 引擎
DriverManager getConnection( jdbc:derby:;shutdown=true );
如果只想關閉一個資料庫 那麼則可以調用
清單 關閉一個資料庫
DriverManager getConnection( jdbc:derby:helloDB;shutdown=true );
這樣 使用嵌入模式的 Derby 維護和管理資料庫的成本接近於 這對於希望專心寫代碼的人來說不失為一個好消息 然而有人不禁要問 既然有了內嵌模式 為什麼大多數的 DBMS 都沒有採取這樣的模式呢?不妨做一個小實驗 當我們同時在兩個命令行窗口下運行 HelloJavaDB 程序 結果一個的結果與剛才一致 而另一個卻出現了錯誤 如 圖 所示
圖 內嵌模式的局限
錯誤的原因其實很簡單 在使用內嵌模式時 Derby 本身並不會在一個獨立的進程中 而是和應用程序一起在同一個 Java 虛擬機(JVM)里運行 因此 Derby 如同應用所使用的其它 jar 文件一樣變成了應用的一部分 這就不難理解為什麼在 classpath 中加入 derby 的 jar 文件 我們的示常式序就能夠順利運行了 這也說明了只有一個 JVM 能夠啟動資料庫 而兩個跑在不同 JVM 實例里的應用自然就不能夠訪問同一個資料庫了
鑒於上述的局限性 和來自不同 JVM 的多個連接想訪問一個資料庫的需求 下一節將介紹 Derby 的另一種模式 網路伺服器(Neork Server)
網路伺服器模式
如上所述 網路伺服器模式是一種更為傳統的客戶端/伺服器模式 我們需要啟動一個 Derby 的網路伺服器用於處理客戶端的請求 不論這些請求是來自同一個 JVM 實例 還是來自於網路上的另一台機器 同時 客戶端使用 DRDA(Distributed Relational Database Architecture)協議連接到伺服器端 這是一個由 The Open Group 倡導的資料庫交互標准 圖 說明了該模式的大體結構
由於 Derby 的開發者們努力使得網路伺服器模式與內嵌模式之間的差異變小 使得我們只需簡單地修改 清單 中的程序就可以實現 如 清單 所示 我們在 HelloJavaDB 中增添了一個新的函數和一些字元串變數 不難看出 新的代碼只是將一些在 上一節中特別指出的字元串進行了更改 驅動類為 apache derby jdbc ClientDriver 而連接資料庫的協議則變成了 jdbc:derby://localhost: / 這是一個類似 URL 的字元串 而事實上 Derby 網路的客戶端的連接格式為 jdbc:derby://server[:port]/databaseName[;attributeKey=value] 在這個例子中 我們使用了最簡單的本地機器作為伺服器 而埠則是 Derby 默認的 埠
圖 Derby 網路伺服器模式架構
清單 網路伺服器模式下的 HelloJavaDB
public class HelloJavaDB { public static String driver = apache derby jdbc EmbeddedDriver ; public static String protocol = jdbc:derby: ; public static void main(String[] args) { // same as before } private static void parseArguments(String[] args) { if (args length == || args length > ) { return; } if (args[ ] equalsIgnoreCase( derbyclient )) { framework = derbyclient ; driver = apache derby jdbc ClientDriver ; protocol = jdbc:derby://localhost: / ; } }}
當然 僅僅有客戶端是不夠的 我們還需要啟動網路伺服器 Derby 中控制網路伺服器的類是 apache derby drda NeorkServerControl 因此鍵入以下命令即可 如果想了解 NeorkServerControl 更多的選項 只要把 start 參數去掉就可以看到幫助信息了 關於網路伺服器端的實現 都被 Derby 包含在 derbynet jar 里
清單 啟動網路伺服器
java cp ; C:Program FilesJavajdk dblibderby jar ; C:Program FilesJavajdk dblibderbynet jar apache derby drda NeorkServerControl start
相對應的 網路客戶端的實現被包含在 derbyclient jar 中 所以 只需要在 classpath 中加入該 jar 文件 修改後的客戶端就可以順利地讀取數據了 再一次嘗試著使用兩個命令行窗口去連接資料庫 就能夠得到正確的結果了 如果不再需要伺服器 那麼使用 NeorkServerControl 的 shutdown 參數就能夠關閉伺服器
更多
至此 文章介紹了 Java SE 中的新成員 Java DB(Derby) 也介紹了如何在內嵌模式以及網路伺服器模式下使用 Java DB 當然這只是淺嘗輒止 更多高級的選項還需要在 Sun 和 Derby 的文檔中尋找 在這一章的最後 我們將簡單介紹幾個 Java DB 的小工具來加快開發速度 它們都位於 apache derby tools 包內 在開發過程中需要獲取信息或者測試可以用到
ij 一個用來運行 SQL 腳本的工具 dblook 為 Derby 資料庫作模式提取(Schema extraction) 生成 DDL 的工具 sysinfo 顯示系統以及 Derby 信息的工具類JDBC 新功能 新 API
如果說上一章介紹了 Java 中的一個新成員 它本來就存在 但是沒有被加入進 JDK 那麼這一章 我們將關注在 JDBC 中又增加了哪些新功能以及與之相對應的新 API
自動載入驅動
在 JDBC 之前 編寫 JDBC 程序都需要加上以下這句有點醜陋的代碼
清單 注冊 JDBC 驅動
Class forName( apache derby jdbc EmbeddedDriver ) newInstance();
Java sql DriverManager 的內部實現機制決定了這樣代碼的出現 只有先通過 Class forName 找到特定驅動的 class 文件 DriverManager getConnection 方法才能順利地獲得 Java 應用和資料庫的連接 這樣的代碼為編寫程序增加了不必要的負擔 JDK 的開發者也意識到了這一點 從 Java 開始 應用程序不再需要顯式地載入驅動程序了 DriverManager 開始能夠自動地承擔這項任務 作為試驗 我們可以將 清單 中的相關代碼刪除 重新編譯後在 JRE 下運行 結果和原先的程序一樣
好奇的讀者也許會問 DriverManager 為什麼能夠做到自動載入呢?這就要歸功於一種被稱為 Service Provider 的新機制 熟悉 Java 安全編程的程序員可能對其已經是司空見慣 而它現在又出現在 JDBC 模塊中 JDBC 的規范規定 所有 JDBC 的驅動 jar 文件必須包含一個 java sql Driver 它位於 jar 文件的 META INF/services 目錄下 這個文件里每一行便描述了一個對應的驅動類 其實 編寫這個文件的方式和編寫一個只有關鍵字(key)而沒有值(value)的 properties 文件類似 同樣地 # 之後的文字被認為是注釋 有了這樣的描述 DriverManager 就可以從當前在 CLASSPATH 中的驅動文件中找到 它應該去載入哪些類 而如果我們在 CLASSPATH 里沒有任何 JDBC 的驅動文件的情況下 調用 清單 中的代碼會輸出一個 sun jdbc odbc JdbcOdbcDriver 類型的對象 而仔細瀏覽 JDK 的目錄 這個類型正是在 %JAVA_HOME%/jre/lib/resources jar 的 META INF/services 目錄下的 java sql Driver 文件中描述的 也就是說 這是 JDK 中默認的驅動 而如果開發人員想使得自己的驅動也能夠被 DriverManager 找到 只需要將對應的 jar 文件加入到 CLASSPATH 中就可以了 當然 對於那些 JDBC 之前的驅動文件 我們還是只能顯式地去載入了
清單 羅列本地機器上的 JDBC 驅動
Enumeration<Driver> drivers = DriverManager getDrivers();while(drivers hasMoreElements()) { System out println(drivers nextElement());}
RowId
熟悉 DB Oracle 等大型 DBMS 的人一定不會對 ROWID 這個概念陌生 它是數據表中一個 隱藏 的列 是每一行獨一無二的標識 表明這一行的物理或者邏輯位置 由於 ROWID 類型的廣泛使用 Java SE 中新增了 java sql RowId 的數據類型 允許 JDBC 程序能夠訪問 SQL 中的 ROWID 類型 誠然 不是所有的 DBMS 都支持 ROWID 類型 即使支持 不同的 ROWID 也會有不同的生命周期 因此使用 DatabaseMetaData getRowIdLifetime 來判斷類型的生命周期不失為一項良好的實踐經驗 我們在 清單 的程序獲得連接之後增加以下代碼 便可以了解 ROWID 類型的支持情況
清單 了解 ROWID 類型的支持情況DatabaseMetaData meta = conn getMetaData();System out println(meta getRowIdLifetime());
Java SE 的 API 規范中 java sql RowIdLifetime 規定了 種不同的生命周期 ROWID_UNSUPPORTED ROWID_VALID_FOREVER ROWID_VALID_OTHER ROWID_VALID_SESSION 和 ROWID_VALID_TRANSACTION 從字面上不難理解它們表示了不支持 ROWID ROWID 永遠有效等等 具體的信息 還可以參看相關的 JavaDoc 讀者可以嘗試著連接 Derby 進行試驗 會發現運行結果是 ROWID_UNSUPPORTED 即 Derby 並不支持 ROWID
既然提供了新的數據類型 那麼一些相應的獲取 更新數據表內容的新 API 也在 Java 中被添加進來 和其它已有的類型一樣 在得到 ResultSet 或者 CallableStatement 之後 調用 get/set/update 方法得到/設置/更新 RowId 對象 示例的代碼如 清單 所示
清單 獲得/設置 RowId 對象
// Initialize a pstmt = connection prepareStatement( SELECT rowid name score FROM hellotable WHERE rowid = ? );// Bind rowid into prepared statement pstmt setRowId( rowid);// Execute the statementResultSet rset = pstmt executeQuery(); // List the recordswhile(rs next()) { RowId id = rs getRowId( ); // get the immutable rowid object String name = rs getString( ); int score = rs getInt( );}
鑒於不同 DBMS 的不同實現 RowID 對象通常在不同的數據源(datasource)之間並不是可移植的 因此 JDBC 的 API 規范並不建議從連接 A 取出一個 RowID 對象 將它用在連接 B 中 以避免不同系統的差異而帶來的難以解釋的錯誤 而至於像 Derby 這樣不支持 RowId 的 DBMS 程序將直接在 setRowId 方法處拋出
SQLXML
SQL 標准引入了 SQL/XML 作為 SQL 標準的擴展 SQL/XML 定義了 SQL 語言怎樣和 XML 交互 如何創建 XML 數據 如何在 SQL 語句中嵌入 XQuery 表達式等等 作為 JDBC 的一部分 Java 增加了 java sql SQLXML 的類型 JDBC 應用程序可以利用該類型初始化 讀取 存儲 XML 數據 java sql Connection createSQLXML 方法就可以創建一個空白的 SQLXML 對象 當獲得這個對象之後 便可以利用 setString setBinaryStream setCharacterStream 或者 setResult 等方法來初始化所表示的 XML 數據 以 setCharacterStream 為例 清單 表示了一個 SQLXML 對象如何獲取 java io Writer 對象 從外部的 XML 文件中逐行讀取內容 從而完成初始化
清單 利用 setCharacterStream 方法來初始化 SQLXML 對象
SQLXML xml = con createSQLXML();Writer writer = xml setCharacterStream();BufferedReader reader = new BufferedReader(new FileReader( test xml ));String line= null;while((line = reader readLine() != null) { writer write(line);}
由於 SQLXML 對象有可能與各種外部的資源有聯系 並且在一個事務中一直持有這些資源 為了防止應用程序耗盡資源 Java 提供了 free 方法來釋放其資源 類似的設計在 java sql Array Clob 中都有出現
至於如何使用 SQLXML 與資料庫進行交互 其方法與其它的類型都十分相似 可以參照 RowId 一節 中的例子在 Java SE 的 API 規范中找到 SQLXML 中對應的 get/set/update 方法構建類似的程序 此處不再贅述
SQLExcpetion 的增強
在 Java SE 之前 有關 JDBC 的異常類型不超過 個 這似乎已經不足以描述日漸復雜的資料庫異常情況 因此 Java SE 的設計人員對以 java sql SQLException 為根的異常體系作了大幅度的改進 首先 SQLException 新實現了 Iterable<Throwable> 介面 清單 實現了 清單 程序的異常處理機制 這樣簡潔地遍歷了每一個 SQLException 和它潛在的原因(cause)
清單 SQLException 的 for each loop
// Java codecatch (Throwable e) { if (e instanceof SQLException) { for(Throwable ex : (SQLException)e ){ System err println(ex toString()); } }}
此外 圖 表示了全部的 SQLException 異常體系 除去原有的 SQLException 的子類 Java 中新增的異常類被分為 種 SQLReoverableException SQLNonTransientException SQLTransientException 在 SQLNonTransientException 和 SQLTransientException 之下還有若乾子類 詳細地區分了 JDBC 程序中可能出現的各種錯誤情況 大多數子類都會有對應的標准 SQLState 值 很好地將 SQL 標准和 Java 類庫結合在一起
圖 SQLException 異常體系
在眾多的異常類中 比較常見的有 用來表示 JDBC 驅動不支持某項 JDBC 的特性 例如在 Derby 下運行 清單 中的程序 就可以發現 Derby 的驅動並不支持 RowId 的特性 另外值得一提的是 SQLClientInfoException 直接繼承自 SQLException 表示當一些客戶端的屬性不能被設置在一個資料庫連接時所發生的異常
小結 更多新特性與展望
在本文中 我們已經向讀者介紹了 Java SE 中 JDBC 最重要的一些新特性 它們包括嵌在 JDK 中的 Java DB (Derby)和 JDBC 的一部分 當然 還有很多本文還沒有覆蓋到的新特性 比如增加了對 SQL 語言中 NCHAR NVARCHAR LONGNVARCHAR 和 NCLOB 類型的支持 在資料庫連接池的環境下為管理 Statement 對象提供更多靈活 便利的方法等
lishixin/Article/program/Java/JSP/201311/19343
㈦ java怎麼連接db資料庫文件
(){
BasicDataSourcedataSource=getDataSource(dynamicSourceEntity);
JdbcTemplatejdbcTemplate=newJdbcTemplate(dataSource);
returnjdbcTemplate;
}
publicstaticvoidmain(String[]args){
襪伍=newDynamicDataSourceEntity();
StringdbKey="SAP_DB";
StringdriverClassName="oracle.jdbc.driver.OracleDriver";
Stringurl="jdbc:oracle:thin:@10.10.0.59:1521:mid";
StringdbUser="CRM";
StringdbPassword="CRM2013";
dynamicSourceEntity.setDbKey(dbKey);
dynamicSourceEntity.setDriverClass(driverClassName);
dynamicSourceEntity.setUrl(url);
dynamicSourceEntity.setDbUser(dbUser);
dynamicSourceEntity.setDbPassword(dbPassword);
告旅或
JdbcTemplatejdbcTemplate=getJdbcTemplate(dynamicSourceEntity);
Stringsql="selectak.VKBUR,ak.KUNNR,ak.BSTNK,ak.VBELN,ak.MAHDT,ak.BSTDKfromVBAKakwhereak.VKORG='6002'";
//List<Map<String,Object>>list=DynamicDBUtil.getList(jdbcTemplate,sql);
鎮備//System.out.println(list.size());
}
㈧ Java DB是什麼
DB(英文全稱data base,資料庫)是依照某種數據模型組織起來並存放二級存儲器中的數據集合。這種數據集合具有如下特點:盡可能不重復,以最優方式為某個特定組織的多種應用服務,其數據結構獨立於使用它的應用程序,對數據的增、刪、改和檢索由統一軟體進行管理和控制。從發展的歷史看,資料庫是數據管理的高級階段,它是由文件管理系統發展起來的。