數據庫實驗4:JDBC&ODBC

NO IMAGE

2017-5-5

實驗目的

1.熟悉JDBC的配置和使用

2.熟悉ODBC的配置和使用

3.鞏固SQL的知識

實驗用時:兩次上機

實驗要求

1.對上述的程序,要求調試成功,在實驗報告中對每個實驗要求的實現代碼片段、實驗結果顯示等內容截圖並進行說明。

2.分析JDBC編程的主要結構。

3.分析ODBC編程的主要架構。

4.比較並分析JDBC編程與ODBC編程的異同點。

5.記錄實驗過程,並對各活動(包括錯誤活動)作分析說明。

實驗內容

一、JDBC的配置與使用:

1.對程序Demo.java做適當修改,使之可以在本地系統上可以運行。然後編譯運行,查看運行結果。

運行結果如下所示

實驗內容:在dbcourse數據庫上使用JDBC調用實現下面的功能:

a)練習executeQuery:從authors表中選出每個學者的名字列(name),性別列(sex),年齡列(age),並在逐行打印出來,每列之間以空格分隔。

代碼:

long start = System.currentTimeMillis();

ResultSet rs = st.executeQuery(“select *from authors”);

while (rs.next()) {

System.out.println(rs.getString(1) + “” +

rs.getString(“name”)+””+rs.getString(“sex”)+””+rs.getString(“age”));

}

long end = System.currentTimeMillis();

System.out.println((end-start)/1000.0 +”s”);

rs.close();

結果如下

b)練習executeUpdate:將authors表中所有30-50歲的男性學者的年齡加1,並打印出受影響的行數。

代碼:

int rowCount = st.executeUpdate(“update authors set age=age+1 where sex=’男’and age>=30 and age<=50”);

System.out.println(rowCount + “行受影響”);

c)練習executeBatch:向authors表中使用executeBatch功能向authors表中插入如下兩個數據,並按照示例程序中所示打印兩個受影響行數:

數據庫實驗4:JDBC&ODBC

代碼:

st.addBatch(“insert into authors

values(‘1000000′,’張三test’,’男’,’30’)”);

st.addBatch(“insert into authors values(‘2000000′,’李四test’,’女’,’40’)”);

int[] rowCounts = st.executeBatch();

System.out.println(rowCounts[0] + “行受影響”);

System.out.println(rowCounts[1] + “行受影響”);

d)練習PreparedStatement:使用PreparedStatment方法向authors表中插入如下兩個數據,並按示例程序中所示打印受影響行數:

數據庫實驗4:JDBC&ODBC

代碼:

PreparedStatementps =conn.prepareStatement

(“insertinto authors values(?,?,?,?)”);//?傳遞參數

ps.setString(1,”3000000″);

ps.setString(2,”張三test2″);

ps.setString(3,”男”);

ps.setString(4,”30″);

introwCount = ps.executeUpdate();

System.out.println(rowCount+ “行受影響”);

ps.setString(1,”2000000″);

ps.setString(2,”李四test2″);

ps.setString(3,”女”);

ps.setString(4,”40″);

rowCount= ps.executeUpdate();

System.out.println(rowCount+ “行受影響”);

思考問題:

a)executeQuery,executeUpdate和executeBatch三種方法的區別,各有怎樣的當然適用環境。

b)Statement和PreparedStatement的區別。

二、ODBC的配置與使用:

1.啟動SQLSERVER服務。

2.在dbcourse庫中建立test表(id varchar(200),name varchar(200))。

createtable

test(idvarchar(200),namevarchar(200));

3.依照實驗要求操作建立系統DNS

4.打開vc6.0

點擊文件->新建->工程->Win32consoleapplication->一個空的工程。

5.在工程中添加源文件:文件->新建->文本文件,文件名寫demo.c,將demo.c代碼拷入,適當修改代碼使之能在本地系統上運行,根據代碼的註釋完成test表的插入、刪除、更新等操作。

對test表的插入SQL語句:

(1)直接執行:

插入一行:

aaa 100

UCHAR sql[37]=”insert into testvalues(‘aaa’,’100′)”;

SQLExecDirect (hstmt1,sql,37);

刪除該行:

UCHARsql[37]= “delete from test where id=’aaa’”;

SQLExecDirect (hstmt1,sql,37);

更改操作:

UCHARsql[37] = “update test set name=’300’ where id=’bbb’”;

SQLExecDirect (hstmt1,sql,37);

(id為bbb的name屬性都被改成了300)

(2)參數編譯執行

插入:

UCHAR pre_sql[37] = “insert into testvalues(‘ccc’,’666’)”;

p = SQL_NTS; //1預編譯

SQLPrepare(hstmt1,pre_sql,37);//第三個參數與數組大小相同,而不是數據庫列相同

SQLBindParameter(hstmt1,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,200,0,&a,0,&p);SQLBindParameter(hstmt1,2,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,200,0,&b,0,&p);//3執行

SQLExecute(hstmt1);

刪除:

UCHAR pre_sql[37] = “delete from test whereid=’ccc'”;

