Lap Trinh java bai giang chuong 6

25 420 0
Lap Trinh java  bai giang chuong 6

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Lập trình cơ bản với Java Tác giả: PGS.TS Trần Văn Lăng, Ths. Chu Nguyên Hoàng Minh Giúp các bạn tiếp cần gần hơn với bộ môn lập trình để trở thành một Lập trình viên suất sắc Lập trình cơ bản với Java Tác giả: PGS.TS Trần Văn Lăng, Ths. Chu Nguyên Hoàng Minh Giúp các bạn tiếp cần gần hơn với bộ môn lập trình để trở thành một Lập trình viên suất sắc

Môn học: Lập trình với Java Chương VI: Kết nối với sở liệu Th Mục đính – Yêu cầu: Sau học xong sinh viên nắm được:  n  n  C n C C hư C nh ợ nC Số tiết lên lớp: Bảng phân chia thời lượng: Stt 01 02 03 Nội dung n n C n C C C hư n h ợ nC Số tiết 3 Trọng tâm giảng:  n  n  C hư n JDBC C C nh ợ nC 242 6.1 iới hiệ n hương ình m y ính h n đ u nhiều Hầu h hông n ong n qu n đ n vi c truy xuất sở li u Chính th nên thao tác h trợ lập ình sở li u không hể thi u c a ngôn ngữ lập trình hi n đạ , ong ó C API hư cập đ n h n chứa l p giao di n h trợ lập trình viên Java k t n i truy sở li u Phiên b n JDBC API m i hi n 3.0, thành phần J2SE, nằm ong gó hư n:  java.sql: chứa l p g o d n sở c a JDBC API  javax.sql: chứa l p giao di n mở rộng JDBC API cung cấp h cho phép mộ độc lập v i h sở li u, có kh uy ập đ n h mà không cần vi t lạ vấn Q 6.2 hương ình t Java có kh sở li u khác C đơn g n hóa vi c tạo thi hành câu truy ong hương ình iến c n Ki n trúc c a c ki n hương ình hông qu đ n qu n 2] trang 629) C ương ự k n trúc ODBC Microsoft xây dựng Theo h o n qu n đ n sở li u ong hương ình thực hi n C API u C API truyền yêu cầu c hương trình ình đ ều khiển JDBC, phận có nhi m vụ lựa chọn ình đ ều khiển thích hợp để làm vi c v sở li u cụ thể mà hương ình mu n k t n i Như ậy ki n trúc c a JDBC gồm tầng: tầng JDBC API, có nhi m vụ chuyển câu l nh SQL cho qu n JDBC Driver API, thực hi n nhi m vụ li n h v li u cụ thể 243 ình đ ều khiển JDBC; tầng thứ ình đ ều khiển c a h qu n trỉ sở Hình n dư i minh họa l p giao di n 244 n JDBC API 6.3 Các khái niệm ([1] trang 282, [2] trang 632) 6.3.1 JDBC Driver Để ti n hành truy cập đ n h qu n trị sở li u s dụng kỹ thuật JDBC, cần ph ò ình đ ều khiển JDBC c a h qu n trị CSDL mà đ ng s dụng T ình đ ều khiển C đoạn hương ình, hính nhà ây dựng h qu n trị CSDL nhà cung ứng thứ ba cung cấp, có kh y u ầu h qu n trị CSDL cụ thể thực hi n câu l nh SQL nh s h Sun cung ình đ ều khiển JDBC cho h qu n trị CSDL nh u cấp cập nhật liên tục tạ địa chỉ: http://industry.java.sun.com/products/jdbc/drivers C ình đ ều khiển C phân làm 04 loại khác nhau:  Loại 1: có tên gọ CSDL thông qua cầu n dge O e T ình đ ều khiển loại k t n i v i h C Đây hính ình đ ều khiển s dụng phổ bi n ngày đầu Java xuất hi n Tuy nh n, ngày n y ình đ ều khiển loại không phổ bi n có nhiều hạn ch T ình đ ều khiển loại uôn cung cấp kèm J2SE v i tên: sun.jdbc.odbc.JdbcOdbcDriver  Loại 2: Có tên gọ N lời gọi c e API C API s ng hư e T ình đ ều khiển loại chuyển n hàm (API) ương ứng v i h CSDL cụ thể T ình đ ều n loạ hường nhà xây dựng h CSDL cung cấp Đểcó thề h hành hương ình mã ph cung cấp đ kèm nh để làm vi c v i h CSDL cụ thể cần hương ình 245  Loại 3: có tên gọi JDBC-Ne e T ình đ ều khiển loại sẽchuyển lời gọi JDBC API sang dạng chuẩn độc lập v i h C , s u chuyển sang lời gọi c a h CSDL cụ thể bỡ hương ình ung g n T ình đ ều khiển c a nhà cung ứng thứ hường thuộc loại Lợi th c ình đ ều khiển loại không cần cung cấp mã l nh kèm theo s dụng trình đ ều khiển để truy cập đ n nhiều h CSDL khác  Loại 4: Có tên gọ N ePoo o e T ình đ ều khiển loại chuyển lời gọi JDBC API sang mã l nh c a h CSDL cụ thể Đây ình đ ều khiển thần Ja , ó nghĩ không ần ph i có mã l nh c a h CSDL cụ thể thi hành hương ình 6.3.2 JDBC URL Để k t n i v i CSDL, cần thông s định nguồn li u v i n qu n dư i dạng UR s u: jd ::: T ong đó:  : đượ dùng để định ình đ ều khiển để k t n i v i CSDL 246  : địa CSDL Cú pháp c a phụ thuộc vào ình đ ều khiển cụ thể  : tham s khác Ví dụ:  jd :od :d n me UR để k t n i v i CSDL tên dbname s dụng cầu n i ODBC  jd :m Q 6.4 osof :sq se e ://hos n me:1433 UR để k t n i v i CSDL Microsoft e e T ong hos n me n m y ế nối ới Q e e n Vi c k t n i v i CSDL C thực hi n qu h : đăng k ình đ ều khiển JDBC; ti p theo thự h phương hức getConnection() c a l p DriverManager 6.4.1 Đăn ký ình điều khiển T ình đ ều khiển h đơn g n C nạp mã bytecode c để C ss fo N me(“< thực C hi n công vi c nạp vào JVM Một thự h phương hức e >”) Ví dụ: để nạp ình đ ều khiển s dụng cầu n i ODBC Sun cung cấp, s dụng câu l nh s u C ss fo N me(“sun jd od d Od e ”) 6.4.2 Thực kết nối u kh nạp trình đ ều khiển JDBC, vi c k t n i v mộ ong C thực hi n v i phương hức sau l p DriverManager:  public static Connection getConnection(String url) throws SQLException: thực hi n k t n i v C yêu cầu Bộ qu n chọn ình đ ều khiển phù hợp s ình đ ều khiển tự động lựa ình đ ều khiển nạp  public static Connection getConnection(String url, String user, String pass)throws SQLException: ti n hành k t n i t i CSDL v i tài kho n user mật mã pass  public static Connection getConnection(String url, Properties info) throws Q E ep on: ương ự h n qu định thuộc tính k t n phương hức cung cấp thêm thông hông qu đ 247 ượng c a l p Properties K t qu j tr c phương hức mộ sq Conne on đượ dùng để đại di n cho k t n đ ượng c a l p đ n CSDL 6.4.3 Ví dụ Trong phần ví dụ tìm hi u h kh nh u để k t n i v i tập tin CSDl Access movies.mdb có b ng tên Movies B ng gồm cột number, title, category fomat Để ti n hành k t n i v i Microsoft Access thông qua cầu n i ODBC sau ạo tập tin CSDL movies.mdb, cần ph i tạo Data Source Name cho CSDL cách vào Control Panel chọn ODBC Data Source Ti p theo nhấn vào nút Add, bạn thấy hiển thị d nh s h CSDL hi n có 248 ình đ ều khiển Bạn chọn Microsoft Access Driver(*.mdb) nhấn Finish C a sổ cấu hình cho tập tin Access xuất hi n nhập moviesDSN vào ô Data Source Name Bạn nhấn nút Select chọn tập tin CSDL cần tạo d O để k t thúc 249 sou e n me u nhấn u kh hoàn ất công vi c tạo DSN cho tập tin movies.mdb, s dụng đoạn mã s u để ti n hành k t n i v i tập tin movies.mdb import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class TestConnection{ public static void main(String args[]){ Connection connection = null; if(args.length != 1){ System.out.println("Syntax: java TestConnection " + "DSN"); return; } try { // load driver Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); System.out.println("Loading the driver "); }catch(Exception e){//problem load driver,class not exist e.printStackTrace( ); return; } try{ 250 String dbURL = "jdbc:odbc:" + args[0]; System.out.println("Establishing connection "); connection = DriverManager.getConnection(dbURL,"",""); ys em ou p n n("Conne o ” + onne on ge C og() + “ successfully!"); // Do whatever queries or updates you want here!!! }catch( SQLException e ){ e.printStackTrace( ); }finally{ if(connection != null){ try{ connection.close(); }catch(SQLException e){ e.printStackTrace(); } } } } } Sau biên dị h đoạn hương ình n, h ng ó hể thực hi n k t n i v i CSDL cách thực thi câu l nh: java TestConnection moviesDSN 6.5 iể ữ liệ kiể ữ liệ Trong trình thao tác v i CSDL, gặp ph i vấn đề chuyển đổi kiểu li u CSDL sang kiểu li u Java h trợ ngược lai Vi c chuyển đổi thực hi n ong ng sau 251 SQL Type Java Type BIT Boolean TINYINT Byte SMALLINT Short INTEGER Int BIGINT Long REAL Float FLOAT Double DOUBLE Double DECIMAL java.math.BigDecimal NUMERIC java.math.BigDecimal CHAR java.lang.String VARCHAR java.lang.String LONGVARCHAR java.lang.String DATE java.sql.Date TIME java.sql.Time TIMESTAMP java.sql.Timestamp BINARY byte[ ] VARBINARY byte[ ] LONGVARBINARY byte[ ] BLOB java.sql.Blob CLOB Java.sql.Clob ARRAY Java.sql.Array REF Java.sql.Ref STRUCT Java.sql.Struct B ng chuyển đổi từ kiểu li u SQL sang Java Java Type SQL Type Boolean BIT Byte TINYINT Short SMALLINT Int INTEGER 252 Long BIGINT Float REAL Double DOUBLE java.math.BigDecimal NUMERIC java.lang.String VARCHAR or LONGVARCHAR VARBINARY or byte[ ] LONGVARBINARY java.sql.Date DATE java.sql.Time TIME java.sql.Timestamp TIMESTAMP java.sql.Blob BLOB java.sql.Clob CLOB java.sql.Array ARRAY java.sql.Ref REF java.sql.Struct STRUCT B ng chuyển đổi từ kiểu li u Java sang SQL c h 6.6 c n n Các thao tác truy vấn CSDL thực hi n s u kh ó đ Conne on, tạo từ trình k t n i vào CSDL Chúng ta s dụng đ l p Conne s emen ượng c a on để tạo thể hi n c a l p java.sql.Statement Sau tạo ượng c a l p Statement thực hi n n onne h o ong ượng đ i đ ượng on ương ứng Nội dung statement câu SQL Câu l nh SQL statement thực hi n g h ng đ n CSDL N u câu l n SQL câu truy vấn nội dung k t qu tr thể hi n c al pj sq Resu qu mộ s nguy n C e , ngược lại (các câu l nh h y đổi nội dung CSDL) tr k t đ ượng c a l p ResultSet cho phép truy cập đ n k t qu tr c a câu truy vấn 253 6.6.1 Các lớp  java.sql.Statement Statement l p h o nC C n dùng để thể hi n câu l nh SQL Mọi thực hi n hông qu phương hức c a l p Statemen Phương thức executeQuery() nhận vào tham s chu i nội dung câu l n SQL tr đ i ượng kiểu Resu e Phương s dụng ong ường hợp câu l nh SQL có tr k t qu CSDL Phương e e u eUpd e() ũng nhận vào tham s chu i nội dung câu l nh SQL Tuy nhi n phương hức s dụng đượ đ i v i l nh cập nhật nội dung CSDL K t qu tr s dòng bị động bỡi câu l nh SQL Phương e e u e() ường hợp tổng quát c phương hức tr n Phương hức nhận vào chu i nội dung câu l nh SQL Câu l nh SQL câu l nh truy vấn cập nhật N u k t qu c a câu l nh dòng ong C hì phương hức tr giá trị ue, ngược lại tr giá trị f se T ong ường hợp giá trị true, s u h ng dùng phương ge Resu ó hể e () để lấy dòng k t qu tr  java.sql.ResultSet Đ cung cấp ượng resultset dòng li u tr c a câu l nh truy vấn CSDL L p phương để rút trích cột dòng k t qu tr Tất c phương có dạng: type getType(int | String) T ong h m s s thứ tự c a cột tên cột cần lấy nội dung Tại thờ đ ểm thao tác dòng c esu se Để thao tác dòng ti p theo s dụng phương ne () Phương hức tr giá trị true ong ường hợp có dòng ti p heo, ngược lại tr giá trị false 6.6.2 Ví dụ truy vấn CSDL public class Movie{ private String movieTitle, category, mediaFormat; private int number; public Movie(int n, String title, String cat, String format){ 254 number = n; movieTitle = title; category = cat; mediaFormat = format; } public int getNumber(){ return number; } public String getMovieTitle(){ return movieTitle; } public String getCategory(){ return category; } public void setCategory(String c){ category = c; } public String getFormat(){ return mediaFormat; } public void setFormat(String f){ mediaFormat = f; } public String toString(){ return number + ": " + movieTitle + " - " + category + " " mediaFormat; } } 255 + import java.sql.*; public class MovieDatabase{ private Connection connection; private PreparedStatement findByNumber, updateCategory; private CallableStatement findByCategory; public MovieDatabase(Connection connection) throws SQLException{ this.connection = connection; } public void showAllMovies(){ try{ Statement selectAll = connection.createStatement(); String sql = "SELECT * FROM Movies"; ResultSet results = selectAll.executeQuery(sql); while(results.next()){ int number = results.getInt(1); String title = results.getString("title"); String category = results.getString(3); String format = results.getString(4); Movie movie = new Movie(number, title, category, format); System.out.println(movie.toString()); } results.close(); selectAll.close(); }catch(SQLException e){ e.printStackTrace(); } } } 256 import java.sql.*; public class ShowMovies{ public static void main(String [] args){ String url = "jdbc:odbc:" + args[0]; try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Connection connection =DriverManager.getConnection(url); MovieDatabase db = new MovieDatabase(connection); db.showAllMovies(); connection.close(); }catch(Exception e){ e.printStackTrace(); } } } 6.6.3 Ví dụ cập nhật CSDL Phương Mo e ddMo e() n dư thêm vào l p se định nghĩa ví dụ public class MovieDatabase{ … public void addMovie(Movie movie){ ys em ou p n n(“Add ng mo e: “ + mo e o ng()); try{ Statement addMovie = connection.createStatement(); ng sq = “IN ERT INTO Mo es VA UE (“ + mov e ge Num e () + “, “ + “‘“ + mo e ge Mo eT e() + “‘, “ + “‘“ + mo e ge C ego y() + “‘, “ 257 + “‘“ + mo e ge Fo m () + “‘)”; ys em ou p n n(“E e u ng s emen : “ + sq ); addMovie.executeUpdate(sql); addMovie.close(); System.out p n n(“Mo e dded su essfu y!”); }catch(SQLException e){ e.printStackTrace(); } } } import java.sql.*; public class AddMovies{ public static void main(String [] args){ ng u = “jd :od :” + gs[0]; ys em ou p n n(“A emp ng o onne o “ + u ); try{ ys em ou p n n(“ o d ng he d C ss fo N me(“sun jd od ys em ou p n n(“Es e ”); d Od sh ng e ”); onne on ”); Connection connection = DriverManager.getConnection(url); System ou p n n(“Conne o “ + onne on ge C og() + “ su ess!”); MovieDatabase db = new MovieDatabase(connection); Movie [] movies = new Movie[6]; mo es[0] = new Mo e(1, “ F W s: A New Hope”,“ en e on”, “ V ”); movies[1] = new Mo e(2, “C zen ne”, “ m ”, “VH ”); mo es[2] = new Mo e(3, “The ung e ook”, “Ch d en”, “VH ”); 258 mo es[3] = new Mo e(4, “ um nd um e ”, “Comedy”, “ V ”); mo es[4] = new Mo e(5, “ “ en e F W s: A k of he C ones”, on”, “ V ”); mo es[5] = new Mo e(6, “Toy o y”, “Ch d en”, “ V ”); for(int i = 0; i < movies.length; i++){ db.addMovie(movies[i]); } ys em ou p n n(“C os ng he onne connection.close(); }catch(Exception e){ e.printStackTrace(); } } } 259 on ”); i ập Để x li u từ mộ C , hương ình ph i thực hi n lần ượt theo c sau:  Gọi hàm getConnection() để nhận đượ đ  Tạo mộ đ ượng c a l p Connection; ượng c a l p Statement;  Chuẩn bị mộ đ i ượng để x lý l nh c a SQL truy vấn vào li u theo yêu cầu; Câu l nh SQL thực hi n trực ti p hông qu đ biên dịch dị h hông qu đ ượng c a Statement ượng c a PreparedStatement hay gọi th tụ để ưu ại thông qua CallableStatement Khi hàm executeQuery() thực hi n, k t qu cho lạ đ ResualtSet bao gồm dòng li u s dụng hàm next() để ượng c a l p định li u theo yêu cầu Câu Tạo sở li u đơn g n MS Access SQL Server 2000 bao gồm b ng s u: SanPham(MaSP, TenSP, NhaSanXuat, MaLoaiSP) LoaiSanPham(MaLoaiSP, TenLoaiSP) Câu Vi hương ình ho phép h ển thị MaSP, TenSP TenLoaiSP (trong console giao di n) Câu Cho phép nhập vào li u vào b ng LoaiSP Thư n dùng để k t n i vào SQL Server gồm file: msbase.jar, mssqlserver.jar, msutil.jar ưu ần kh o hư n c biên dịch Câu Thi t k CSDL vi hương ình qu n í bán hàng hóa theo mô t sau: NHANVIEN: m i nhân viên có mã nhân viên nhất, họ n, ngày h ng năm s nh, địa s đ n thoại gi i tính 260 SANPHAM: m i s n phẩm có mã s n phẩm để phân bi t v i s n phẩm khác, tên s n phẩm, đơn ị ính g (đơn g > 0) HOADON: m i hóa đơn ó mộ mã hó đơn nhất, mã nhân viên lập hó đơn, loạ hó đơn (nhập, xuất, chuyển hay tr ), ngày lập hó đơn, ngày g o nhận, diễn gi i (ngày lập [...]... Type Java Type BIT Boolean TINYINT Byte SMALLINT Short INTEGER Int BIGINT Long REAL Float FLOAT Double DOUBLE Double DECIMAL java. math.BigDecimal NUMERIC java. math.BigDecimal CHAR java. lang.String VARCHAR java. lang.String LONGVARCHAR java. lang.String DATE java. sql.Date TIME java. sql.Time TIMESTAMP java. sql.Timestamp BINARY byte[ ] VARBINARY byte[ ] LONGVARBINARY byte[ ] BLOB java. sql.Blob CLOB Java. sql.Clob... Java. sql.Clob ARRAY Java. sql.Array REF Java. sql.Ref STRUCT Java. sql.Struct B ng chuyển đổi từ kiểu dữ li u SQL sang Java Java Type SQL Type Boolean BIT Byte TINYINT Short SMALLINT Int INTEGER 252 Long BIGINT Float REAL Double DOUBLE java. math.BigDecimal NUMERIC java. lang.String VARCHAR or LONGVARCHAR VARBINARY or byte[ ] LONGVARBINARY java. sql.Date DATE java. sql.Time TIME java. sql.Timestamp TIMESTAMP java. sql.Blob... TIMESTAMP java. sql.Blob BLOB java. sql.Clob CLOB java. sql.Array ARRAY java. sql.Ref REF java. sql.Struct STRUCT B ng chuyển đổi từ kiểu dữ li u Java sang SQL c h 6. 6 c cơ bản n n Các thao tác truy vấn CSDL chỉ có thể được thực hi n s u kh đã ó đ Conne on, được tạo ra từ quá trình k t n i vào CSDL Chúng ta s dụng đ l p Conne s emen ượng c a on để tạo ra các thể hi n c a l p java. sql.Statement Sau khi tạo... loại theo công thức: Diem=5 và Diem=7 và Diem8: Giỏi 265 ưu ữ để để cập [1] Nguyễn Phương n (2005), Java T p 1,2, Nhà xuất b n o động – Xã hội [2] Richard F Raposa Java in 60 Minutes a Day Published by Wiley Publishing, Inc., Indianapolis, Indiana, 2003 266 ... e.printStackTrace(); } } } 2 56 import java. sql.*; public class ShowMovies{ public static void main(String [] args){ String url = "jdbc:odbc:" + args[0]; try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Connection connection =DriverManager.getConnection(url); MovieDatabase db = new MovieDatabase(connection); db.showAllMovies(); connection.close(); }catch(Exception e){ e.printStackTrace(); } } } 6. 6.3 Ví dụ cập... pj sq Resu qu là mộ s nguy n C e , ngược lại (các câu l nh h y đổi nội dung CSDL) sẽ tr về k t đ ượng c a l p ResultSet cho phép chúng ta truy cập đ n k t qu tr về c a các câu truy vấn 253 6. 6.1 Các lớp cơ bản  java. sql.Statement Statement là một trong 3 l p h o nC C ơ n dùng để thể hi n một câu l nh SQL Mọi được thực hi n hông qu 3 phương hức c a l p Statemen Phương thức executeQuery() nhận vào 1... MovieDatabase(connection); Movie [] movies = new Movie [6] ; mo es[0] = new Mo e(1, “ F W s: A New Hope”,“ en e on”, “ V ”); movies[1] = new Mo e(2, “C zen ne”, “ m ”, “VH ”); mo es[2] = new Mo e(3, “The ung e ook”, “Ch d en”, “VH ”); 258 mo es[3] = new Mo e(4, “ um nd um e ”, “Comedy”, “ V ”); mo es[4] = new Mo e(5, “ “ en e F W s: A k of he C ones”, on”, “ V ”); mo es[5] = new Mo e (6, “Toy o y”, “Ch d en”, “ V ”); for(int... (ngày lập ... java. math.BigDecimal NUMERIC java. lang.String VARCHAR or LONGVARCHAR VARBINARY or byte[ ] LONGVARBINARY java. sql.Date DATE java. sql.Time TIME java. sql.Timestamp TIMESTAMP java. sql.Blob BLOB java. sql.Clob... LONGVARBINARY byte[ ] BLOB java. sql.Blob CLOB Java. sql.Clob ARRAY Java. sql.Array REF Java. sql.Ref STRUCT Java. sql.Struct B ng chuyển đổi từ kiểu li u SQL sang Java Java Type SQL Type Boolean BIT Byte TINYINT... java. lang.String VARCHAR java. lang.String LONGVARCHAR java. lang.String DATE java. sql.Date TIME java. sql.Time TIMESTAMP java. sql.Timestamp BINARY byte[ ] VARBINARY byte[ ] LONGVARBINARY byte[ ] BLOB java. sql.Blob

Ngày đăng: 19/02/2016, 22:03

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan