chapter14JDBC_第1頁
chapter14JDBC_第2頁
chapter14JDBC_第3頁
chapter14JDBC_第4頁
chapter14JDBC_第5頁
已閱讀5頁,還剩48頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、Java語言程序設計第14章JDBC連接數據庫查詢操作更新、添加與刪除操作使用預處理語句數據庫訪問技術簡介p當今企業級應用程序大部分采用了客戶機當今企業級應用程序大部分采用了客戶機/ /服務服務器(器(C/SC/S)模式;)模式;p客戶端機器需要與服務器進行通訊,要操作數據客戶端機器需要與服務器進行通訊,要操作數據庫中的數據,執行庫中的數據,執行SQLSQL(S Structured tructured Q Query uery L Languageanguage結構化查詢語言)語句以及檢索查詢結結構化查詢語言)語句以及檢索查詢結果;果;p在在JavaJava中實現這些活動的技術稱作中實現這些

2、活動的技術稱作JDBCJDBC。ODBCpODBCODBC(O Open pen D DataataB Base ase C Connectivityonnectivity)指開放式)指開放式數據庫連接,是由數據庫連接,是由MicrosoftMicrosoft公司提供的應用程公司提供的應用程序接口;序接口;p它負責連接各種不同產商和類型的它負責連接各種不同產商和類型的DBMSDBMS,然后為,然后為各種不同的編程語言提供查詢、插入、修改和刪各種不同的編程語言提供查詢、插入、修改和刪除數據的功能;除數據的功能;p如同在各種不同的如同在各種不同的DBMSDBMS和各種不同的編程語言之和各種不同的編

3、程語言之間架設了一座通用的橋梁。間架設了一座通用的橋梁。pJDBC APIn提供者:提供者:Sun公司公司n內容:供程序員調用的接口與類,集成內容:供程序員調用的接口與類,集成在在java.sql和和javax.sql包中,如:包中,如:pDriverManager類pConnection接口pStatement接口pResultSet接口pDriverManagern提供者:提供者:Sun公司公司n作用:管理各種不同的作用:管理各種不同的JDBC驅動驅動pJDBC 驅動驅動n提供者:數據庫廠商提供者:數據庫廠商n作用:負責連接各種不同的數據庫作用:負責連接各種不同的數據庫JDBC API J

4、DBC Driver Manager JDBC 驅動驅動 JDBC 驅動驅動 Java 應用程序應用程序 14.2 JDBCpJDBC API可做三件事:可做三件事:與數據庫建立連接、執行與數據庫建立連接、執行SQL 語句、處理結果語句、處理結果nDriverManager :依據數據庫的不同,管理:依據數據庫的不同,管理JDBC驅動驅動nConnection :負責連接數據庫并擔任傳送數據的任務:負責連接數據庫并擔任傳送數據的任務 nStatement :由:由 Connection 產生、負責執行產生、負責執行SQL語句語句nResultSet:負責保存:負責保存Statement執行后所

5、產生的查詢結果執行后所產生的查詢結果ConnectionDriverManagerStatementResultSet客戶端客戶端數據庫服務器數據庫服務器1234JDBC APIjava.sql包中的一些接口java.sql包中的一些類JDBC驅動程序類型p使用使用JDBCJDBC連接數據庫可以通過不同的驅動方式來連接數據庫可以通過不同的驅動方式來實現,有實現,有4 4種驅動類型:種驅動類型:nJDBC-ODBC橋驅動橋驅動n本地本地API部分部分Java驅動驅動nJDBC網絡純網絡純Java驅動驅動n純純Java驅動驅動p不論采用哪種驅動方式,在程序中對數據庫的操不論采用哪種驅動方式,在程序

6、中對數據庫的操作方式基本相同,只是加載不同的驅動程序即可。作方式基本相同,只是加載不同的驅動程序即可。14.3 連接數據庫 n在個人開發與測試中,可以使用在個人開發與測試中,可以使用JDBC-ODBC橋連方式橋連方式n在生產型開發中,推薦使用純在生產型開發中,推薦使用純Java驅動方式驅動方式 使用使用JDBCODBC橋接器連接數據庫的橋接器連接數據庫的3個步驟個步驟建立JDBC-ODBC橋接器建ODBC數據源和ODBC數據源建立連接優點:可以訪問所有優點:可以訪問所有ODBC可以訪問的數據庫可以訪問的數據庫缺點:執行效率低、功能不夠強大缺點:執行效率低、功能不夠強大連接數據庫的步驟(圖示)D