p = SQL_NTS; //1預編譯

SQLPrepare(hstmt1,pre_sql,37);//第三個參數與數組大小相同,而不是數據庫列相同

SQLBindParameter(hstmt1,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,200,0,&a,0,&p);SQLBindParameter(hstmt1,2,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,200,0,&b,0,&p);//3執行

SQLExecute(hstmt1);

更改;

UCHAR pre_sql[50] = “update test setname=’666’

where id=’bbb’”;

p = SQL_NTS;//1預編譯

SQLPrepare(hstmt1,pre_sql,50);//第三個參數與數組大小相同,而不是數據庫列相同

SQLBindParameter(hstmt1,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,200,0,&a,0,&p);SQLBindParameter(hstmt1,2,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,200,0,&b,0,&p);//3執行

SQLExecute(hstmt1);

執行結果如下:

(3)通過查閱資料比較直接執行方式和參數預編譯執行方式的不同

直接執行方式是直接對語句逐步分析解釋且立即執行

參數預編譯方式是將源程序分為編譯與運行兩個階段,即先對語句進行翻譯,然後再運行

三、分析JDBC編程的主要結構

1.加載驅動

2.建立連接

3.創建statement

4.執行SQL

5.關閉連接

四、分析ODBC編程的主要架構

1.分配環境句柄

2.分配連接句柄

3.建立數據源

4.分配語句句柄

5.執行SQL語句

6.結束應用程序

7.錯誤處理

五、比較並分析JDBC編程與ODBC編程的異同點

對於支持SQL語言的異構數據庫系統,JDBC和ODBC就提供了訪問其異構成員的統一的方式。

ODBC

ODBC(Open DataBase Connectivity)是微軟倡導的、當前被業界廣泛接受的、用於數據庫訪問的應用程序編程接口(API),它以X/Open和ISO/IEC的調用級接口(CLI)規範為基礎,並使用結構化查詢語言(SQL)作為其數據庫訪問語言。

它包括四個組件:

1,應用程序 執行並調用ODBC API函數,以提交SQL語句和檢索結果。

2,驅動程序管理器 根據應用程序的需要加載/卸載驅動程序,處理ODBC函數調用,並把它送入驅動程序。

3,驅動程序 處理ODBC函數調用,並把SQL請求提交給一個指定的數據源,並返回結果集給應用程序。

4,數據源 包括要訪問的數據及其相關的操作系統,DBMS及用於訪問DBMS的網絡平臺。

ODBC驅動程序把應用程序從具體的數據庫調用中隔離出來,驅動程序管理器針對特定數據庫的各個驅動程序進行集中管理,並嚮應用程序提供統一的標準接口。

其實這些東西說白了,就是開發了一箇中間件,將兩個耦合度高的東西松開了。其實以前要寫的訪問不同數據庫的東西現在都變成了不同的驅動程序而已。相當於把那些代碼提出來以便重用。

JDBC

JDBC(Java DataBase Connectivity)是Java與數據庫的接口規範,JDBC定義了一個支持標準SQL功能的通用低層的應用程序編程接口(API),它由Java語言編寫的類和接口組成,旨在讓各數據庫開發商為Java程序員提供標準的數據庫API。

它也包括四個組件,而且其原理與ODBC是一樣的。都是通過驅動程序管理器加載不同的驅動程序來訪問不同的數據庫系統。

不同之處在於:

ODBC是用C來寫的,而JDBC是用JAVA來寫的,這就造就了他們之間一個很大的不同。用JAVA寫的JDBC具有很強的移植性,而ODBC不具備這種特性。

引用:

JDBC除了具有ODBC的上述特點外,更具有對硬件平臺、操作系統異構性的支持。這主要是因為ODBC使用的是C語言,而JDBC使用的是Java語言。Java語言具有與平臺無關、移植性強、安全性高、穩定性好、分佈式、面向對象等眾多優點,而JDBC確保了“100%純Java”的解決方案,利用Java的平臺無關性,JDBC應用程序可以自然地實現跨平臺特性,因而更適合於Internet上異構環境的數據庫應用。

相同之處:

除了原理相同外,JDBC和ODBC還有其他相同之處,下面的JDBC同樣具有

ODBC是為最大的互用性而設計的,要求一個應用程序有用相同的源代碼(不用重新編譯或重新鏈接)訪問不同的數據庫管理系統(DBMS)的能力,這體現了ODBC的數據庫獨立性。

六、遇到的問題

1.在設置SQL ServerBrower時出現了“遠程過程調用失敗”的問題,詢問後發現是不兼容的問題,所以在刪除Microsoft SQLServer2012

express local DB後,就可以設置了。

2.在做ODBC配置與使用的實驗時,前幾次按照實驗指導書進行配置,最終代碼運行的結果都是“連接失敗”。最後發現應該把配置的“系統DSN”換成“用戶DSN”即可連接成功

相關文章

計算機網絡實驗12:FTP服務器部署

計算機網絡實驗8&9

Problem_1小雞啄米

數據庫實驗1初識DBMS,掌握DBMS常用工具