今天要做異構(gòu)系統(tǒng)的數(shù)據(jù)集成。之前做過webservice的歌焦。以及調(diào)用webapi淮捆。具體情況具體分析。之后把webservice和webapi單獨整理一下躯护。
此次場景是對方系統(tǒng)直接提供數(shù)據(jù)庫視圖惊来,地址,用戶名和密碼棺滞。我們系統(tǒng)去直接讀取數(shù)據(jù)裁蚁。相關(guān)api都有點生疏了,通過此次继准,整理一下jdbc相關(guān)知識枉证。
JDBC介紹
Java數(shù)據(jù)庫連接,(Java Database Connectivity移必,簡稱JDBC)是Java語言中用來規(guī)范客戶端程序如何來訪問數(shù)據(jù)庫的應(yīng)用程序接口室谚,提供了諸如查詢和更新數(shù)據(jù)庫中數(shù)據(jù)的方法。JDBC也是Sun Microsystems的商標(biāo)。我們通常說的JDBC是面向關(guān)系型數(shù)據(jù)庫的秒赤。
jdbc步驟
//1.加載驅(qū)動程序
//Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
//Class.forName("oracle.jdbc.driver.OracleDriver");
Class.forName("com.mysql.jdbc.Driver");
//2.獲得數(shù)據(jù)庫的連接
//String url = "jdbc:sqlserver://ip地址:端口;databaseName=數(shù)據(jù)庫名;user=用戶名;password=密碼";
//String mysqlurl="jdbc:mysql://ip地址:端口/數(shù)據(jù)庫名?user=用戶名&password=密碼&useUnicode=true&characterEncoding=utf8&autoReconnect=true&failOverReadOnly=false";
//Connection conn = DriverManager.getConnection(mysqlurl);
Connection conn = DriverManager.getConnection(URL,USER,PASSWORD);
//3.操作數(shù)據(jù)庫
//獲取Statement對象
Statement stmt = conn.createStatement();
//4.執(zhí)行sql語句猪瞬,獲取結(jié)果集
ResultSet rs = stmt.executeQuery("SELECT user_name,age FROM T_test");
//5.獲取返回的數(shù)據(jù)
while(rs.next()){
System.out.println("用戶名:" + rs.getString("user_name") + " 年齡:" + rs.getInt("age"));
}
//6.釋放資源
rs.close();
stme.close();
conn.close();
主要類說明(api中文文檔原文)
DriverManager
- 用于管理一組JDBC驅(qū)動程序的基本服務(wù)。
注意: JDBC 2.0 API中新增的DataSource
接口提供了另一種連接到數(shù)據(jù)源的方法入篮。 使用DataSource
對象是連接到數(shù)據(jù)源的首選方法陈瘦。
作為其初始化的一部分,DriverManager
類將嘗試加載在“jdbc.drivers”系統(tǒng)屬性中引用的驅(qū)動程序類崎弃。 這允許用戶自定義應(yīng)用程序使用的JDBC驅(qū)動程序甘晤。 例如在?/ .hotjava / properties文件中,您可以指定:
jdbc.drivers=foo.bah.Driver:wombat.sql.Driver:bad.taste.ourDriver
DriverManager
方法getConnection
和getDrivers
已得到增強(qiáng)饲做,以支持Java Standard Edition Service Provider機(jī)制线婚。 JDBC 4.0驅(qū)動程序必須包含文件META-INF/services/java.sql.Driver
。 該文件包含java.sql.Driver的JDBC驅(qū)動程序?qū)崿F(xiàn)的java.sql.Driver
盆均。 例如塞弊,要加載my.sql.Driver
類,META-INF/services/java.sql.Driver
文件將包含條目:
my.sql.Driver
應(yīng)用程序不再需要使用Class.forName()
顯式加載JDBC驅(qū)動程序泪姨。 目前使用加載JDBC驅(qū)動程序的現(xiàn)有程序Class.forName()
將繼續(xù)無需修改工作游沿。
當(dāng)調(diào)用方法getConnection
時,DriverManager
將嘗試從初始化中加載的驅(qū)動程序中找到合適的驅(qū)動程序肮砾,并使用與當(dāng)前小程序或應(yīng)用程序相同的類加載器顯式加載驅(qū)動程序诀黍。
從Java 2 SDK,Standard Edition仗处,1.3版開始眯勾,只有在授予了適當(dāng)?shù)臋?quán)限后才能設(shè)置記錄流。 通常這將通過ToolTool工具來完成婆誓,該工具可用于授予permission java.sql.SQLPermission "setLog"
吃环。
Statement
public interface Statement
extends Wrapper, AutoCloseable
- 用于執(zhí)行靜態(tài)SQL語句并返回其生成的結(jié)果的對象。
默認(rèn)情況下洋幻,每個Statement
對象只能有一個ResultSet
對象同時打開郁轻。 因此,如果一個ResultSet
對象的讀取與另一個對象的讀取交錯文留,則ResultSet
對象必須由不同的Statement
對象生成好唯。 在所有執(zhí)行方法Statement
接口隱式關(guān)閉當(dāng)前ResultSet
聲明的對象,如果一個開放的存在燥翅。
ResultSet
public interface ResultSet
extends Wrapper, AutoCloseable
表示數(shù)據(jù)庫結(jié)果集的數(shù)據(jù)表渠啊,通常通過執(zhí)行查詢數(shù)據(jù)庫的語句生成。
-
ResultSet
對象保持一個光標(biāo)指向其當(dāng)前的數(shù)據(jù)行权旷。 最初替蛉,光標(biāo)位于第一行之前贯溅。next
方法將光標(biāo)移動到下一行,并且由于在ResultSet
對象中沒有更多行時返回false
躲查,因此可以在while
循環(huán)中使用循環(huán)來遍歷結(jié)果集它浅。 - 默認(rèn)的
ResultSet
對象不可更新,并且只有一個向前移動的光標(biāo)镣煮。 因此姐霍,您只能從第一行到最后一行迭代一次。 可以生成可滾動和/或可更新的ResultSet
對象典唇。 以下代碼片段(其中con
是有效的Connection
對象)說明了如何使可滾動且對其他人更新不敏感的結(jié)果集镊折,這是可更新的。 有關(guān)其他選項介衔,請參閱ResultSet
字段恨胚。
Statement stmt = con.createStatement(
ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_UPDATABLE);
ResultSet rs = stmt.executeQuery("SELECT a, b FROM TABLE2");
// rs will be scrollable, will not show changes made by others,
// and will be updatable
- 所述
ResultSet
接口提供getter方法(getBoolean
,getLong
炎咖,用于從當(dāng)前行檢索列值赃泡,等等)。 可以使用列的索引號或列的名稱來檢索值乘盼。 一般來說升熊,使用列索引將更有效率。 列從1編號绸栅。為了最大可移植性级野,每行中的結(jié)果集列應(yīng)以從左到右的順序讀取,每列應(yīng)只讀一次粹胯。 - 對于getter方法蓖柔,JDBC驅(qū)動程序嘗試將底層數(shù)據(jù)轉(zhuǎn)換為getter方法中指定的Java類型,并返回合適的Java值矛双。 JDBC規(guī)范具有一個表格,該表格顯示了可由
ResultSet
getter方法使用的SQL類型到Java類型的允許映射蟆豫。 - 用作getter方法輸入的列名不區(qū)分大小寫议忽。 當(dāng)使用列名稱調(diào)用getter方法時,多個列具有相同的名稱十减,將返回第一個匹配列的值栈幸。 列名稱選項用于在生成結(jié)果集的SQL查詢中使用列名時使用。 對于在查詢中未明確命名的列帮辟,最好使用列號速址。 如果使用列名稱,程序員應(yīng)該小心保證它們唯一地引用預(yù)期的列由驹,這可以通過SQL AS子句來確保芍锚。
- JDBC 2.0 API(Java¢2 SDK,Standard Edition,1.2版)中的此接口添加了一組更新方法并炮。 關(guān)于getter方法參數(shù)的注釋也適用于updater方法的參數(shù)默刚。
- 更新方法可以以兩種方式使用:
- 更新當(dāng)前行中的列值。 在可滾動的
ResultSet
對象中逃魄,光標(biāo)可以向前和向后移動到絕對位置或相對于當(dāng)前行的位置荤西。 下面的代碼段更新NAME
所述的第五行中列ResultSet
對象rs
,然后使用方法updateRow
來更新該數(shù)據(jù)的源表rs
推導(dǎo)伍俘。
rs.absolute(5); // moves the cursor to the fifth row of rs
rs.updateString("NAME", "AINSWORTH"); // updates the
// `NAME` column of row 5 to be `AINSWORTH`
rs.updateRow(); // updates the row in the data source
- 將列值插入到插入行中邪锌。 可更新的
ResultSet
對象具有與其相關(guān)ResultSet
的特殊行,用作構(gòu)建要插入的行的暫存區(qū)域癌瘾。 以下代碼片段將光標(biāo)移動到插入行觅丰,構(gòu)建一個三列行,并將其插入到rs
柳弄,并使用方法insertRow
進(jìn)入數(shù)據(jù)源表舶胀。
rs.moveToInsertRow(); // moves cursor to the insert row
rs.updateString(1, "AINSWORTH"); // updates the
// first column of the insert row to be `AINSWORTH`
rs.updateInt(2,35); // updates the second column to be `35`
rs.updateBoolean(3, true); // updates the third column to `true`
rs.insertRow();
rs.moveToCurrentRow();
甲ResultSet
當(dāng)對象將自動關(guān)閉Statement
生成它對象被關(guān)閉時,重新執(zhí)行碧注,或用于檢索從多個結(jié)果的序列中的下一結(jié)果嚣伐。
ResultSet
對象的列的數(shù)量,類型和屬性由ResultSet.getMetaData
方法返回的ResultSetMetaData
對象提供萍丐。