7、riverManagerJDBC DriverResultSetConnectionStatementDatabase1. 注冊JDBC驅動2.創建連接 3. 構建sql語句5. 處理結果4. 執行sql語句6. 釋放資源p使用使用JDBC-ODBC進行橋連進行橋連n配置數據源:配置數據源:控制面板控制面板ODBC數據源數據源系系統統DSNn編程編程Connection conn = null;try Class.forName(sun.jdbc.odbc.JdbcOdbcDriver); catch (ClassNotFoundException e) logger.error(e);try

8、 conn = DriverManager.getConnection(jdbc:odbc:ConnSQLServer,jbit, bdqn);System.out.println(建立連接成功!建立連接成功!); catch (SQLException e) logger.error(e); finally try conn.close(); catch (SQLException e) logger.error(e);關閉連接關閉連接建立連接建立連接加載驅動加載驅動必須進行相關異常處理必須進行相關異常處理 p使用純使用純Java方式連接數據庫方式連接數據庫 n由由JDBC驅動直接訪問數據庫

9、驅動直接訪問數據庫n優點:優點:100% Java,快又可跨平臺,快又可跨平臺n缺點:訪問不同的數據庫需要下載專用的缺點:訪問不同的數據庫需要下載專用的JDBC驅動驅動JDBC 驅動驅動 Java 應用程序應用程序 JDBC API JDBC驅動 Connection conn = null;try Class.forName(com.microsoft.sqlserver.jdbc.SQLServerDriver); catch (ClassNotFoundException e) logger.error(e);try conn = DriverManager.getConnection(

10、jdbc:sqlserver:/localhost:1433;DatabaseName=epet, jbit, bdqn);System.out.println(建立連接成功!建立連接成功!); catch (SQLException e) logger.error(e); finally try conn.close(); catch (SQLException e) logger.error(e);關閉連接關閉連接建立連接建立連接加載驅動加載驅動必須進行相關異常處理必須進行相關異常處理 下載下載JDBC驅動驅動MySQL Connector/Jp可以在可以在MySQL的官方網站下載的官方網

11、站下載JDBC驅動,當前驅動,當前最新的最新的JDBC驅動程序是驅動程序是MySQL Connector/J 5.1。MySQL Connector/J 5.1的下載網址為的下載網址為http:/ and Binaries (tar.gz)和和Source and Binaries (zip)兩個下載選項。前者主要兩個下載選項。前者主要用于用于Linux操作系統,后者主要用于操作系統,后者主要用于Windows操作操作系統。下載后的文件分別是系統。下載后的文件分別是mysql-connector-java-5.1.10.tar.gz和和mysql-connector-java-5.1.10.z

12、ip。這。這里面都包含驅動的源代碼和二進制包。源代碼可里面都包含驅動的源代碼和二進制包。源代碼可以自行進行編譯。二進制包是編譯好的驅動,名以自行進行編譯。二進制包是編譯好的驅動,名稱為稱為mysql-connector-java-5.1.10-bin.jar。一、MySQL數據庫 (一)(一)MySQLMySQL 概述概述 MySQLMySQL數據庫是一種安裝簡單、操作方便的開源數據庫。將數據庫是一種安裝簡單、操作方便的開源數據庫。將MySQLMySQL數據庫和數據庫和JavaJava編寫的程序結合起來,可以在任意的平臺上執行數據編寫的程序結合起來,可以在任意的平臺上執行數據庫操作。在庫操作。

