Web thực sự là một kho tàng thông tin trên mọi lĩnh vực của khoa học và công nghệ. Với Web, các nhà khoa học có thể tra cứu thông tin cũng nh tao đổi kinh nghiệm với các bạn đồng nghiệp trên toàn cầu. Web thực sự là một môi trờng tốt cho khoa học và công nghệ phát triển.
Đồ án tốt nghiệp Thiết kế một Web site
Phần 2
Đồ án tốt nghiệp Thiết kế một Web site
Giới thiệu về Java truy cập vào các cơ sở dữ liệu
Sau khi gia đời, Java đã đợc hởng ứng một cách nhiệt tình và làn sóng đầu tiên về các ứng dụng viết bằng Java Applet đã phát triển rất mạnh mẽ, các nhà sáng tạo ra Java ở JavaSoft đã bắt đầu nghĩ đến phát triển Java thành một platform theo kiểu khách/chủ (client/server). Các nhà phát triển Internet và các nhà t vấn về vấn đề này đã đa ra các khái niệm về Intranet và nhận ra rằng Java có rất nhiều điểm thuận lợi trên thị trờng client/server trong có cả các client không quản lý (zero administration client), phần mềm tập trung cập nhật và quản trị, các phần mềm không có phiên bản và mẫu tập trung vào Web. Một trong những tập Java API (một API là một chơng trình ứng dụng giao tiếp - Application Programming Interfaces) quan trọng và cần thiết nhất là một trình giao tiếp với các cơ sở dữ liệu do đó dữ liệu có thể đợc tạo ra, đợc truy cập đến, đợc chia sẻ, cập nhật và tham chiếu thông qua Internet và Intranet không có dây nối nh các cơ sở dữ liệu trên các mạng hiện nay.
Chú ý:
Các Java API là các class và các method cho phép các chơng trình Java tơng tác với các hệ thống trên một thế giới thực (real-world). Ví dụ, API java.net cho phép một chơng trình Java có thể giao tiếp dùng giao thức TCP/IP và API java.awt cho các chơng trình Java khả năng hiển thị các menu, các nút và các hộp danh sách. Có một số các core API ( chẳng hạn nh các class java.lang, java.net, java.net, java.awt, java.applet), là một phần của bất kỳ một hệ thống Java nào. Sau đó có các phần mở rộng chuẩn của Java nh Java Server API và Java Management API. Theo thời gian, rất nhiều trong số các chuẩn này sẽ trở nên một phần không thể thiếu đợc của ngôn ngữ Java và sẽ trở thành các core API.
Cùng một lúc, các nhà cung cấp các cơ sở dữ liệu, nh Oracle và Informix, muốn các chơng trình Java applet truy cập vào đợc cơ sở dữ liệu của họ thông qua Internet và Intranet, do đó họ đã bắt đầu xây dựng các các class và các method bằng Java để truy cập vào dữ liệu trong các cơ sở dữ liệu của họ. Điều này tạo ra rất nhiều cách truy cập vào các cơ sở dữ liệu từ các chơng trình ứng dụng viết bằng Java.
Trong một cuộc hội nghị về Java (vào tháng 5 năm 1996), hãng Sun đa ra một loạt các Java API hớng trực tiếp đến các ứng dụng theo kiểu client/server, Internet/Intranet. Có rất nhiều các API trong đó có cả các Java Enterprise API, Java Commerce API, Java Security API và Java Servlet/Jeeves API, tất cả các API này đã nâng ngôn ngữ Java lên một mức platform và có mục đích là phát triển các ứng dụng kiểu client/server có thể chạy trên Internet.
Đồ án tốt nghiệp Thiết kế một Web site
Phần này đề cập chủ yếu đến các Java enterprise API: JDBC API, RMI (Java Remote Invocation), Object Serialization và hệ thống IDL. Trong các API trên đây thì API IDBC là API chính (JDBC tức là Java Database Connectivity - tức là cơ sở dữ liệu kết nối qua lại), API này đã sớm đợc sử dụng trong rất nhiều các chơng trình Java. Hiện tại, việc truy cập vào cơ sở dữ liệu đợc thực hiện bằng 3 cách sau: thông qua JDBC của các Java enterprise API; các phơng pháp truy cập riêng của các nhà cung cấp cơ sở dữ liệu; các class kiểu "thành viên thứ ba" (the third- party class), kiểu này đợc áp dụng đối với rất nhiều cơ sở dữ liệu. Các phần tiếp theo sẽ giới thiệu các cách truy cập vào các cơ sở dữ liệu của các nhà cung cấp và phơng pháp thông qua thành viên thứ ba và và sơ qua về phơng pháp JDBC.
Các Java Enterprise API
Các Java Enterprise API nhanh chóng trở thành một phần rất có giá trị của ngôn ngữ lập trình Java và của mô hình Java máy ảo (Java Virtual Machine). Tất cả các những ngời đợc cấp giấy phép sẽ thực hiên các API này nh một phần của hệ thống của họ. Do đó, Java Enterprise API là các API vặn năng và không phụ thuộc vào platform (cross- platform; ở đây platform là gồm cả phần cứng và hệ điều hành của máy tính).
Nh đã đề cập trên đây, các Java Enterprise API bao gồm JDBC, RMI, Object Serialization và IDL. JDBC là một tập các class truy cập vào cơ sở dữ liệu; các RMI API cho phép các chơng trình Java có khả năng gọi các method của các đối tợng (object) với các khoảng tên khác nhau (name-space); các method và các đối tợng của Object Serialization API cho phép một chơng trình có thể cất giữ (store) và xử lý trực tiếp các đối tợng này, thay vì cất giữ và xử lý nó dới dạng dữ liệu; hệ thống ngôn ngữ định nghĩa giao tiếp IDL (Interface Definition Language) cho phép các chơng trình Java giao tiếp với nhóm quản lý đối tợng OMG (Object Management Group).
Tập các API trên đây cho phép phát triển các ứng dụng ở mức enterprise theo kiểu client/server dùng các đối tợng, các applet và các servlet của Java. Khái niệm các ứng dụng ở mức enterprise là chỉ hệ thống tiện ích quảng cáo, việc đặt trớc vé máy bay trong hàng không, các hệ thống quảng cáo bằng catalog, các hệ thống thị trờng, quảng cáo các sản phẩm và các hệ thống sản xuất, các hệ thống ngân hàng (từ các máy ATM để cho phép thanh toán với ngân hàng trực tiếp qua một mạng
Đồ án tốt nghiệp Thiết kế một Web site
lớn trên phạm vi trong một nớc hay qua nhiều nớc), các hệ thống môi giới, vân vân ...
Tất cả các hệ thống này đều dùng đến một cấu trúc logic ba lớp (three-tier) (cơ sở dữ liệu kiểu đầu cuôi (back-end), lớp các quy định trung gian, lớp front end chính là lớp giao diện đồ hoạ với ngời sử dụng (GUI - Graphical User Interface). Mở rộng cấu trúc này, rất nhiều tổ chức đã sử dụng một cấu trúc gọi là cấu trúc N-Tier (tức là N lớp).
N-Tier logic là gì?
ở đây có lẽ hơi lệch về yếu tố lịch sử một chút. Các ứng dụng client/server đợc bắt đầu với một server cơ sở dữ liệu và một client với lớp trình diễn (các menu, các màn hình dữ liệu, vân vân...). Các hệ thống truyền thống này có một chơng trình client chứa tất cả các ứng dụng logic. Cấu trúc này sau đó đã đợc sửa đổi thành cấu trúc ba lớp (đã đề cập trên đây), và phần logic business đã đợc tách rời từ client và đợc tạo thành một lớp riêng biệt. Lớp này hoặc ở phía các client hoặc ở phía server.
Cùng với sự phát triển cực nhanh của Internet và các platform nh Java, các hệ thống này đang trải qua một sự tiến hoá. Với các chơng trình Java applet và các servlet, các nhà phát triển có thể tạo ra các chơng trình Java mà các chơng trình này bao gồm nhiều chức năng (encapsulate function) và dữ liệu. Các applet này đợc gửi qua mạng (Internet/Intranet) vào một thời điểm thích hợp và khi đến đợc client nó thực hiện các chức năng của nó.
Để có đợc một cái nhìn toàn cảnh về các Java Enterprise API, bạn có thể xem JDBC nh là một component làm cho một cơ sở dữ liệu có thể truy cập đợc, trong khi đó thì RMI và IDL lại có thể đợc coi là ph- ơng tiện để giao tiếp giữa các platform và các hệ thống.
JDBC
JDBC (Java Database Connectivity- Tức là cơ sở dữ liệu liên kết) là các class API liên quan đến cơ sở dữ liệu cho các Java applet và các ứng dụng. JDBC đã đợc SunSoft phát triển và là một phần của Java 1.1 JDBC, cũng giống nh ngôn ngữ lập trình Java, nó cũng không phụ thuộc vào platform và cơ sở dữ liệu. Để có thể chạy đợc JDBC trên một platform, thì Java máy ảo phải có một trình quản lý trình điều khiển địa phơng (native driver manager); đối với các cơ sở dữ liệu cụ thể, trình điều khiển cho cơ sở dữ liệu đó cũng cần thiết.
Đồ án tốt nghiệp Thiết kế một Web site
Chú ý:
Việc thiết kế JDBC đã đợc hoàn thiện bởi mức gọi giao tiếp (Call Lavel Interface hay CLI) XOPEN SQL và cơ sở dữ liệu kết nối mở của Microsoft (Microsoft's Open Database Connectivity hay gọi là ODBC). ODBC dựa trên sự truy cập nhóm qua SQL (SQL Access Group hay SAG) CLI. Do đó, JDBC và ODBC có cùng một nguồn gốc (common root). Điểm căn bản ở đây là đối với những ngời biết và thực hiện đợc ODBC thì JDBC cũng sẽ rất dễ hiểu và áp dụng cũng dễ.
Các nhà thiết kế JDBC dùng cách thiết kế là chắt lọc các các khái niệm từ ODBC. Hai nguyên nhận chính dẫn đến sự cải tiến JDBC từ ODBC là:
1. ODBC đợc dùng rất rộng rãi, điều này giúp cho các nhà thiết kế giảm đợc quá trình nghiên cứu của họ.
2. Vì có các sự thực hiện có hiệu quả trên tất cả các platform và trên hầu hết các cơ sở dữ liệu. Điều này có nghĩa là không cần phải phát triển các trình điều khiển và các trình giao tiếp mới cho Java; hãng Sun có thể là đối tác với các nhà cung cấp có sản phẩm về ODBC để có thể thiết lập nhiều các trình điều khiển, các công cụ, và sự áp dụng chúng.
Chú ý:
Một sự khác nhau quan trọng giữa JDBC và ODBC là ODBC dùng rất nhiều các ph- ơng tiện của ngôn ngữ lập trình C, chẳng hạn nh các con trỏ và kiểu trả về void - điều này là không có trong ngôn ngữ Java. Trong môi trờng C, bạn có thể định nghĩa hàm trả về void để báo cho trình dịch và thời gian chạy rằng bạn muỗn trả về kiểu con trỏ với kiểu không xác định. Sau khi bạn nhận đợc con trỏ từ hàm đó, con trỏ đó đó sẽ đợc chuyển thành một kiểu đặc biệt. Các nhà thiết kế Java mong muốn rằng sẽ tránh đợc điều này và các thao tác trên các kiểu con trỏ khác , do đó họ đã thiết kế Java là một ngôn ngữ có các kiểu trả về rất nghiêm khắc. Các method trả về các đối tợng mà đã đợc biết trớc. Java không hề có con trỏ.
Các nhà thiết kế ở JavaSoft thực hiện JDBC bằng những khái niệm rất trừu tợng từ ODBC, chẳng hạn nh kết nối (Connection) và tập kết quả (ResultSet)
Đồ án tốt nghiệp Thiết kế một Web site
Các hoạt động thông dụng trên một cơ sở dữ liệu đòi hỏi phải trả về các hàng (rows) và các hàng dữ liệu, các cột này bao gồm rất nhiều các cột, hoặc các trờng, đợc gọi là tập kết quả (ResultSet).
Nhìn vào các đặc điểm của JDBC, chúng rất thành công trong việc cung cấp khả năng truy cập vào cơ sở dữ liệu SQL. Đối với JDBC, các thao tác đơn giản trên cơ sở dữ liệu, chẳng hạn nh hỏi đáp, tạo, cập nhật, có thể đợc thực hiện bằng các method đơn giản. Đối với các thao tác phức tạp hơn, chẳng hạn nh các tập kết quả phức tạp và cất các thủ tục các tham số IN và OUT, JDBC có các lệnh riêng biệt. Đối với các ch- ơng trình tự động và các công cụ của các nhà thiết kế, JDBC có các class và các method MetaData, các class và các method này cung cấp các thông tin về rất nhiều các đặc điểm mà cơ sở dữ liệu hỗ trợ, cấu trúc bảng, và các đặc điểm khác.
Chú ý:
Khái niệm các stored procedure là các hàm và thủ tục bao gồm các lệnh dựa trên cơ sở dữ liệu đợc cất trên server cơ sở dữ liệu. Khi các chơng trình phía client muốn thực hiện một hàm thì thay vì phải dùng các lệnh cơ sở dữ liệu, thì chũng gọi các
stored procedure. Điểm thuận lợi của việc gọi này là stored procedure ở trên server, điều này cho phép tính đồng nhất, vấn đề an ninh và có hiệu quả. Cũng giống nh các thử tục thông thờng, các stored procedure cũng lấy các tham số. Các tham số IN đợc truyền cào các stored procedure và chũng không đợc trả lại; Các tham số OUT là các giá trị đợc các stored procedure trả về. Khi làm việc với các
stored procedure, hệ thống phải làm việc với các tham số này cũng với bất kỳ một tập kết quả nào (ResultSet).
Các phần sau này sẽ đề cập cụ thể hơn về các class và các method về JDBC.
Sự áp dụng JDBC
JDBC đợc thực hiện giống nh gói (package) java.sql. Bạn dùng gói này bằng cách khai báo import java.sql.* trong các chơng trình Java của bạn. Hình vẽ sau đây mô tả chiến lợc thực hiện JDBC. Phần bên dới lớp API là trình quản lý trình điều khiển JDBC cho rất nhiều loại cơ sở dữ liệu viết cho sự kết hợp giữa phần cứng và hệ điều hành, điều này là
Đồ án tốt nghiệp Thiết kế một Web site
một phần của mô hình Java máy ảo. Trình quản lý trình điều khiển JDBC có thể đợc viết cho một cơ sở dữ liệu cụ thể nào đó hoặc nó có thể là một trình quản lý trình điều khiển chung cho nhiều cơ sở dữ liệu. Hãng Sun có trình quản lý trình điều khiển cho các cơ sở dữ liệu chung JDBC và co cả trình quản lý trình điều khiển cho cơ sở dữ liệu ODBC.
Cầu nối JDBC/ODBC (Bridge JDBC/ODBC) là một lớp mỏng bên trên JDBC để hớng các lời gọi đến JDBC xang các lời gọi cho ODBC. Trình cầu nối này đợc cung cấp miễn phí với JDBC, và đã đợc Intersolv phát triển. Cầu nối JDBC/ODBC là một lớp rất mỏng bởi vì JDBC rất giống với ODBC về mặt thiết kế các class và các method ( do vậy không cần một lớp với nhiều chơng trình để chuyển đổi bởi lẽ bản thân JDBC và ODBC cũng đã có rất nhiều điểm giống nhau) và JDBC cho phép truy cập vào tất cả các cơ sở dữ liệu chính thông qua các trình điều khiển của ODBC. Vì JDBC rất gần gũi với ODBC hãng Sun đã làm cho nó trở nên dễ dàng đối với các nhà phát triển và các nhà cung cấp phần mềm độc lập có thể bắt đầu phát triển các ứng dụng về cơ sở dữ liệu bằng Java. Nếu nh họ đã phát triển một trình giao tiếp cơ sở dữ liệu hoàn toàn khác thì sẽ mất rất nhiều thời gian và công sức để có thể giao tiếp Java với các cơ sở dữ liệu chính.
Các nhà cung cấp nh Oracle và Borland có các trình điều khiển cho JDBC để truy cập trực tiếp vào các cơ sở dữ liệu của họ chẳng hạn nh cơ sở dữ liệu Oracle 7 của Oracle và Interbase của Borland. Các trình điều khiển này cũng có giá trị tơng tự trong việc phát triển các ứng dụng về cơ sở dữ liệu dùng Java.
Nếu ta nhìn sâu hơn một chút về các đặc điểm của JDBC, chúng ta sẽ thấy là JDBC có sự lựa chọn và load các trình điều khiển hoàn toàn động, các trình giao tiếp cho các kết nối, các lệnh và các tập kết quả. JDBC đợc thực hiện nh một dữ liệu ống trong ngữ cảnh các tập kết quả có chứa các dòng dữ liệu và cả sự mô tả về các dòng dữ liệu. Sự mô tả về các dòng dữ liệu đợc gọi là tập kết quả MetaData. Dùng các method trong java.sql, một chơng trình có thể yêu cầu loại của tập kết quả chẳng hạn nh các tên của các cột và các kiểu dữ liệu. JDBC đã chuẩn bị các lệnh và các đối tợng lệng có thể gọi đợc cho các cơ sở dữ liệu địa phơng xử lý dùng các thủ tục đã đợc biên dịch và các stored procedure.
Đồ án tốt nghiệp Thiết kế một Web site
Sự áp dụng ODBC
của Sun
Hệ điều hành
Trình điều khiển ODBC
Cầu nối giữa ODBC
và IDBC Trình quản lý trình điều khiển JDBC Các tập tin *.class JDBC API/ java.sql.* Sự áp dụng của các nhà cung cấp cơ sở dữ liệu Hệ điều hành Trình quản lý trình điều khiển JDBC của nhà cung cấp cơ sở dữ liệu
Các tập tin *.class JDBC API/ java.sql.*
Applet/ ứng dụng