專利名稱:一種通過jdbc接口訪問平面文件的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種訪問平面文件的方法,尤其涉及一種通過JDBCCJava數(shù)據(jù)庫連接)接口訪問平面文件的方法,屬于數(shù)據(jù)庫應(yīng)用技術(shù)領(lǐng)域。
背景技術(shù):
平面文件是指除去所有特定應(yīng)用(程序)格式,從而使數(shù)據(jù)元素可以遷移到其他應(yīng)用上進(jìn)行處理的電子文件。典型的平面文件包括txt、xls、csv等格式的電子文件。這種除去特定應(yīng)用格式的數(shù)據(jù)存儲方式可以避免因?yàn)橛布蛯S熊浖倪^時而導(dǎo)致數(shù)據(jù)丟失。
另一方面,JDBC是Java語言訪問數(shù)據(jù)庫的標(biāo)準(zhǔn)接口。它由一組Java語言編寫的類和接口組成,使用內(nèi)嵌式的SQL語句,主要實(shí)現(xiàn)三方面的功能建立與數(shù)據(jù)庫的連接,執(zhí)行SQL語句以及處理SQL語句執(zhí)行結(jié)果。JDBC對于Java程序員而言是API,對實(shí)現(xiàn)與數(shù)據(jù)庫連接的服務(wù)提供商而言是接口模型。作為API,JDBC為程序開發(fā)提供標(biāo)準(zhǔn)的接口,并為數(shù)據(jù)庫廠商及第三方中間件廠商實(shí)現(xiàn)與數(shù)據(jù)庫的連接提供了標(biāo)準(zhǔn)方法。
JDBC接口使用已有的SQL標(biāo)準(zhǔn)并支持與其它數(shù)據(jù)庫的連接標(biāo)準(zhǔn),如0DBC(開放數(shù)據(jù)庫互連)之間的橋接。通過JDBC接口,可以直接對底層關(guān)系數(shù)據(jù)庫執(zhí)行SQL語句、獲取結(jié)果集、更新數(shù)據(jù)等。利用JDBC接口可以構(gòu)建更高級的工具和接口,使數(shù)據(jù)庫開發(fā)人員能夠用JavaAPI編寫各種數(shù)據(jù)庫應(yīng)用程序。
圖1顯示了通過JDBC接口訪問關(guān)系數(shù)據(jù)庫的基本機(jī)制。Java應(yīng)用程序首先訪問關(guān)系數(shù)據(jù)庫廠商提供的JDBC接口,進(jìn)而訪問相應(yīng)的關(guān)系數(shù)據(jù)庫。有了 JDBC接口,向各種關(guān)系數(shù)據(jù)庫發(fā)送SQL語句就是一件很容易的事。應(yīng)用開發(fā)人員只需要用JDBC API編寫一個程序,就可以向相應(yīng)的數(shù)據(jù)庫發(fā)送SQL調(diào)用語句,而不需要為每種數(shù)據(jù)庫編寫相應(yīng)的應(yīng)用程序。
但是對于平面文件而言,由于不在關(guān)系數(shù)據(jù)庫范疇之內(nèi),操作系統(tǒng)廠商并未提供各種編程語言的接口實(shí)現(xiàn),如JDBC或ODBC接口的實(shí)現(xiàn)。因此,應(yīng)用程序訪問平面文件只能通過字節(jié)流的方式進(jìn)行。由于操作系統(tǒng)差異、文件編碼差異、文件結(jié)構(gòu)差異等問題會導(dǎo)致大量的編碼工作,為應(yīng)用程序編寫增加不必要的難度。發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問題在于提供一種通過JDBC接口訪問平面文件的方法。 該方法可以使應(yīng)用程序像訪問關(guān)系數(shù)據(jù)庫一樣通過JDBC接口訪問平面文件。
為實(shí)現(xiàn)上述的發(fā)明目的,本發(fā)明采用下述的技術(shù)方案
一種通過JDBC接口訪問平面文件的方法,其特征在于包括如下步驟
(1)通過Connection對象與平面文件建立連接;
(2)執(zhí)行如下操作中的任意一個通過DatabaseMetadata對象獲取元信息;創(chuàng)建用于預(yù)處理的ft·印arecKtatement對象;創(chuàng)建用于執(zhí)行SQL語句的Matement對象;
(3)在通過DatabaseMetadata對象獲取元信息之后,返回結(jié)果集;
(4)通過所述Matement對象或者所述Pi^parecKtatement對象執(zhí)行SQL語句對所述結(jié)果集進(jìn)行操作。
其中較優(yōu)地,所述步驟(1)中通過連接串的統(tǒng)一資源定位符中指定的屬性決定以下信息文件存放的路徑、文件編碼格式、行分隔符、列分隔符、文本限定符和文件頭是否表示列名。
其中較優(yōu)地,所述步驟(3)中,獲取元信息的方式包括獲取表的結(jié)果集和獲取列的結(jié)果集。
獲取表的結(jié)果集是指根據(jù)在連接信息中指定的文件路徑以及在該接口方法中指定的過濾條件,以結(jié)果集的方式返回所有滿足條件的文件,每個文件代表一個表,在結(jié)果集中以一條記錄表示。
獲取列的結(jié)果集是指根據(jù)在連接串中指定的文件編碼格式、行分隔符、列分隔符、 文本限定符和文件頭是否表示列名,以結(jié)果集的方式返回文件中的所有列,每條記錄表示一個列,返回信息中包括列名、列類型。
本發(fā)明為應(yīng)用開發(fā)者通過Java應(yīng)用程序進(jìn)行平面文件讀寫提供了方便。利用本發(fā)明,應(yīng)用開發(fā)者可以像訪問關(guān)系數(shù)據(jù)庫一樣通過JDBC標(biāo)準(zhǔn)接口訪問平面文件,為數(shù)據(jù)庫與平面文件之間的數(shù)據(jù)遷移和數(shù)據(jù)同步提供了一個有效的解決手段。
下面結(jié)合附圖和具體實(shí)施方式
對本發(fā)明作進(jìn)一步的詳細(xì)說明。
圖1為現(xiàn)有技術(shù)中,Java應(yīng)用程序通過JDBC接口訪問關(guān)系數(shù)據(jù)庫的機(jī)制示意圖2為通過本發(fā)明所提供的方法訪問平面文件的操作過程示意圖3為本發(fā)明中,Java應(yīng)用程序通過JDBC接口訪問帶格式的平面文件的機(jī)制示意圖。
具體實(shí)施方式
在本發(fā)明的一個實(shí)施例中,根據(jù)應(yīng)用程序訪問平面文件的實(shí)際需求,通過編程實(shí)現(xiàn)基于JDBC接口的下述對象(a)用于進(jìn)行關(guān)系數(shù)據(jù)庫連接的Connection對象,通過該對象可以指定要讀寫的平面文件的位置、擴(kuò)展名、格式、編碼等信息;(b)用于獲取數(shù)據(jù)庫元信息的DatabaseMetadata對象,通過該對象可以獲得關(guān)于表、列、類型等元信息;(c)用于執(zhí)行SQL語句的Matement對象,通過執(zhí)行DDL(數(shù)據(jù)定義語言)語句進(jìn)行文件的創(chuàng)建、刪除、結(jié)構(gòu)更改,通過執(zhí)行DML(數(shù)據(jù)操縱語言)語句進(jìn)行文件內(nèi)容的增刪改;(d)用于執(zhí)行預(yù)處理語句的ft·印arecKtatement對象,通過參數(shù)綁定,實(shí)現(xiàn)對數(shù)據(jù)庫中數(shù)據(jù)的批量更新; (e)用于存放結(jié)果集的Resultkt對象,以結(jié)果集的形式,返回文件內(nèi)容或元信息;(f)用于語法解析的相關(guān)類。上述對象和類的具體實(shí)現(xiàn)是本領(lǐng)域普通技術(shù)人員都能掌握的常規(guī)技術(shù)手段,在此就不詳細(xì)說明了。
如圖2所示,應(yīng)用程序利用上述基于JDBC接口的對象和類,通過包括建立連接、獲取元信息、查詢結(jié)果集、對結(jié)果集進(jìn)行操作、通過結(jié)果集更新文件等操作步驟實(shí)現(xiàn)對平面文件的讀寫等訪問操作。具體說明如下
首先,應(yīng)用程序通過Connection對象與平面文件建立連接。在建立連接的過程中,可以通過連接串的url (統(tǒng)一資源定位符)中指定的屬性來決定文件的以下屬性信息 文件存放的路徑、文件編碼格式、用以區(qū)分每條數(shù)據(jù)的分隔符(行分隔符)、用以區(qū)分每個屬性的分隔符(列分隔符)、用以處理文本字段的分隔符(文本限定符)、文件頭是否表示列名等。文件的位置、擴(kuò)展名、格式、編碼等信息可以直接通過連接串予以指定。
在建立連接以后,可以根據(jù)需要執(zhí)行以下幾類對象的操作通過 DatabaseMetadata對象獲取元信息,創(chuàng)建用于預(yù)處理的ft·印arecKtatement對象,創(chuàng)建用于執(zhí)行SQL語句的Matement對象。其中DatabaseMetadata對象主要用在以平面文件為目標(biāo)源的場合,而ft·印arecKtatement對象和Matement對象主要用在以平面文件為數(shù)據(jù)源的場合。
對于平面文件而言,獲取元信息的方式主要有獲取表的結(jié)果集和獲取列的結(jié)果集。獲取表(getTables)的結(jié)果集,是指根據(jù)在連接信息中指定的文件路徑以及在該接口方法中指定的過濾條件,以結(jié)果集(ResultSet)的方式返回所有滿足條件的文件,每個文件代表一個表,在結(jié)果集中以一條記錄表示。獲取列(getColumns)的結(jié)果集,是指根據(jù)在連接串中指定的文件編碼格式、行分隔符、列分隔符、文本限定符和文件頭是否表示列名等,以結(jié)果集(ResultSet)的方式返回文件中的所有列,每條記錄表示一個列,返回信息中包括列名、列類型等。
在本發(fā)明中,執(zhí)行SQL語句對結(jié)果集進(jìn)行操作的功能是通過創(chuàng)建Matement對象或I^reparecKtatement對象實(shí)現(xiàn)的。對于DDL (數(shù)據(jù)定義語言)語句和簡單SQL語句,可以直接調(diào)用Matement對象中的execute方法執(zhí)行,如創(chuàng)建表和刪除表。對于創(chuàng)建表語句,首先調(diào)用語法分析模塊,解析出SQL語句中的表名、列名,根據(jù)表名和連接屬性中的指定的文件編碼格式,決定創(chuàng)建文件的文件名和格式,再根據(jù)連接屬性中指定的文件頭是否表示列名、 列分隔符、行分隔符,決定向文件中寫入的內(nèi)容。對于刪除表語句,首先調(diào)用語法分析模塊, 解析出SQL語句中的表名,再根據(jù)表名找到對應(yīng)的文件名,刪除文件。對于簡單的DML(數(shù)據(jù)操縱語言)語句,如klect語句,首先調(diào)用語法分析模塊,解析出SQL語句中的表名和列名,根據(jù)表名找到對應(yīng)的文件名,根據(jù)列名和連接屬性中指定的文件編碼格式、行分隔符、 列分隔符,遍歷文件,把符合條件的值以結(jié)果集的方式返回。
對于基于結(jié)果集的批量插入和批量更新操作,可以通過ft·印arecKtatement對象中提供的相關(guān)方法實(shí)現(xiàn)。具體說明如下首先通過一個預(yù)處理SQL語句,聲明一個 PreparedStatement對象,調(diào)用語法分析模塊,解析預(yù)處理SQL語句中的表名、列名和占位符,根據(jù)占位符信息,構(gòu)造存儲批量更新值的數(shù)組。在調(diào)用綁定參數(shù)的過程中,將對應(yīng)于占位符的相應(yīng)值放入數(shù)組中的相應(yīng)位置。在批量提交時,根據(jù)表名找到對應(yīng)的文件名,根據(jù)連接屬性中指定的文件編碼格式、行分隔符、列分隔符,決定寫入文件內(nèi)容的格式,最后,遍歷數(shù)組,將批量更新的所有記錄寫入文件中。
如圖3所示,Java應(yīng)用程序可以像訪問關(guān)系數(shù)據(jù)庫一樣,使用JDBC標(biāo)準(zhǔn)接口訪問帶格式的平面文件。對于應(yīng)用開發(fā)人員來說,應(yīng)用程序訪問平面文件的機(jī)制與訪問關(guān)系數(shù)據(jù)庫的機(jī)制完全一樣,應(yīng)用開發(fā)人員所關(guān)心的接口為同一個標(biāo)準(zhǔn)接口,就是JDBC接口。
通過本發(fā)明所提供的平面文件訪問方法,可以顯著降低應(yīng)用開發(fā)人員實(shí)現(xiàn)關(guān)系數(shù)據(jù)庫與平面文件交互的難度,減少編碼工作量,節(jié)約開發(fā)成本,提高系統(tǒng)的可維護(hù)性和可擴(kuò)展性。特別是在處理關(guān)系數(shù)據(jù)庫與平面文件之間的數(shù)據(jù)遷移和數(shù)據(jù)同步方面,使用同一套編碼,既可以訪問關(guān)系數(shù)據(jù)庫,又可以讀寫平面文件。
以上對本發(fā)明所提供的通過JDBC接口訪問平面文件的方法進(jìn)行了詳細(xì)的說明。 對本領(lǐng)域的技術(shù)人員而言,在不背離本發(fā)明實(shí)質(zhì)精神的前提下對它所做的任何顯而易見的改動,都將構(gòu)成對本發(fā)明專利權(quán)的侵犯,將承擔(dān)相應(yīng)的法律責(zé)任。
權(quán)利要求
1.一種通過JDBC接口訪問平面文件的方法,其特征在于包括如下步驟(1)通過Connection對象與平面文件建立連接;(2)執(zhí)行如下操作中的任意一個通過DatabaseMetadata對象獲取元信息;創(chuàng)建用于預(yù)處理的I^reparecKtatement對象;創(chuàng)建用于執(zhí)行SQL語句的Matement對象;(3)在通過DatabaseMetadata對象獲取元信息之后,返回結(jié)果集;(4)通過所述Matement對象或者所述ft·印arecKtatement對象執(zhí)行SQL語句對所述結(jié)果集進(jìn)行操作。
2.如權(quán)利要求1所述的通過JDBC接口訪問平面文件的方法,其特征在于所述步驟(1)中,通過連接串的統(tǒng)一資源定位符中指定的屬性決定以下信息文件存放的路徑、文件編碼格式、行分隔符、列分隔符、文本限定符和文件頭是否表示列名。
3.如權(quán)利要求1所述的通過JDBC接口訪問平面文件的方法,其特征在于所述步驟(3)中,獲取元信息的方式包括獲取表的結(jié)果集和獲取列的結(jié)果集。
4.如權(quán)利要求3所述的通過JDBC接口訪問平面文件的方法,其特征在于獲取表的結(jié)果集是指根據(jù)在連接信息中指定的文件路徑以及在該接口方法中指定的過濾條件,以結(jié)果集的方式返回所有滿足條件的文件,每個文件代表一個表,在結(jié)果集中以一條記錄表示。
5.如權(quán)利要求3所述的通過JDBC接口訪問平面文件的方法,其特征在于獲取列的結(jié)果集是指根據(jù)在連接串中指定的文件編碼格式、行分隔符、列分隔符、文本限定符和文件頭是否表示列名,以結(jié)果集的方式返回文件中的所有列,每條記錄表示一個列,返回信息中包括列名、列類型。
全文摘要
本發(fā)明公開了一種通過JDBC接口訪問平面文件的方法,包括如下步驟(1)通過Connection對象與平面文件建立連接;(2)執(zhí)行如下操作中的任意一個通過DatabaseMetadata對象獲取元信息;創(chuàng)建用于預(yù)處理的PreparedStatement對象;創(chuàng)建用于執(zhí)行SQL語句的Statement對象;(3)在通過DatabaseMetadata對象獲取元信息之后,返回結(jié)果集;(4)通過Statement對象或者PreparedStatement對象執(zhí)行SQL語句對結(jié)果集進(jìn)行操作。利用本發(fā)明,應(yīng)用開發(fā)者可以像訪問關(guān)系數(shù)據(jù)庫一樣通過JDBC標(biāo)準(zhǔn)接口訪問平面文件,為數(shù)據(jù)庫與平面文件之間的數(shù)據(jù)遷移和數(shù)據(jù)同步提供了一個有效的解決手段。
文檔編號G06F17/30GK102521408SQ20111044512
公開日2012年6月27日 申請日期2011年12月27日 優(yōu)先權(quán)日2011年12月27日
發(fā)明者李品新, 白蕓 申請人:北京人大金倉信息技術(shù)股份有限公司