13、在JavaJava中訪問數據庫,可以利用中訪問數據庫,可以利用JDBCJDBC來完成。來完成。JDBCJDBC是使用是使用JavaJava存取數據庫系統的解決方案,它將不同數據庫間各種差異存取數據庫系統的解決方案,它將不同數據庫間各種差異APIAPI與標準與標準SQLSQL語句分開對待,實現數據庫無關的語句分開對待,實現數據庫無關的JavaJava操作接口。開發人員使用操作接口。開發人員使用JDBCJDBC統統一的一的APIAPI接口,并專注于標準接口,并專注于標準SQLSQL語句,就可以避免直接處理底層數據庫語句,就可以避免直接處理底層數據庫驅動程序于相關操作接口的差異性。驅動程序于相關操作

14、接口的差異性。(二)安裝MySQL 5.1數據庫l下載mysql-essential-5.1.22-win32.msi版本;l下載jdbc:mysql-connector-java-5.1.5-bin.jar;(三)配置(三)配置MySQL 5.0數據庫數據庫 一般情況當一般情況當MySQLMySQL安裝幫助向導退出時,就會從安裝幫助向導退出時,就會從MySQLMySQL安裝幫助向安裝幫助向導中直接啟動導中直接啟動MySQL Configuration WizardMySQL Configuration Wizard(配置向導)。還可以單擊(配置向導)。還可以單擊WindowsWindows啟

15、動菜單中啟動菜單中MySQLMySQL服務器實例配置向導條目中的服務器實例配置向導條目中的MySQLMySQL部分來啟部分來啟動動MySQL Configuration WizardMySQL Configuration Wizard(配置向導)。并且,還可以進入(配置向導)。并且,還可以進入MySQMySQL L安裝安裝binbin目錄直接啟動目錄直接啟動MySQLInstanceConfig.exeMySQLInstanceConfig.exe文件。文件。注意:注意:若數據庫配置不成功,在重新配置的時候最好徹底刪除原來的配置,否則若數據庫配置不成功,在重新配置的時候最好徹底刪除原來的配置,

16、否則老出錯。在重新配置里的第二個對話框中選第二項,老出錯。在重新配置里的第二個對話框中選第二項,remove instance remove instance (四)數據庫及數據表操作(四)數據庫及數據表操作 MySQLMySQL數據庫配置完成之后,就可以在數據庫配置完成之后,就可以在MySQLMySQL中創建屬于自己的數中創建屬于自己的數據庫了。據庫了。MySQLMySQL的操作是通過的操作是通過sqlsql命令進行的,本節將會簡單介紹常用的命令進行的,本節將會簡單介紹常用的數據庫和數據表操作。數據庫和數據表操作。 1.Doc 1.Doc命令進入命令進入mysqlmysql環境環境 (1 1

17、)首先打開)首先打開DOSDOS窗口,然后進入目錄窗口,然后進入目錄mysqlbinmysqlbin,(把該目錄放入環境變量的,(把該目錄放入環境變量的pathpath路路徑中,使用更方便)徑中,使用更方便) (2 2)格式:)格式: mysql -hmysql -h主機地址主機地址 -u-u用戶名用戶名 p p用戶密碼用戶密碼 mysql -h -u root -p 123;mysql -h -u root -p 123; (注(注:u:u與與rootroot之間可以不用加空格,其它也一樣,最好不加空格)之間可以不用加空格,其它也一樣,最好不加空格); ;

18、 (3 3)退出)退出MYSQLMYSQL命令:命令: exit exit (回車)(回車) 2.windows2.windows程序進入程序進入mysqlmysql環境環境 (1 1)開始)開始 程序程序 MySQL MySQL Server5.1MySQL Command Line Client MySQL MySQL Server5.1MySQL Command Line Client命命令;令; (2 2)輸入密碼;)輸入密碼; 3. MySQL 3. MySQL環境中的命令,后面都帶一個分號作為命令結束符環境中的命令,后面都帶一個分號作為命令結束符 ; ;(1 1)創建數據庫)創建數

19、據庫 mysql CREATE DATABASE mysql CREATE DATABASE 庫名庫名; ;create database student;create database student;(2 2)顯示當前數據庫服務器中的數據庫列表)顯示當前數據庫服務器中的數據庫列表; ;mysql SHOW DATABASES;mysql SHOW DATABASES;show databases;show databases;(3 3)刪除數據庫:)刪除數據庫:mysql DROP DATABASE mysql DROP DATABASE 庫名庫名; ;drop database if e

