Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 21 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
21
Dung lượng
2,69 MB
Nội dung
Trang 143 Chng 7 LP TRÌNH C S D LIU I. Tng quan t ha hn ln ca java là kh nng xây dng các ng dng CSDL c lp vi h n, công ngh này c bit n vi cái tên JDBC (Java Database Connectivity), JDBC c thit k tng i n gin. Mô hình JDBC a ra mt tp các lp và các phng thc giao tip vi ngn d liu. JDBC API c tích hp vào ngay nn java nên bn không cn phi cài t gì thêm khi truy cp CSDL. II. Các ku trình u khin JDBC Các trình u khin JDBC có th phân thành 4 kiu sau ph thuc vào cách thc hot ng, cách kt ni vi CSDL. Kiu 1 : JDBC s dng cu ni ODBC (JDBC-ODBC Bridge ) ODBC là mt công ngh ca Microsoft dùng kt ni n các h c s d liu thông qua trình u khin Driver ca h c s d liu ó. Mi h c s d liu cung p mt trình u khin (Driver) có kh nng làm vic (c, cp nht, ) c c s liu ca chúng . Trình u khin này sc ng ký vi b qun lý ODBC . ODBC API là mt tp các hàm API truy cp vào CSDL thông qua các trình u khin, ngi lp trình s s dng các hàm API trong giao din này truy cp vào CSDL. u ni JDBC – ODBC là mt trình u khin s dng mã java gi li các hàm trong JDBC API. Bng cách này bn có th kt ni c vi nhiu h qun tr c s liu khác nhau. có th kt ni vào mt h CSDL c th nào ó (chng hn nh: Access, SQL Server, MySQL…) s dng cu ni JDBC-ODBC bn cn phi có: - Trình u khin (Driver) ca dùng truy cp vào h CSDL ó. Thông thng trình u khin này c cung cp bi chính các hãng sn xut h CSDL và nó thng c cài t vào trong máy khi bn cài t h qun tr CSDL. - Cu ni JDBC-ODBC, ây là trình u khin c cung cp min phí bi hãng Sun và nó c cài t tng khi bn cài t JDK. Trang 144 Vì rng trình u khin ODBC phi c cài t vào trong máy trc khi bn có th dng nên nó ch thích hp cho các ng dng máy n, hoc c chy trên máy ch trong mô hình nhiu tng (Multi - tier), không thích hp cho các ng dng chy trên máy khách nh: Aplet, Fat Client. Kiu 2 : JDBC kt ni trc tip vi các trình u khin c s d liu . Kiu kt ni này s dng mã java trc tip gi các hàm trong trình u khin c thù ca mi h c s d liu mà không phi qua trung gian ODBC . Do vy kiu kt i này nhanh và hiu qu hn cu ni JDBC – ODBC, nhng phi cótrình u khin c sc thù do nhà phát trin cung cp hoc ca mt hãng th ba nào ó. Java Application , Applet , Servlet JDBC Driver ODBC Database driver Database Mã JAVA Mã Native { { { Mô hình truy cp CSDL qua cu ni JDBC Trang 145 Kiu 3 : JDBC kt ni thông qua các ng dng mng trung gian i kiu kt ni này, máy ch s chu trách nhim kt ni vi c s d liu . Máy khách ch s dng nhng trình u khin gn nh (thin) có kh nng giao tip i ng dng trung gian thông qua mng truy vn d liu . Kiu 4 : JDBC kt ni thông qua các trình u khin hoàn toàn mã java Java Application , Applet , Servlet JDBC Driver Database driver Mã JAVA Mã Native { { Database Mô hình kt ni trc tip Java Application , Applet , Servlet JDBC Driver Java Middle Ware Java Native driver Database Mã JAVA Mã JAVA { { M¹ng Trang 146 Kiu này cho phép máy khách s dng trình u khin gn nh ni kt trc tip vào trình u khin c s d liu c thù trên máy ch xa thông qua mng Internet . III. Các lp trong JDBC API dùng truy cp CSDL JDBC API bao gm các lp và các giao din c cha trong hai gói: java.sql và javax.sql. Gói java.sql cha các giao din và gói cho phép ta thc hin các thao tác c bn i vi CSDL, gói javax.sql cha các lp và giao din giúp ta thc hin các tính nng cao p. 1. Mt s giao din và lp trong gói java.sql a) Mt s giao din Tên giao din Mô t ý ngha CallableStatement Giao din cha các phng thc cho phép ta làm vic vi th c lu tr ni DatabaseMetaData Cho phép ta xem các thông tin v CSDL PreparedStatement Giao din này cho phép ta thc thi các câu lnh SQL cha tham s ResultSetMetaData Connection Th hin mt kt ni n CSDL Driver Giao din mà mi trình u khin phi cài t ResultSet Th hin mt tp các bn ghi ly v t CSDL Statement Giao din cho phép ta thc hin các phát biu SQL Java Application , Applet , Servlet JDBC Driver Java Native driver CSDL Mã JAVA Mã JAVA { { Internet Trang 147 b) Mét s lp Tên lp Ý ngha Date p biu din kiu DATE DriverPropertyInfo Cha các thuc tính ca trình u khin ã np Timestamp Lp biu din cho SQL TimeTemp DriverManager Lp qun lý các trình u khên Time p biu din kiu DATE Types p nh ngha các hng tng ng vi các kiu d liu SQL, hay còn gi là kiu d liu JDBC 2. Mt s lp và giao din trong gói javax.sql Tham kho tài liu v JDBC IV. Kt ni CSDL vi JDBC có th làm vic vi CSDL, mt chng trình java (hay bt c chng trình vit ng ngôn ng nào khác) phi tuân theo các bc sau: kt ni n CSDL. Thc hin các lnh làm vic vi CSDL nh: truy vn, cp nht… óng kt ni, gii phóng tài nguyên. Các bc xây dng mt ng dng CSDL vi JDBC: 1. Chun b a) Cài t JDBC và trình u khin: Mt ng java ch có th kt ni và làm vic c vi d liu trong CSDL thông qua các trình u khin và các th vin JDBC API. Trc khi truy cp vào h CSDL nào bn phi có trong tay trình u khin tng ng vi h CSDL ó. Bn có th download các trình u khin cho mt s h CSDL quen thuc ta ch java.sun.com/jdbc b) Cài t CSDL Bn cn la chn và cài t mt h qun tr CSDL, qun tr phn d liu ca chng trình. ây là la chn ca bn tu theo tính cht ca d liu trong chng trình ng nh mc tin bn có có th mua c h qun tró. Sau khi bn la chn c h qun tr CSDL phù hp bn tin hành cài t CSDL: o bng, view, th tc lu tr Chú ý: có th truy cp vào CSDL ca h qun tr CSDL nào thì bn phi có trong tay trình u khên tng ng. 2. Thit lp kt ni ây là bc quan trng nht bao gm hai bc: Trang 148 a) Np trình u khin JDBC s dng mt b trình qun lý u kin (DiverManager), mi trình u khin (Driver) cho phép ta làm vic vi mt CSDL c th, cho nên nu bn có 3 CSDL do 3 nhà cung cp khác nhau cung cp thì bn cn phi có 3 trình u khin khác nhau. np và ng ký trình u khin bn s dng lnh Class.forName(URL) Trong ó URL là mt chui mô t các thông tin v tên ca trình u khin dùng kt i vi c s d liu, chng hn lnh Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); dùng np trình u khin JDBC-ODBC Chú ý: Vi mi trình u khin khác nhau thì URL ca phng thc Class.forName() khác nhau. Nên có th np úng trình u khin bn nên thao kho tài liu i kèm a các trình u khin, bit c URL tng ng. b) To mt kt ni c tip theo bn to mt kt ni n CSDL thông qua trình u khin mà bn a np bc trên. n mã dùng to mt kt ni thông thng nh sau: Connection con = DriverManager.getConnection(url, "myLogin", "myPassword"); Trong ó : - url là chui cha thông tin kt ni n CSDL, nu bn s dng cu ni JDBC-ODBC thì url là “jdbc:odbc:DataSourceName”, chng hn tôi ã to mt DNS tên là TestDB vi tên truy cp là theht, mt khu truy cp là theht thì câu lnh kt ni n CSDL là Connection con = DriverManager. getConnection(“jdbc:odbc:TestDB”,"theht", "theht"); - myLogin là tên truy cp, nu mt không có mt khu bn có th truyn cho nó mt xâu ng - myPassword là mt khu truy cp, nu mt không có mt khu bn có th truyn cho nó t xâu rng Chú ý: Thông thng chui URL có nh dng nh sau: jdbc:subprotocol:subname Trong ó: subprotocol là giao thc con tng ng vi loi CSDL subname là tên ca ngun d liu (Thông thng nó là tên ca CSDL) t vài ví du: Ví d 1: Np trình u khên và kt ni n CSDL ca MySQL Trang 149 Trình u khên tury cp vào CSDL ca MySQL, bn có th download ti a ch MySQL.com, sau khi download bn có mt tp tin duy nht ã c nén theo chun jar, t classpath trn tp tin này - Np tình u khin ca MySQL Class.forName("com.mysql.jdbc.Driver"); - Kt ni n CSDL Connection conn = DriverManager.getConnection( "jdbc:mysql://ServrName/DBName?user=UserName&password=Pass"); - ServerName: là tên ca máy ch CSDL - DBName: là tên ca CSDL - UserName: là tên truy cp CSDL - Pass: là mt khu truy cp Ví d 2: Np trình u khên và kt ni n CSDL ca SQL Server 7.0, 2000 Có rt nhiu trình u khin cho MS SQL Server, a phn các trình u khin u là các n phm thng mi, có mt trình u khin mà ta nên s dng ó là trình u khin do chính hãng Microsoft cung cp, trình u khin này hoàn toàn Free và h try các tính nng ca Sql Server. - a ch download www.microsoft.com - Sau khi download và tin hành cài t bn s có 3 tp tin trong th mc cài t: install_dir/lib/msbase.jar install_dir/lib/msutil.jar install_dir/lib/mssqlserver.jar install_dir: là th mc cài t - t classpath trn 3 tp tin trên - Np trình u khin Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); - Kt ni n CSDL Connection conn = DriverManager.getConnection( " jdbc:microsoft:sqlserver://ServerName:ServerPort;DatabaseName=DBName", "UserName","Password"); hoc Connection conn = DriverManager.getConnection "jdbc:microsoft:sqlserver://ServerName:ServerPort;User=UserName;Password=Pass word;DatabaseName=DBName"); Trang 150 + ServerName: Là tên ca máy ch SQL + ServerPort: hiu cng ca SQL, nu trong quá trình cài t mà bn không t i thì giá tr này là 1433 + UserName: Tài khon ng nhp vào SQL + Password: t khu tng ng vi tài khon ng nhp - Chuyn CSDL làm vic conn.setCatalog("DBName"); +DBName: là tên CSDL Ví d hoàn chnh import java.sql.*; class Test{ public static void main(String[] args) { try { Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); Connection conn = DriverManager.getConnection( "jdbc:microsoft:sqlserver://theht:1433;DatabaseName=AA;user=sa;password="); Statement st=conn.createStatement(); ResultSet rs=st.executeQuery("Select * from t"); while(rs.next()) System.out.println(rs.getString("a")+ rs.getString("b")); } catch (SQLException ex) {} } catch (ClassNotFoundException ex) { } } Ví d 3: Np trình u khên và kt ni n CSDL ca Access vi cu ni JDBC-ODBC a Sun System truy cp vào CSDL ca Access ta không cn phi ti xung và cài t vào máy driver nào c vì nó c tích hp vào Java, trình u khin này do sun cung cp nó có tên là cu i JDBC-ODBC - Np trình u khin Class.forName("sun.jdbc.odbc. JdbcOdbcDriver "); - M kt ni bng cách s dng DataSource Name + Vào control panel chy chng trình ODBC DataSource 32 bit + To mt DataSource Name có tên là MyDB Connection conn = DriverManager.getConnection(" jdbc:odbc:MyDB"); - M kt ni bng cách s dng File DataSource Connection conn = DriverManager.getConnection(“jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=C:/Path/DatabaseName.mdb";”) MyDB: tên ca DataSource Name mà bn ã to Path: ng dn n CSDL Trang 151 DatabaseName: tên CSDL Ví d hoàn chnh import java.sql.*; import java.util.*; class Test { public static void main(String a[]) { try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Properties props = new Properties(); //Charset làm vic vi Unicode props.put("charSet", "UTF8"); props.put("user", "guest"); props.put("password", "guest"); String url = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=C:/MyDB.mdb"; Connection con = DriverManager.getConnection(url, props); Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); //To bng stmt.executeUpdate("Create Table tbl(a text(50), b text(50))"); //Chèn 1 bn ghi vào CSDL stmt.execute("Insert Into tbl values('Xin chào','Toi là Access')"); ResultSet rs = stmt.executeQuery("Select * from tbl"); if (rs.next()) { System.out.println(rs.getString("a") + "\t" + rs.getString("b")); } } catch (Exception ex) { ex.printStackTrace(); } } } Ví d 4: p trình u khên và kt ni n CSDL ca Oracle 8i, 9i Trình u khên tury cp vào CSDL ca Oracle, bn có th tìm thy nó trong th mc %ORACLE_HOME%/JDBC/lib Class.forName("oracle.jdbc.OracleDriver "); // Ly v kt ni n CSDL Connection conn = DriverManager.getConnection("jdbc:oracle:oci8:@theht", "theht","abc"); - @theht là tên ca máy ch CSDL - theht là tên truy cp CSDL - abc là mt khu truy cp Trang 152 V. Tng tác vi CSDL Tt c các lnh mà ta dùng tác ng lên CSDL u có th thc hin thông qua t trong ba i tng sau: i tng Mô t Satement Dùng thc thi các lnh SQL không có tham s PreparedStatement Dùng thc thi các lnh SQL có cha tham s CallableStatement Dùng làm vic vi th tc lu tr ni 1. To ra mt JDBC Statements t i tng Statements s giúp bn gi mt lnh SQL n h qun tr CSDL, sau khi to i tng Statements bn có th thc hin các lnh SQL nh SELECT ly d liu hay UPDATE cp nht d liu, to i tng Statements bn s ng phng thc createStatement ca i tng connection mà bn va to ra trong bc II. Statement stmt = con.createStatement(); i thi m này bn cha có phát biu SQL nào truyn n CSDL, bây gi chúng ta s s dng phng thc execute ca i tng này thc thi mt lnh SQL, chng hn nhn lnh sau s dng phng thc executeUpdate thc thi t câu lnh truy vn cp nht stmt.executeUpdate("CREATE TABLE COFFEES"+"(COF_NAME VARCHAR(32), SUP_ID INTEGER, PRICE FLOAT, " + "SALES INTEGER, TOTAL INTEGER)"); Trong java 2 bn có th to ra các tp kt qu có th cp nht và có th cun con tr theo c hai chiu, to ra tp kt qu có th cp nht c và cho phép cun c hai chiu n s dng mu sau: Statement stmt = con.createStatement(ResultSetType, ConcurencyType); Trong ó : Tham s ResultSetType cho bit tp kt qu (ResultSet) nhn c khi thc thi câu lnh executeQuery() có cun c hay không. Tham s ConcurencyType tính cht ca tp kt qu (ResultSet) nhn c khi thc thi câu lnh executeQuery() có cho phép cp nht hay không. Thc ra vic có cp nht c hay không còn ph thuc vào trình u khên và h qun tr có h tr cp nht hay không. Sau ây là bng các giá tr mà tham s ResultSetType có th nhn [...]... tensv=\”Nguy n V n B\” WHERE masv=01”); p nh t l i d li u c p nh t l i d li u b n s d ng m nh qua ph UPDATE SQL, th c thi chúng thông ng th c executeUpdate Ví d 4: b n mu n c ng thêm ph c p cho t t c các ng i cótrình i h c lên 10 ng n làm stmt.executeUpdate( "UPDATE COFFEES " + "SET CP=PC+10 WHERE td=’dh’”); Thêm b n ghi vào b ng CSDL chèn d li u vào b ng b n s d ng ph ng th c executeUpdate c a i t ng Statement,... Sau khi ch c ch n r ng các giá tr thêm vào là úng Ta g i ph xác nh n vi c thêm m i b n ghi vào b ng và ResultSet Ví d : Thêm b n ghi vào ResultSet Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); // N p trình ng th c insertRow() u kh ên Connection cn=DriverManager.getConnection("jdbc:odbc:t"); // L y v k t n i Statement st=cn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);... s d ng các l nh SQL-DML, b n có th th c hi n vi c này b ng các ph ng th c c a i t ng ResultSet Các b c xoá m t b n ghi kh i ResultSet Trang 158 Di chuy n con tr i ph ng th c deleteRow(); Chú ý: Tu vào trình xoá n b n ghi c n xoá u kh ên mà vi c xoá c th c hi n ngay hay ch là ánh d u bi t ch c ch n b n nên tham kh o tài li u i kèm v i Driver b n s d ng Ví d : Xoá b n ghi rs.first(); rs.deleteRow(); rs.absolute(3); . trình u khên tng ng. 2. Thit lp kt ni ây là bc quan trng nht bao gm hai bc: Trang 148 a) Np trình u khin JDBC s dng mt b trình. cp Ví d 2: Np trình u khên và kt ni n CSDL ca SQL Server 7.0, 2000 Có rt nhiu trình u khin cho MS SQL Server, a phn các trình u khin