TRUY XUẤT CHUỖI UNICODE TRONG SQL SERVER từ JAVA và PHP

65 610 1
TRUY XUẤT CHUỖI UNICODE TRONG SQL SERVER từ JAVA và PHP

Đ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

qwertyuiopasdfghjklzxcvbnmqwert yuiopasdfghjklzxcvbnmqwertyuiop asdfghjklzxcvbnmqwertyuiopasdfg BÁO CÁO ĐỒ ÁN MÔN HỌC hjklzxcvbnmqwertyuiopasdfghjklzx cvbnmqwertyuiopasdfghjklzxcvbn mqwertyuiopasdfghjklzxcvbnmqwe rtyuiopasdfghjklzxcvbnmqwertyuio pasdfghjklzxcvbnmqwertyuiopasdf ghjklzxcvbnmqwertyuiopasdfghjklz xcvbnmqwertyuiopasdfghjklzxcvbn mqwertyuiopasdfghjklzxcvbnmqwe rtyuiopasdfghjklzxcvbnmqwertyuio pasdfghjklzxcvbnmqwertyuiopasdf ghjklzxcvbnmqwertyuiopasdfghjklz xcvbnmqwertyuiopasdfghjklzxcvbn mrtyuiopasdfghjklzxcvbnmqwertyu iopasdfghjklzxcvbnmqwertyuiopas TRUY XUẤT CHUỖI UNICODE TRONG SQL SERVER TỪ JAVA VÀ PHP 3/19/2008 Vũ Minh Quang - Tô Duy Liêm Đồ Án Chuyên Ngành GVHD: Thầy Nguyễn Văn Hiệp BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC MỞ THÀNH PHỐ HỒ CHÍ MINH KHOA CÔNG NGHỆ THÔNG TIN BÁO CÁO ĐỒ ÁN MÔN HỌC Đề tài: TRUY XUẤT CHUỖI UNICODE TRONG SQL SERVER TỪ JAVA VÀ PHP Giáo viên hướng dẫn: ThS Nguyễn Văn Hiệp Nhóm thực hiện: • Vũ Minh Quang MSSV: 10460095 • Tô Duy Liêm MSSV: 10460164 Năm học 2007 - 2008 - Trang SVTH: Tô Duy Liêm Vũ Minh Quang - 10460164 - 10460095 Đồ Án Chuyên Ngành GVHD: Thầy Nguyễn Văn Hiệp Nội dung đề tài Tên đề tài: Truy xuất chuỗi Unicode SQL Server từ Java PHP Mục tiêu: - Tìm hiểu phương pháp truy xuất database từ Java PHP Tìm hiểu trạng truy xuất chuỗi Unicode SQL Server từ Java PHP Đề xuất giải pháp cho phép Java PHP làm việc tốt chuỗi Unicode SQL Server Hiện thực demo giải pháp Giáo viên hướng dẫn: thầy Thạc sỹ Nguyễn Văn Hiệp Thời gian hoàn thành: 25/11/2007 - 19/03/2008 Sinh viên thực hiện: Tô Duy Liêm, Nguyễn Minh Quang Công nghệ yêu cầu: - Window 2000, XP, Vista, Linux Microsoft SQL Server 2000 or newer Apache web service PHP 4.0 or newer Java flatform Công cụ thực demo: - - Window XP SP2 OS Microsoft SQL Server 2000 Service Pack AppServ phiên Win32 version 2.5.9, bao gồm: • Apache 2.2.4 • PHP 5.2.3 • MySQL 5.0.45 • phpMyAdmin – 2.10.2 Macromedia Dreamwaver MX 2004 version 7.0.1 Eclipse version 3.2 - Trang SVTH: Tô Duy Liêm Vũ Minh Quang - 10460164 - 10460095 Đồ Án Chuyên Ngành GVHD: Thầy Nguyễn Văn Hiệp MỤC LỤC • Phần mục lục • Unicode • SQL Server, PHP Java 13 • Các phương pháp truy xuất SQL Server từ PHP Java .15 • Các phương pháp truy xuất chuỗi Unicode từ SQL Server với PHP Java 52 • Phần phụ lục 62 • Nhận xét giáo viên hướng dẫn 63 • Nhận xét trưởng khoa CNTT trường ĐH Mở 64 • Lời kết 65 - Trang SVTH: Tô Duy Liêm Vũ Minh Quang - 10460164 - 10460095 Đồ Án Chuyên Ngành GVHD: Thầy Nguyễn Văn Hiệp I Unicode Phần 1: Tổng quan Unicode a) Unicode: mã chuẩn quốc tế thiết kế để dùng làm mã cho tất ngôn ngữ khác giới, kể ngôn ngữ sử dụng ký tự tượng hình phức tạp tiếng Trung Quốc, tiếng Thái, v.v Vì điểm ưu việt đó, Unicode bước thay mã truyền thống, kể mã tiêu chuẩn ISO 8859 hỗ trợ nhiều phần mềm trình ứng dụng, chẳng hạn Windows b) Hiệp hội Unicode: Hiệp hội Unicode California xuất phiên The Unicode Standard (Tiêu chuẩn Unicode) vào năm 1991, liên tục hoàn thiện chuẩn (hiện đến phiên 4.0) Các phiên viết dựa phiên có, nhờ đảm bảo tính tương thích Lưu ý Unicode tiêu chuẩn ISO 10646 hai khái niệm hoàn toàn độc lập Khi nói đến ISO 10646 tức người ta nói đến tiêu chuẩn quốc tế thức, Unicode Unicode Consortium (tập hợp đại diện công ty tin học lớn) soạn Kể từ năm 1991, Nhóm làm việc ISO Liên đoàn Unicode định hợp tác chặt chẽ với trình nâng cấp mở rộng chuẩn để đảm bảo tính tương thích (cụ thể vị trí ký tự hai y hệt – chẳng hạn chữ 01A1) Còn với Unicode lại khác, chuẩn phát triển Liên đoàn Unicode Liên đoàn Unicode tổ chức phi lợi nhuận tập hợp số công ty, có công ty đa quốc gia khổng lồ có ảnh hưởng lớn Microsoft, Adobe Systems, IBM, Novell, Sun Microsystems, Lotus Software, Symantec Unisys Tuy nhiên, chuẩn Unicode không quy định mã, mà cách dựng hình, cách mã hóa c) Kho chữ: Unicode chiếm trước 1.114.112 (= 220+216) mã chữ, gán ký hiệu cho 96000 mã chữ 256 mã phù hợp với ISO 8859-1, cách mã hóa ký tự phổ biến "thế giới phương Tây"; đó, 128 ký tự định danh theo ASCII Không gian mã Unicode cho ký tự chia thành 17 mặt phẳng (plane) mặt phẳng có 65536 code point Mặt phẳng (plane 0), "Mặt phẳng đa ngôn ngữ bản" (Basic Multilingual Plane - BMP), nơi mà đa số ký hiệu gán mã BMP chứa ký hiệu cho hầu hết ngôn ngữ đại, số lượng lớn ký tự đặc biệt Đa số code point phân bố BMP dùng để mã hóa ngôn ngữ CJKV (Hán-Nhật-Hàn-Việt) Hai mặt phẳng dùng cho ký tự "đồ họa" Mặt phẳng 1, "Mặt phẳng đa ngôn ngữ bổ sung" (Supplementary Multilingual Plane - SMP), - Trang SVTH: Tô Duy Liêm Vũ Minh Quang - 10460164 - 10460095 Đồ Án Chuyên Ngành GVHD: Thầy Nguyễn Văn Hiệp dùng chủ yếu cho loại chữ viết cổ, ví dụ Egyptian hieroglyph (chưa mã hóa), dùng cho ký hiệu âm nhạc Mặt phẳng 2, (Supplementary Ideographic Plane - SIP), dùng cho khoảng 40000 chữ Trung Quốc gặp mà đa số ký hiệu cổ, có số ký hiệu đại Mặt phẳng 14 chứa số ký tự thẻ ngôn ngữ không khuyến khích số ký hiệu lựa chọn biến thể Mặt phẳng 15 Mặt phẳng 16 mở cho sử dụng cá nhân Kho ≈220 điểm mã bảo đảm tương thích với mã UTF-16 Việc dùng hết có 10% kho chữ cho thấy kho chữ cỡ ≈20 bit khó bị đầy tương lai gần d) Các bảng mã Unicode cách để đánh số cho tất ký tự dùng người ngôn ngữ viết Nhưng số ghi hệ thống xử lý văn lại vấn đề khác; vấn đề hậu việc phần lớn phần mềm phương Tây biết tới hệ thống mã hóa 8-bit, việc đưa Unicode vào phần mềm diễn chậm chạp năm gần Các chương trình 8-bit cũ nhận biết ký tự bit, dùng nhiều 256 điểm mã cách giải đặc biệt Do người ta phải đề nhiều chế để dùng Unicode; tùy thuộc vào khả lưu trữ, tương thích với chương trình nguồn tương tác với hệ thống khác mà người chọn chế UTF-32 Cách đơn giản để lưu trữ tất 220+216 Unicode code points sử dụng 32 bit cho ký tự, nghĩa là, byte – đó, cách mã hóa Unicode gọi UTF-32 ISO/IEC 10646 gọi UCS-4 Vấn đề cách hao chỗ lần so với trước kia, dùng vật nhớ (như đĩa, băng) Tuy nhiên, đơn giản, nên số chương trình sử dụng mã hóa 32 bit bên xử lý Unicode UTF-16 UTF-16 cách mã hóa dùng Unicode 20 bit Các ký tự BMP diễn tả cách dùng giá trị 16-bit code point Unicode CCS Có hai cách để viết giá trị 16 bit dòng (stream) 8-bit Có lẽ bạn nghe qua chữ endian Big Endian có nghĩa cho Most Significant Byte trước, tức nằm bên trái – ta có UTF-16BE Còn Little Endian ngược lại, tức Least Significant Byte trước – ta có UTF-16LE Thí dụ, giá trị 16-bit số Hex1234 viết Hex12 Hex34 Big Endian Hex34 Hex12 Little Endian Những ký hiệu không nằm BMP đuợc biểu diễn cách dùng surrogate pair (cặp thay thế) Code points có giá trị từ U+D800 đến U+DFFF dành riêng để dùng cho mục đích nầy Trước hết, code point có 20 bit phân làm hai nhóm 10 bit Nhóm Most Significant 10 bit đuợc map vào giá trị 10 bit nằm khoảng từ u+D800 đến u+DBFF Nhóm Least Significant 10 bit đuợc map vào giá trị 10 bit nằm khoảng từ U+DC00 đến U+DFFF Theo cách UTF-16 biểu diễn ký hiệu Unicode có 20 bit - Trang SVTH: Tô Duy Liêm Vũ Minh Quang - 10460164 - 10460095 Đồ Án Chuyên Ngành GVHD: Thầy Nguyễn Văn Hiệp UTF-8 UTF-8 cách mã hóa để có tác dụng giống UCS-4 (cũng UTF16), có code point khác UTF-8 thiết kế để tương thích với chuẩn ASCII UTF-8 sử dụng từ (cho ký tự ASCII) byte để biểu diễn ký tự Chính tương thích với ASCII, UTF-8 có lợi sử dụng để bổ sung hỗ trợ Unicode cho phần mềm có sẵn Thêm vào đó, nhà phát triển phần mềm sử dụng hàm thư viện có sẵn ngôn ngữ lập trình C để so sánh (comparisons) xếp thứ tự (Ngược lại, để hỗ trợ cách mã hóa 16 bit hay 32 bit trên, số lớn phần mềm buộc phải viết lại tốn nhiều công sức Một điểm mạnh UTF-8 với văn có số ký tự ASCII, hay chí cho ngôn ngữ dùng bảng chữ Latinh tiếng Việt, tiếng Pháp, tiếng Tây Ban Nha, v.v.; cách mã hóa kiểu tiết kiệm không gian lưu trữ UTF-8 thiết kế đảm bảo chuỗi byte ký tự lại nằm chuỗi ký tự khác dài Điều khiến cho việc tìm kiếm ký tự theo byte văn dễ dàng Một số dạng mã hóa khác (như Shift-JIS) tính chất khiến cho việc xử lý chuỗi ký tự trở nên phức tạp nhiều Mặc dù để thực điều đòi hỏi phải có độ dư (văn dài thêm) ưu điểm mà mang lại nhiều Việc nén liệu mục đích hướng tới Unicode việc cần tiến hành cách độc lập Các quy định xác UTF-8 sau (các số bắt đầu 0x số biểu diễn hệ thập lục phân) Các ký tự có giá trị nhỏ 0x80, sử dụng byte có giá trị Các ký tự có giá trị nhỏ 0x800, sử dụng byte: byte thứ có giá trị 0xC0 cộng với bit từ thứ tới 11 (7th-11th least significant bits); byte thứ hai có giá trị 0x80 cộng với bit từ thứ tới thứ (1st-6th least significant bits) Các ký tự có giá trị nhỏ 0x10000, sử dụng byte: byte thứ có giá trị 0xE0 cộng với bit từ thứ 13 tới 16; byte thứ hai có giá trị 0x80 cộng với bit từ thứ tới 12; byte thứ ba có giá trị 0x80 cộng với bit từ thứ tới thứ Các ký tự có giá trị nhỏ 0x20000, sử dụng byte: byte thứ có giá trị 0xF0 cộng với bit từ thứ 19 tới 21; byte thứ hai có giá trị 0x80 cộng với bit từ thứ 13 tới 18; byte thứ ba có giá trị 0x80 cộng với bit từ thứ tới thứ 12; byte thứ tư có giá trị 0x80 cộng với bit từ thứ tới thứ Hiện nay, giá trị khác giá trị chưa sử dụng Tuy nhiên, chuỗi ký tự dài tới byte dùng tương lai - Trang SVTH: Tô Duy Liêm Vũ Minh Quang - 10460164 - 10460095 Đồ Án Chuyên Ngành GVHD: Thầy Nguyễn Văn Hiệp UTF-7 Chuẩn hóa dùng có lẽ UTF-7 Chuẩn MIME yêu cầu thư điện tử phải gửi dạng ASCII thư điện tử sử dụng mã hóa Unicode coi không hợp lệ Tuy nhiên hạn chế thường bị hầu hết người bỏ qua UTF-8 cho phép thư điện tử sử dụng Unicode đồng thời phù hợp với tiêu chuẩn Các ký hiệu ASCII giữ nguyên, nhiên ký tự khác 128 ký hiệu ASCII chuẩn mã hóa escape sequence hay dấu '+' theo sau ký tự Unicode mã hóa Base64, kết thúc dấu '-' Ký tự '+' tiếng mã hóa thành '+-' e) Các vấn đề khác Tiêu chuẩn Unicode bao gồm số vấn đề có liên quan, chẳng hạn character properties, text normalisation forms bidirectional display order (để hiển thị xác văn chứa hai loại ngôn ngữ có cách viết từ phải qua trái tiếng Ả Rập hay tiếng Hebrew) trái qua phải Phần 2: Unicode chữ viết Việt Nam Unicode chữ viết Việt Nam, mã TCVN 6909:2001 Có hai dòng giải pháp để xử lý tiếng Việt công nghệ thông tin mã dựng sẵn mã tổ hợp Cả hai giải pháp có ưu nhược điểm riêng chủ đề gây nhiều tranh luận giới tin học thời gian gần Các khái niệm ký tự dựng sẵn ký tự tổ hợp: Ký tự dựng sẵn ký tự không tổ hợp từ ký tự khác Ký tự tổ hợp ký tự tổ hợp từ ký tự Trong Unicode, ký tự tổ hợp tổ hợp từ thành phần nhỏ ký tự ASCII, ký tự dấu nguyên âm ký tự dấu thanh- ta có dạng biểu diễn tắc (canonical) Ưu nhược điểm loại mã tổ hợp dựng sẵn: a) Ưu điểm mã tổ hợp Mã tổ hợp có phần gọn nhẹ chiếm mã bảng mã, cần 20 mã cho ký tự Việt ( ă, â, ê, ô, ơ, ư, Ă, Â, Ê, Ô, Ơ, Ư, dấu thanh: huyền, hỏi, ngã, sắc, nặng dấu tổ hợp nguyên âm: nón, mũ, râu cho dạng canonical) mã dựng sẵn phải cần đến 134 mã cho ký tự Việt Mã tổ hợp có phần gần với ngôn ngữ tự nhiên (Việt) trình ghép chữ, ghép vần - Trang SVTH: Tô Duy Liêm Vũ Minh Quang - 10460164 - 10460095 Đồ Án Chuyên Ngành GVHD: Thầy Nguyễn Văn Hiệp Mã tổ hợp dễ dàng việc chuyển đổi chữ hoa/chữ thường, số ứng dụng dùng tính Change Case có sẵn để chuyển đổi chữ hoa/chữ thường Mã tổ hợp dễ dàng việc xếp tiếng Việt, thực vậy, lý dấu huyền, sắc, ngã, hỏi, nặng - thứ tự bảng mã Unicode - lại nằm không theo thứ tự xếp tiếng Việt huyền, hỏi, ngã, sắc, nặng, phải thiết kế thuật toán riêng để xếp mà không dùng hàm xếp có sẵn tiếng Anh (đa phần ứng dụng hỗ trợ xếp theo luật tiếng Anh) Khi phải dùng thuật toán riêng việc xếp cho mã dựng sẵn không khó hơn, không phức tạp nhiều so với việc xếp cho mã tổ hợp Mã tổ hợp có phần dễ dàng việc tìm kiếm tiếng Việt gần đúng, ví dụ tìm chữ tiếng Việt gần với âm “tha” chẳng hạn hàm tìm kiếm phổ thông tìm chữ thà, thá, thả, thã, thạ Nhưng tìm từ gần với âm “than” lúc lại phải thiết kế thuật toán riêng, mà phải dùng thuật toán riêng tổ hợp dựng sẵn thuật toán không khó nhiều Trong thực tế, mã tổ hợp hỗ trợ tốt môi trường Windows 2000, MS Office 2000, ý tốt chuyển đổi chữ hoa/thường, xếp tiếng Việt thiết kế hệ điều hành số ứng dụng Mã tổ hợp mã nằm miền W4L nên thị tốt số control có sẵn Windows 2000, XP Tuy nhiên lên môi trường Windows XP, Microsoft hỗ trợ mã dựng sẵn với tính xếp tiếng Việt tích hợp vào hệ điều hành môi trường Windows XP, Office XP khác biệt hỗ trợ tổ hợp dựng sẵn gần Vietkey Group phối hợp với Microsoft Hà Nội tiến hành loạt thí nghiệm môi trường Windows rút kết luận Các kết luận không cho môi trường cũ Windows 95 Windows 98 b) Nhược điểm mã tổ hợp Cài đặt mã tổ hợp phức tạp, số lượng môi trường cài đặt hạn chế nhiều so với mã dựng sẵn, thông thường cài đặt với font vector font cho phép định nghĩa ký tự có độ rộng âm, ký tự có độ rộng âm dương tổ hợp lại cho ký tự cần hiển thị Một khó khăn lớn đa phần công nghệ font phổ biến ngày TrueType, OpenType, Type1 không cho phép thay đổi động vị trí nét hình chữ, mà điều lại cần thiết Ví dụ chữ “à”, “À”, vị trí dấu huyền phải nằm cao độ khác tuỳ theo chữ sở chữ thường hay chữ hoa, việc thay đổi động cao độ dấu theo ngữ cảnh chưa thực kỹ thuật Font chữ hành Để khắc phục vấn đề này, VNI phải đề xuất mã riêng cho dấu thanh: dấu huyền, mã cho chữ hoa mã cho chữ thường Trong CP 1258 Unicode để đảm bảo tính đơn trị (tính một-một) dấu có mã khó khăn việc hiển thị Phương án thứ mà Microsoft đưa để giải vấn đề tăng giảm độ cao dấu dùng kỹ thuật Hook API thay đổi hàm Display qua ánh xạ (Map) chuỗi ký tự tổ hợp chuỗi ký tự dựng sẵn để hiển thị in ấn Cơ chế - Trang SVTH: Tô Duy Liêm Vũ Minh Quang - 10460164 - 10460095 Đồ Án Chuyên Ngành GVHD: Thầy Nguyễn Văn Hiệp có Windows 95 tiếng Việt, Windows 2000, Windows XP mà Windows 95, Windows 98 Thêm chế thực tốt, Windows XP (mới nhất), tượng xa rời dấu xẩy với MS Office 2000 (xem hình minh họa phần với PowerPoint 2000 XP) Từ việc cài đặt mã tổ hợp phức tạp dẫn đến nhược điểm thứ hai nghiêm trọng tính tương thích mã tổ hợp Có nghĩa văn gõ mã tổ hợp môi trường không đọc môi trường khác Nhất môi trường dùng font ma trận (bitmap) thường dùng để làm font hệ thống cài đặt mã tổ hợp Các môi trường Dos, text console nhiều môi trường Unix, Linux cài mã tổ hợp Mã tổ hợp cài đặt hệ điều hành phổ biến Windows 98 chữ xấu (xem hình minh họa) chấp nhận (thua xa VNI ABC), vấn đề lớn dùng mã tổ hợp phải nâng cấp phần cứng máy tính lên để cài đặt hệ Windows 2000, XP (theo khuyến cáo Microsoft để chạy mã tổ hợp tốt hơn), cần kinh phí lớn để nâng cấp máy tính, cài đặt lại hệ điều hành, đào tạo lại Độ mỹ thuật mã tổ hợp thường nhiều so với mã dựng sẵn, lý ký tự dấu (có vị trí cao độ xác định font chữ) thường dùng chung cho nhiều nguyên âm khác chúng tổ hợp tự động sau nhập đoạn text Vị trí dấu hợp đẹp với nguyên âm lại không phù hợp với nguyên âm khác Ví dụ độ rộng nguyên âm A khác với độ rộng nguyên âm I (độ rộng hẹp) đẹp cho chữ A xấu cho chữ I ngược lại, để khắc phục tình trạng VNI phải định nghĩa riêng mã cho chữ ì, í, ỉ, ĩ, ị Vì thường coi VNI giải pháp khắc phục tình mã, không đảm bảo tính đơn trị, quán (có nhiều mã cho dấu – với chữ i lại có xử lý khác so với xử lý nguyên âm khác) Trong mã dựng sẵn thiết kế từ trước (dựng sẵn) nên bố trí vị trí dấu vào vị trí thích hợp cho nguyên âm, nên có khả đẹp nhiều so với mã dựng sẵn tổ hợp Xử lý hiệu ứng với đoạn mã tổ hợp có nhiều vấn đề khó khăn so với mã dựng sẵn Trong nhiều trường hợp, chữ tiếng Việt lưu trữ hiển thị với mã dựng sẵn lại thể thống (tổ hợp từ ký tự rời rạc) thực hiệu ứng với đoạn văn co dãn text, xoay, dồn chữ, canh hai bên dấu chữ thường bị tách rời nhau, chữ nơi dấu nơi, ảnh hưởng đến mỹ thuật độ xác Có thể thường thấy tít báo dùng font chữ VNI hay xuất hiện tượng xa rời dâu Xử lý với ký tự mã tổ hợp phức tạp so với mã dựng sẵn, chữ mã tổ hợp có độ rộng thay đổi, lúc ký tự, lúc khác lại tổ hợp từ nhiều byte khác Khi tách từ, tách ký tự (theo ngôn ngữ tự nhiên), thường dùng để phân tích cú pháp hay đánh số phải xây dựng thuật toán riêng phức tạp, mã dựng sẵn có độ rộng cố định nên việc rút ký tự từ đoạn text đơn giản, không cần xây dựng thuật toán riêng Ngoài việc xử lý ký tự khác như: xóa ký tự, di chuyển cho trỏ theo đơn vị ký tự thực với mã tổ hợp khó khăn phức tạp nhiều: thường phải xóa lần, cho chữ, di chuyển lần trỏ khỏi chữ, điều xa lạ với ngôn ngữ tự nhiên - Trang 10 SVTH: Tô Duy Liêm Vũ Minh Quang - 10460164 - 10460095 Đồ Án Chuyên Ngành GVHD: Thầy Nguyễn Văn Hiệp Lớp ODBC không cần lấy đường dẫn URL Lớp trực tiếp taoj kết nối đến hàm thư việc Sun câu lệnh sun.jdbc.odbc.JdbcOdbcDrivder Sau lớp tạo đối tượng connection để liên kết đến DriverManager sở liệu, việc liên kết dùng để truy xuất đến bảng chứa liệu SQL Server ( lớp liên kết đến bảng SinhVien ) Lớp ODBC dùng vòng lặp while để lấy liệu bảng while(rs.next()){ System.out.print(rs.getString("FName")+ " "); System.out.println(rs.getString("LName")); Lớp ODBC dùng đối tượng trạng thái Statement ResultSet giống lớp ODBC Statement dùng để tạo luồng liệu kết nối, Result dùng để truy xuất liệu bảng - Trang 51 SVTH: Tô Duy Liêm Vũ Minh Quang - 10460164 - 10460095 Đồ Án Chuyên Ngành GVHD: Thầy Nguyễn Văn Hiệp IV Các phương pháp truy xuất chuỗi Unicode từ SQL Server với PHP Java ¾ Tìm hiểu trạng truy xuất chuỗi Unicode SQL Server từ JAVA PHP: Hai phương pháp JDBC ODBC làm tốt công việc truy xuất sở liệu SQL Server Do sau JAVA hỗ trợ tốt cho việc truy xuất bảng liệu, nên Unicode ngoại lệ Các JAVA sau việc truy xuất UNICODE mặc định Trong SQL Server việc support UNICODE nhũng điều mặc định, nên ngôn ngữ JAVA thế… JAVA ngôn ngữ mở nên việc truy xuất chuỗi UNICODE thông dụng phát triển tốt Qua nhiều năm, với nhũng cải tiến đáng kể cho ngôn ngữ JAVA, việc truy xuất UNICODE SQL Server dễ dàng… ngừoi dùng thêm bớt câu lệnh mà chương trình hoạt động tốt Hiện thực DEMO giải pháp: Em dùng chương trinh Eclipse để thực Demo Em tạo dialog chứa JTextField , gồm text chứa họ tên sinh viên, địa sinh viên, mã số sinh viên (ID) nút Jbutton - Trang 52 SVTH: Tô Duy Liêm Vũ Minh Quang - 10460164 - 10460095 Đồ Án Chuyên Ngành GVHD: Thầy Nguyễn Văn Hiệp Giải thích ý nghĩa JtextField: • JtextFieldID dùng để chứa Mã số ID Sinh Viên • JtextFieldHoVaTen dùng để chứa Họ Tên Sinh viên • JTextFielĐịaChỉ dùng để chứa Địa Sinh Viên • JtextFielđSoDienThoai dùng để chứa số điện thoại Sinh Viên • JtextFieldTuoi dùng để chứa tuổi Sinh Viên Chi tiết thiết kế JtextField: • JtextFieldID: private JTextField IDTextField = null; private JTextField getIDTextField() { if (IDTextField == null) { IDTextField = new JTextField(); IDTextField.setBounds(new java.awt.Rectangle(147,15,195,33)); } return IDTextField; } Ý nghĩa câu lệnh : - IDTextField = new JtextField() + dùng để khởi tạo textField - IDTextField.setBounds(new java.awt.Rectangle(147,15,195,33)); + dùng để xác định vị trí đặt TextField • JtextFieldHoVaTen: private JTextField HotenTextField = null; private JTextField getHotenTextField() { if (HotenTextField == null) { HotenTextField = new JTextField(); HotenTextField.setBounds(new java.awt.Rectangle(148,60,199,33)); } return HotenTextField; } - Trang 53 SVTH: Tô Duy Liêm Vũ Minh Quang - 10460164 - 10460095 Đồ Án Chuyên Ngành GVHD: Thầy Nguyễn Văn Hiệp Ý nghĩa câu lệnh : - HotenTextField = new JTextField(); + dùng để khởi tạo textField - HotenTextField.setBounds(new java.awt.Rectangle(148,60,199,33)); + dùng để xác định vị trí đặt TextField • JtextFieldDiaChi: private JTextField DiachiTextField = null; private JTextField getDiachiTextField() { if (DiachiTextField == null) { DiachiTextField = new JTextField(); DiachiTextField.setBounds(new java.awt.Rectangle(149,107,199,35)); } return DiachiTextField; } Ý nghĩa câu lệnh : - DiachiTextField = new JTextField(); + dùng để khởi tạo textField - DiachiTextField.setBounds(new java.awt.Rectangle(149,107,199,35)); + dùng để xác định vị trí đặt TextField • JtextFieldSoDienThoai: private JtextField SoDTTextField = null; private JtextField getSoDTTextField() { if (SoDTTextField == null) { SoDTTextField = new JtextField(); SoDTTextField.setBounds(new java.awt.Rectangle(150,151,196,33)); } return SoDTTextField; } Ý nghĩa câu lệnh : - SoDTTextField = new JtextField(); + dùng để khởi tạo textField - SoDTTextField.setBounds(new java.awt.Rectangle(150,151,196,33)); + dùng để xác định vị trí đặt TextField - Trang 54 SVTH: Tô Duy Liêm Vũ Minh Quang - 10460164 - 10460095 Đồ Án Chuyên Ngành • GVHD: Thầy Nguyễn Văn Hiệp JtextFieldTuoi: private JTextField tuoiTextField = null; private JTextField getTuoiTextField() { if (tuoiTextField == null) { tuoiTextField = new JTextField(); tuoiTextField.setBounds(new java.awt.Rectangle(150,194,195,34)); } return tuoiTextField; } Ý nghĩa câu lệnh : - tuoiTextField = new JTextField(); + dùng để khởi tạo textField - tuoiTextField.setBounds(new java.awt.Rectangle(150,194,195,34)); + dùng để xác định vị trí đặt TextField Giải thích ý nghĩa Jbutton: - JbuttonAdd dùng để thêm liệu vào bảng - JbuttonNext dùng để xem tới liệu bảng - JbuttonPrevious dùng để xem lùi liệu bảng Chi tiết thiết kế Jbutton: • AddButton : private JButton AddButton = null; private JButton getAddButton() { if (AddButton == null) { AddButton = new JButton(); AddButton.setBounds(new java.awt.Rectangle(13,258,98,42)); AddButton.setText(" Add"); AddButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { System.out.println("actionPerformed()"); // TODO Auto-generated Event stub actionPerformed() try{ System.out.print("Complete"); - Trang 55 SVTH: Tô Duy Liêm Vũ Minh Quang - 10460164 - 10460095 Đồ Án Chuyên Ngành GVHD: Thầy Nguyễn Văn Hiệp st.execute("insert into Sinhvien(ID,Hoten,DiaChi,SoDT,Tuoi) values ('"+IDTextField.getText()+"','"+HotenTextField.getText()+"','"+DiachiTextField.ge tText()+"','"+SoDTTextField.getText()+"','"+tuoiTextField.getText()+"')"); } catch (SQLException ex) { ex.printStackTrace(); } } }); } return AddButton; } Ý nghĩa câu lệnh : - AddButton = new JButton(); Tạo đối tương Jbutton - AddButton.setBounds(new java.awt.Rectangle(13,258,98,42)); Thiết lập vị trí nút Jbutton - AddButton.setText(" Add"); Đặt nhãn tên cho nút Jbutton - AddButton.addActionListener(new java.awt.event.ActionListener() Tạo đối tượng lắng nghe kiện click chuột người dùng cho nút Jbutton - st.execute("insert into Sinhvien(ID,Hoten,DiaChi,SoDT,Tuoi) values ('"+IDTextField.getText()+"','"+HotenTextField.getText()+"','"+DiachiTextFi eld.getText()+"','"+SoDTTextField.getText()+"','"+tuoiTextField.getText()+"' )"); Lấy giá trị bảng để in lên TextField - catch (SQLException ex) { ex.printStackTrace(); } Bắt lỗi kiên cho nút Jbutton - Trang 56 SVTH: Tô Duy Liêm Vũ Minh Quang - 10460164 - 10460095 Đồ Án Chuyên Ngành • GVHD: Thầy Nguyễn Văn Hiệp NextButton : private JButton getNextButton = null; private JButton getNextButton() { if (NextButton == null) { NextButton = new JButton(); NextButton.setBounds(new java.awt.Rectangle(134,255,96,43)); NextButton.setText("Next"); NextButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { System.out.println("actionPerformed()"); // TODO Auto-generated Event stub actionPerformed() try{ IDTextField.setText(rs.getString(1)); HotenTextField.setText(rs.getString(2)); DiachiTextField.setText(rs.getString(3)); SoDTTextField.setText(rs.getString(4)); tuoiTextField.setText(rs.getString(5)); System.out.println("Next"); } catch(Exception e3) { System.out.println("Not found"); } } }); } return NextButton; } - Trang 57 SVTH: Tô Duy Liêm Vũ Minh Quang - 10460164 - 10460095 Đồ Án Chuyên Ngành GVHD: Thầy Nguyễn Văn Hiệp Ý nghĩa câu lệnh : - NextButton = new JButton(); Tạo đối tương Jbutton - NextButton.setBounds(new java.awt.Rectangle(134,255,96,43)); Thiết lập vị trí nút Jbutton - NextButton.setText("Next"); Thiết lâp label cho nút Jbutton - NextButton.addActionListener(new java.awt.event.ActionListener() Tạo đối tượng lắng nghe kiện click chuột người dùng cho nút Jbutton - IDTextField.setText(rs.getString(1)); Lấy chuỗi liệu dòng ID - HotenTextField.setText(rs.getString(2)); Lấy chuỗi liệu dòng Họ tên - DiachiTextField.setText(rs.getString(3)); Lấy chuỗi liệu dòng Địa - SoDTTextField.setText(rs.getString(4)); Lấy chuỗi liệu dòng số điện thoại - tuoiTextField.setText(rs.getString(5)); Lấy chuỗi liệu dòng tuổi - Trang 58 SVTH: Tô Duy Liêm Vũ Minh Quang - 10460164 - 10460095 Đồ Án Chuyên Ngành • GVHD: Thầy Nguyễn Văn Hiệp PreviousButton : private JButton PreviousButton = null; private JButton getPreviousButton() { if (PreviousButton == null) { PreviousButton = new JButton(); PreviousButton.setBounds(new java.awt.Rectangle(255,252,93,47)); PreviousButton.setText("Previous"); PreviousButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { System.out.println("actionPerformed()"); try{ IDTextField.setText(rs.getString(1)); HotenTextField.setText(rs.getString(2)); DiachiTextField.setText(rs.getString(3)); SoDTTextField.setText(rs.getString(4)); tuoiTextField.setText(rs.getString(5)); System.out.println("Back"); } catch(Exception e3) { System.out.println("Ko co du lieu"); } } }); } return PreviousButton; } Ý nghĩa câu lệnh : - PreviousButton = new JButton(); Tạo đối tương Jbutton - PreviousButton.setBounds(new java.awt.Rectangle(255,252,93,47)); Thiết lập vị trí nút Jbutton - PreviousButton.setText("Previous"); Thiết lập Label cho Jbutton - PreviousButton.addActionListener(new java.awt.event.ActionListener() Tạo đối tượng lắng nghe kiện click chuột người dùng cho nút Jbutton - IDTextField.setText(rs.getString(1)); Lấy chuỗi liệu dòng ID - Trang 59 SVTH: Tô Duy Liêm Vũ Minh Quang - 10460164 - 10460095 Đồ Án Chuyên Ngành GVHD: Thầy Nguyễn Văn Hiệp - HotenTextField.setText(rs.getString(2)); Lấy chuỗi liệu dòng họ tên - DiachiTextField.setText(rs.getString(3)); Lấy chuỗi liệu dòng địa - SoDTTextField.setText(rs.getString(4)); Lấy chuỗi liệu dòng số điện thoại - tuoiTextField.setText(rs.getString(5)); Lấy chuỗi liệu dòng tuổi Hình ảnh minh hoạ kết đạt được: - Trang 60 SVTH: Tô Duy Liêm Vũ Minh Quang - 10460164 - 10460095 Đồ Án Chuyên Ngành GVHD: Thầy Nguyễn Văn Hiệp ¾ Tìm hiểu trạng truy xuất chuỗi Unicode SQL Server từ PHP: Tổng quan: PHP sử dụng Unicode mã hóa theo phương thức UTF-8 Còn SQL Server 2000 lại sử dụng phương thức mã hóa khác UCS-2 không nhận diện UTF-8 ký tự liệu hợp lệ Để sử dụng Unicode, ta phải khai báo charset trang web Utf-8: Và nhập liệu vào SQL Server, phải thêm vào tiền tố N trước chuỗi cần nhập để MS SQL nhận biết chuỗi dạng Unicode Ví dụ: $query = "INSERT INTO LoginTable VALUES(N'$idname',N'$fullname',N'$password')"; $resuslt = mssql_query($query); - Trang 61 SVTH: Tô Duy Liêm Vũ Minh Quang - 10460164 - 10460095 Đồ Án Chuyên Ngành GVHD: Thầy Nguyễn Văn Hiệp PHẦN PHỤ LỤC Trong lúc thực đề tài, chúng em có tham khảo số tài liệu, thông tin trang web: • • • • • • http://www.java.com http://www.php.net http://www.vi.wikipedia.org http://support.microsoft.com http://www.google.com http://www.w3schools.com Tài liệu đính kèm: Đĩa CD - ROM nội dung làm đề tài - Trang 62 SVTH: Tô Duy Liêm Vũ Minh Quang - 10460164 - 10460095 Đồ Án Chuyên Ngành GVHD: Thầy Nguyễn Văn Hiệp NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN # Tp Hồ Chí Minh, ngày….…tháng… năm 2008 Chữ ký giáo viên Giáo viên TH.S NGUYỄN VĂN HIỆP - Trang 63 SVTH: Tô Duy Liêm Vũ Minh Quang - 10460164 - 10460095 Đồ Án Chuyên Ngành GVHD: Thầy Nguyễn Văn Hiệp NHẬN XÉT CỦA TRƯỞNG KHOA CNTT TRƯỜNG ĐẠI HỌC MỞ TP HỒ CHÍ MINH # Tp Hồ Chí Minh, ngày… tháng… năm 2008 Chữ ký Trưởng Khoa CNTT - Trang 64 SVTH: Tô Duy Liêm Vũ Minh Quang - 10460164 - 10460095 Đồ Án Chuyên Ngành GVHD: Thầy Nguyễn Văn Hiệp LỜI KẾT Trong thời gian thực đề tài, gặp phải nhiều khó khăn, vướng mắc với động viên gia đình, giúp đỡ thầy cô, bè bạn… giúp chúng em có thêm tâm nỗ lực vượt qua khó khăn, trở ngại để hoàn thành tốt đề tài Từ việc giải khó khăn, chúng em rút cho thân số học kinh nghiệm hữu ích, có thêm điều kiện vận dụng kiến thức học trường có hội để phát huy khả tự học hỏi Quan trọng hết chúng em có hội áp dụng kiến thức học vào thực tế Sau hoàn tất đề tài, chúng em có thêm số kinh nghiệm phần mềm mà chúng em học, bổ sung vào phần kiến thức chuyên môn Những học kinh nghiệm vốn tài sản vô quý giá giúp cho chúng em tự tin bước vào đời sau Mặc dù có nhiều cố gắng nỗ lực thời gian khả nghiên cứu có hạn nên đề tài có nhiều hạn chế sai sót, chúng em mong nhận đóng góp ý kiến quý báu quý thầy cô bạn bè… để đề tài có tính khả thi cao Một lần chúng em xin gửi đến tất lời cảm ơn chân thành sâu sắc nhất! - Trang 65 SVTH: Tô Duy Liêm Vũ Minh Quang - 10460164 - 10460095 [...]... PHP_ INI_SYSTEM mssql.max_links "-1" PHP_ INI_SYSTEM mssql.min_error_severity "10" PHP_ INI_ALL mssql.min_message_severity "10" PHP_ INI_ALL mssql.compatability_mode "0" PHP_ INI_ALL mssql.connect_timeout "5" PHP_ INI_ALL mssql.timeout "60" PHP_ INI_ALL mssql.textsize "-1" PHP_ INI_ALL mssql.textlimit "-1" PHP_ INI_ALL mssql.batchsize "0" PHP_ INI_ALL Available since PHP 4.0.4 mssql.datetimeconvert "1" PHP_ INI_ALL... Navigator của họ sẽ hỗ trợ Java Java được sử dụng chủ yếu trên môi trường mạng, internet - Trang 14 SVTH: Tô Duy Liêm Vũ Minh Quang - 10460164 - 10460095 Đồ Án Chuyên Ngành GVHD: Thầy Nguyễn Văn Hiệp III Các phương pháp truy xuất SQL Server từ PHP và Java ¾ PHP: - PHP hỗ trợ truy xuất database từ SQL Server thông qua 2 phương pháp: truy xuất thông qua các hàm được hỗ trợ và thông qua ODBC • Thông qua... dịch với PHP hoặc khi được nạp vào lúc chạy : MSSQL_ASSOC (integer) MSSQL_NUM (integer) MSSQL_BOTH (integer) SQLTEXT (integer) SQLVARCHAR (integer) SQLCHAR (integer) SQLINT1 (integer) SQLINT2 (integer) SQLINT4 (integer) SQLBIT (integer) SQLFLT8 (integer) Sau đây là danh sách các hàm sử dụng để kết nối và truy xuất dữ liệu với SQL Server 2000: mssql_bind() Cú pháp: bool mssql_bind ( resource $stmt , string... chuyển mã và kiểm tra chính tả tiếng Việt, các công cụ này có thể nhúng được trong rất nhiều ứng dụng và các công cụ lập trình: Visual C, Basic, Delphi, Access, SQL Server II SQL Server, PHP và Java 1) SQL Server 2000 SQL Server 2000 là một hệ thống quản lý cơ sở dữ liệu (Relational Database Management System (RDBMS) ) sử dụng Transact -SQL để trao đổi dữ liệu giữa Client computer và SQL Server computer... với Sql Server được cấu hình thông qua file php_ mssql.dll và không được bật sẵn Ta phải vào cấu hình lại trong file php. ini bằng cách thêm vào dòng extension = php_ mssql.dll - Những thuộc tính của các hàm được tác động thông qua cấu hình file php. ini - Các lựa chọn cấu hình cho MS SQL Server: Name Default Changeable Changelog mssql.allow_persistent "1" PHP_ INI_SYSTEM mssql.max_persistent "-1" PHP_ INI_SYSTEM... số vào store procedure hoặc 1 remote store procedure Các Thông số: Stmt : tài nguyên khai báo, lấy được từ hàm mssql_init() param_name: tên của thông số, thường là chuỗi var: biến để gắn kết thông số vào Có thể truy n trị hoặc truy n tham số, để nhận được giá trị OUTPUT và RETVAL sao khi thực thi execution type: là 1 trong các dạng: SQLTEXT, SQLVARCHAR, SQLCHAR, SQLINT1, SQLINT2, SQLINT4, SQLBIT, SQLFLT4,... số field trong kết quả truy xuất từ server Thông số: result: kết quả nguồn truy xuất được lấy từ việc gọi lệnh mssql_query() Kết quả trả về: số lượng của field, dưới kiểu integer mssql_num_rows() Cú pháp: int mssql_num_rows ( resource $result ) Mô tả: trả về số hàng trong kết quả truy xuất từ SQL Thông số: result: kết quả nguồn truy xuất được lấy từ việc gọi lệnh mssql_query() Kết quả trả về: số lượng... (integer) SQL_ CURSOR_TYPE (integer) SQL_ CURSOR_FORWARD_ONLY (integer) SQL_ CURSOR_KEYSET_DRIVEN (integer) SQL_ CURSOR_DYNAMIC (integer) SQL_ CURSOR_STATIC (integer) SQL_ KEYSET_SIZE (integer) SQL_ CHAR (integer) SQL_ VARCHAR (integer) SQL_ LONGVARCHAR (integer) SQL_ DECIMAL (integer) SQL_ NUMERIC (integer) SQL_ BIT (integer) SQL_ TINYINT (integer) SQL_ SMALLINT (integer) SQL_ INTEGER (integer) SQL_ BIGINT (integer) SQL_ REAL... trả về từ server Nếu kết quả lấy về từ server đã tồn tại thì nó sẽ được giải phóng và thay vào là kết quả mới Thông số: result_id : kết quả nguồn được lấy từ việc gọi lệnh mssql_query() Kết quả trả về: TRUE nếu nguồn truy xuất từ server khả thi và FALSE trong các trường hợp khác - Trang 25 SVTH: Tô Duy Liêm Vũ Minh Quang - 10460164 - 10460095 Đồ Án Chuyên Ngành GVHD: Thầy Nguyễn Văn Hiệp Ví dụ: < ?php. .. engine và các ứng dụng dùng để quản lý dữ liệu và các bộ phận khác nhau trong RDBMS SQL Server 2000 được tối ưu để có thể chạy trên môi trường cơ sở dữ liệu rất lớn (Very Large Database Environment) lên đến Tera-Byte và có thể phục vụ cùng lúc cho hàng ngàn user SQL Server 2000 có thể kết hợp "ăn ý" với các server khác như Microsoft Internet Information Server (IIS), E-Commerce Server, Proxy Server SQL Server ... đề tài: Truy xuất chuỗi Unicode SQL Server từ Java PHP Mục tiêu: - Tìm hiểu phương pháp truy xuất database từ Java PHP Tìm hiểu trạng truy xuất chuỗi Unicode SQL Server từ Java PHP Đề xuất giải... • Unicode • SQL Server, PHP Java 13 • Các phương pháp truy xuất SQL Server từ PHP Java .15 • Các phương pháp truy xuất chuỗi Unicode từ SQL Server với PHP Java ... Thầy Nguyễn Văn Hiệp III Các phương pháp truy xuất SQL Server từ PHP Java ¾ PHP: - PHP hỗ trợ truy xuất database từ SQL Server thông qua phương pháp: truy xuất thông qua hàm hỗ trợ thông qua ODBC

Ngày đăng: 18/12/2015, 04:05

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

Tài liệu liên quan