20、xists school; /drop database if exists school; /如果存在如果存在SCHOOLSCHOOL則刪除;則刪除;(4 4)建立數據表:)建立數據表:mysql USE mysql USE 庫名庫名; ;mysql CREATE TABLE mysql CREATE TABLE 表名表名 ( (字段名字段名 VARCHAR(20), VARCHAR(20), 字段名字段名 CHAR(1);CHAR(1);(5 5)查看數據表)查看數據表 mysql show tables; mysql show tables;(6)顯示數據表的結構:)顯示數據表的結構:m

21、ysql DESCRIBE 表名表名;(7)刪除數據表:)刪除數據表:mysql DROP TABLE 表名;表名;(8)將表中記錄清空:)將表中記錄清空:mysql DELETE FROM 表名表名;(9)顯示表中的記錄:)顯示表中的記錄:mysql SELECT * FROM 表名表名;(10)往表中插入記錄:)往表中插入記錄:mysql INSERT INTO 表名表名(字段字段1,字段字段2,.) VALUES (“hyq”,“M”);(11)更新表中數據:)更新表中數據:mysql- UPDATE 表名表名 SET 字段名字段名1=a,字段名字段名2=b WHERE 字段名字段名3=

22、c(12)用文本方式將數據裝入數據表中:)用文本方式將數據裝入數據表中:mysql LOAD DATA LOCAL INFILE “D:/mysql.txt” INTO TABLE 表表名名;(13)導入)導入.sql文件命令:文件命令:mysql USE 數據庫名數據庫名;mysql SOURCE d:/mysql.sql; 1、create database test;2、use test;3、create table telephone (name varchar(30),age int, phone varchar(15);4、 insert into telephone (name,

23、age,phone) values (fanfuyou, 32, 3545070); insert into telephone (name,age,phone) values (lixiaoping, 32,; insert into telephone (name,age,phone) values (dinjinyuan, 28, 02884078888);通過MySQL前端工具訪問MySQL數據庫MySQL-Front_Setup.exe一、連接MySQL數據庫/ ConnectMysql.javaimport java.util.*;import java.

24、sql.*;public class ConnectMysql private static Connection conn = null; private static String username = root; /數據庫用戶名 private static String password = ; /密碼 private static String server = localhost:3306; private static String dbname = test; /數據庫名 public static void main(String args) try /注冊JDBC連接驅動

25、Class.forName(org.gjt.mm.mysql.Driver); catch(Exception e) System.out.println(e.toString(); System.out.println(無法加載數據庫驅動); try conn = DriverManager.getConnection(jdbc:mysql:/ +server+/+dbname,username,password); catch(Exception e) System.out.println(e.toString(); 二、讀取MySQL數據庫中的數據/ReadData.javaimport

26、 java.util.*;import java.sql.*;public class ReadData /此處定義連接數據的一些變量,同ConnectMysql.java public static void main(String args) Statement stmt; String query; ResultSet result; /此處為連接數據庫的代碼塊,同 ConnectMysql.java try stmt = conn.createStatement(); query = SELECT name, age, phone FROM telephone; result = st

27、mt.executeQuery(query); System.out.println(namettagetphone); System.out.println(-); while(result.next() String name = result.getString(1); int age = result.getInt(2); String phone = result.getString(3); System.out.println(name + t + age + t + phone); catch(SQLException e) System.out.println(e.toStri

28、ng(); System.out.println(讀取數據庫出錯); System.out.println(-); System.out.println(Test Ok); 三、向數據庫中插入數據/InsertData.javaimport java.util.*;import java.sql.*;public class InsertData /此處定義連接數據的一些變量,同ConnectMysql.java public static void main(String args) Statement stmt; String insert; /此處為連接數據庫的代碼塊, 同Connect

29、Mysql.java try stmt = conn.createStatement(); insert = INSERT INTO telephone (name, age, phone) values (xiaoping, 33, 3540890); stmt.executeUpdate(insert); System.out.println(insert); System.out.println(Insert data Ok); catch(SQLException e) System.out.println(e.toString(); System.out.println(插入數據出錯

30、); 四、從數據庫中刪除數據import java.util.*;import java.sql.*;public class InsertData /此處定義連接數據的一些變量,同ConnectMysql.java public static void main(String args) PreparedStatement prestmt; int i; /此處為連接數據庫的代碼塊, 同ConnectMysql.java try prestmt = conn.prepareStatement(DELETE FROM telephone WHERE age = ?); System.out.p

31、rint(How old man information will be deleted, age=); i = Integer.parseInt(new BufferedReader(new InputStreamReader(System.in).readLine(); System.out.println(i); prestmt.setInt(1, i); prestmt.executeUpdate(); catch(Exception e) System.out.println(e.toString(); 預編譯語句v特點:1.在創建PreparedStatement時指明SQL語句,

32、立即送給DBMS編譯,在執行時不再編譯,速度快2.可以帶有參數,一次編譯,多次執行,效率高v預編譯語句的創建用Connection接口的prepareStatement( )方法創建例:preparedStatement stuInfo = con.prepareStatement( select * from student where num=?);v預編譯語句參數值的設定例:stuInfo.setString(1, 200101);/例 預編譯語句使用示例import java.sql.*;public class PreparedTest public static void main

33、(String args) String url = jdbc:odbc:stu; Connection con; Statement stmt; String name; int sale; try Class.forName(sun.jdbc.odbc.JdbcOdbcDriver); catch(java.lang.ClassNotFoundException e) System.err.print(ClassNotFoundException: ); System.err.println(e.getMessage(); try con = DriverManager.getConnec

34、tion(url, java, java); stmt = con.createStatement(); showValues(stmt,The original values:); PreparedStatement updateSales; String updateString = update COFFEES + set SALES = ? where COF_NAME= ? ; updateSales = con.prepareStatement(updateString); int salesForWeek = 150, 140, 50, 145, 85; String coffe

35、es = Colombian, French_Roast, Espresso,Colombian_Decaf, French_Roast_Decaf; int len = coffees.length; for(int i = 0; i len; i+) updateSales.setInt(1, salesForWeeki); updateSales.setString(2, coffeesi); updateSales.executeUpdate(); System.out.println(); showValues(stmt,The new values :); catch(SQLExc

36、eption ex) System.err.println(SQLException: + ex.getMessage(); public static void showValues(Statement stmt,String s) throws SQLException String name; int sale; ResultSet rs = stmt.executeQuery(SELECT COF_NAME,SALES + FROM COFFEES ); System.out.println(s); while(rs.next() name = rs.getString(1); sal

37、e = rs.getInt(2); System.out.println( COFF_NAME = +name+ ; + SALE = +sale); 步驟與方法第一步:注冊驅動的方法(以第一步:注冊驅動的方法(以sql server為例)為例)p方法一方法一 sqlserver2000: DriverManager.registerDriver(new com.microsoft.jdbc.sqlserver.SQLServerDriver(); sqlserver2005: DriverManager.registerDriver(new com.microsoft.sqlserver.j

38、dbc.SQLServerDriver();p方法二方法二:pSQLServer2000: System.setProperty(jdbc.drivers, com.microsoft.jdbc.sqlserver.SqlServerDriver);SQLServer2005:System.setProperty(jdbc.drivers, com.microsoft.sqlserver.jdbc.SQLServerDriver);p方法三:方法三: (推薦使用推薦使用)MysqlClass.forName(com.mysql.jdbc.Driver);OracleClass.forName(

39、oracle.jdbc.driver.OracleDriver);SQLServer2000:Class.forName(com.microsoft.jdbc.sqlserver.SqlServerDriver);SQLServer2005:Class.forName(com.microsoft.sqlserver.jdbc.SQLServerDriver);步驟二:建立連接建立連接建立連接Connection conn=DriverManager.getConnection(“url”,“user”,“password);例:例:pSQlServer2000:Connection conn=DriverManager.getConnection(“jdbc:microsoft:sqlserver:/localh

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論