SlideShare uma empresa Scribd logo
1 de 55
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
KHOA CÔNG NGHỆ PHẦN MỀM
LẬP TRÌNH JDBC
(JAVA DATABASE CONNECTIVITY)
NỘI DUNG
 Khái niệm cơ bản
 Kiến trúc JDBC & JDBC APIs
 Các bước làm việc với Database dùng JDBC
 Một số lớp và phương thức cơ bản trong JDBC API
 Các loại JDBC Drivers
 Ví dụ minh họa
3
Giới thiệu về JDBC
 JDBC (Java DataBase Connectivity) là một thư việc
chuẩn dùng để truy xuất các cơ sở dữ liệu như MS
Acess, SQL Server, Oracle,… trong các ứng dụng
Java bằng ngôn ngữ truy vấn SQL.
 Các hàm truy xuất cơ sở dữ liệu với JDBC nằm trong
gói java.sql.*
CSDL
JDBC
JDBC
CSDL
JDBC
Tại sao cần JDBC?
 JDBC giúp các Java Developers tạo nên các ứng dụng truy
xuất cơ sở dữ liệu mà không cần phải học và sử dụng các
APIs do các công ty sản xuất phần mềm khác nhau bên thứ
ba cung cấp. JDBC đảm bảo rằng bạn sẽ có thể phát triển
nên các ứng dụng truy cập cơ sở dữ liệu có khả năng truy
cập đến các RDBMS khác nhau bằng cách sử dụng các
JDBC driver khác nhau.
Kiến trúc JDBC
 JDBC API: là một API hoàn toàn dựa trên Java.
 JDBC DriverManager: là trình quản lý JDBC
giao tiếp trực tiếp với các trình điều khiển cơ sở
dữ liệu cụ thể - giao tiếp thực sự với cơ sở dữ
liệu.
 Các RDBMS hay các nhà sản xuất phần mềm
thứ 3 phát triển các drivers cho java đều phải
tuân thủ đặc tả JDBC của SUN.
 Các java developers dùng các JDBC drivers để
phát triển các ứng dụng có truy cập, thao tác
CSDL.
Các khái niệm cơ bản
JDBC Dirvers
 Là một chương trình máy tính giúp truy cập đến các
hệ DBMS khác nhau dùng kỹ thuật JDBC
 Do các hãng xây dựng DBMS hoặc một đơn vị thứ 3
khác cung cấp.
http://industry.java.sun.com/products/jdbc/drivers.
Các loại JDBC Dirvers
 JDBC-ODBC Bridge plus ODBC Driver
 A native API partly Java technology-enabled driver
 Pure Java Driver for Database Middleware
 Direct-to-Database Pure Java Driver
Các loại JDBC Dirvers
Type 1: JDBC-ODBC Bridge
DatabaseDatabase
ODBC
Driver
ODBC
Driver
Java
Applications
Java
Applications
JDBC Driver Type 1JDBC Driver Type 1
 JDBC-ODBC ủy nhiệm công
việc truy cập dữ liệu cho ODBC
API. Chúng là trình điều khiển
chậm nhất trong số còn lại.
Phương thức truy xuất dữ liệu đòi
hỏi trình điều khiển ODBC được cài
đặt trên máy tính client.
JDBC-ODBC LibraryJDBC-ODBC Library
Các loại JDBC Dirvers
Type 2: Java to Native API
DatabaseDatabase
Database
Library
Database
Library
Java
Applications
Java
Applications
JDBC Driver Type 2JDBC Driver Type 2
 Dùng Java Native API (JNI)
để gọi đến các thư viện API của
database.
Khi đó sự chuyển đỗi này đặt trên
máy client, một số mã nhị phân
phải được cài đặt trên máy tính
client.
Các loại JDBC Dirvers
Type 3: Java to Network Protocol Or All- Java Driver
DatabaseDatabase
JDBC Middleware
(java)
JDBC Middleware
(java)
Java
Applications
Java
Applications
JDBC Driver Type 3JDBC Driver Type 3
 Dùng Network protocol để giao tiếp
với JDBC middleware trên server.
Chuyển đổi các lời gọi JDBC thành
giao thức mạng độc lập với bất kỳ giao
thức DBMS đặc thù. Sau đó, một phần
mềm trung gian (middleware) chạy trên
máy server chuyển đỗi giao thức mạng
thành giao thức DBMS đặc thù.
Sự chuyển này đặt ở phía server mà
không đòi hỏi cài đặt trên máy tính
client.
Network protocol
Các loại JDBC Dirvers
Type 4: Java to Database Protocol
DatabaseDatabase
Java
Applications
Java
Applications
JDBC Driver Type 4JDBC Driver Type 4
 Drivers thuần java và hiện
thực/dùng database protocol để
giao tiếp trực tiếp với CSDL.
Thường là những JDBC drivers
nhanh nhất.
Chuyển lời gọi JDBC thành các
lời gọi giao thức DBMS đặc thù.
Cách nạp Database Driver?
Driver được cài đặt trong JAR file.
JAR phải được khai báo trong classpath:
 Thêm jar file to vào IDE project
 Thêm JAR file vào CLASSPATH
CLASSPATH = /my/path/mysql-connector.jar;.
 Thêm JAR sử dụng Java command line:
java -cp /my/path/mysql-connector.jar ...
 Đặt JAR file vào JRE/lib/ext directory:
C:/java/jre1.6.0/lib/ext/mysql-
connector.jar
Cách nạp Database Driver?
DriverManager nạp registered database driver:
1. Tự động đối với type 4 & 5.
2. Load the driver class trong chương trình:
Class.forName("com.mysql.jdbc.Driver");
3. Thêm thuộc tính jdbc.drivers
System.setProperty("jdbc.drivers",
"com.mysql.jdbc.Driver");
1. Xác định thuộc tính jdbc.drivers trong command
line:
java -Djdbc.drivers="com.mysql.jdbc.Driver" ...
JDBC API
Các bước làm việc với CSDL
 Bước 1: nạp JDBC driver
 Bước 2: tạo kết nối với CSDL dùng driver đã nạp ở bước 1
 Bước 3: thao tác với CSDL
Các bước làm việc với CSDL
Các bước làm việc với CSDL
creates Statements
for database actions
selects a specific Connection type
and instantiates it
 DriverManager - Nạp các JDBC driver vào trong bộ nhớ. Có
thể sử dụng nó để mở các kết nối tới một nguồn dữ liệu.
 Connection - Biểu thị một kết nối đến một nguồn dữ liệu. Được
dùng để tạo ra các đối tượng Statement, PreparedStatement và
CallableStatement.
 Statement - Biểu diễn một lệnh SQL tĩnh. Có thể sử dụng nó
để thu về đối tượng ResultSet.
 PreparedStatement - Một giải pháp thay thế hoạt động tốt
hơn đối tượng Statement, thực thi một câu lệnh SQL đã được
biên dịch trước.
Một số lớp và phương thức cơ bản
JDBC Code
static final String URL = "jdbc:mysql://dbserver/world";
static final String USER = "student";
static final String PASSWORD = "secret";
//Load driver
Class.forName(“JDBC-DriverName”);
// 1. Get a Connection to the database.
Connection connection =
DriverManager.getConnection( URL, USER, PASSWORD );
// 2. Create a Statement
Statement statement = connection.createStatement();
// 3. Execute the Statement with SQL command.
ResultSet rs = statement.executeQuery("SELECT * FROM ...");
// 4. Use the Result.
while ( rs.next( ) ) {
String name = rs.getString("name");
Kết nối CSDL với JDBC
 java.sql.Connection là giao diện chuẩn
để kết nối đến các hệ QTCSDL.
 Mỗi hệ QTCSDL sẽ phải cài đặt interface này.
 MySQL driver
mysql-connector-java-5.1.7-bin.jar
 Derby driver
 DB2 driver
 DriverManager dùng để chọn driver và
thiết lập kết nối.
JDBC URLJDBC URL
 Chỉ định nguồn dữ liệu sẽ kết nối
jdbc:<subprotocol>:<dsn>:<others>
Trong đó:Trong đó:
 <subprotocol><subprotocol>:: được dùng để xác định trình điều khiển đểđược dùng để xác định trình điều khiển để
kết nối với CSDL.kết nối với CSDL.
 <dsn><dsn>:: địa chỉ CSDL. Cú pháp củađịa chỉ CSDL. Cú pháp của <dsn><dsn> phụ thuộc vàophụ thuộc vào
từng trình điều khiển cụ thể.từng trình điều khiển cụ thể.
 <other><other>:: các tham số kháccác tham số khác
Ví dụ:Ví dụ:
 jdbc:odbc:dbnamejdbc:odbc:dbname là URL để kết nối với CSDL tên dbnamelà URL để kết nối với CSDL tên dbname
sử dụng cầu nối ODBC.sử dụng cầu nối ODBC.
 jdbc:microsoft:sqlserver://hostname:1433jdbc:microsoft:sqlserver://hostname:1433 là URL để kết nốilà URL để kết nối
với CSDL Microsoft SQL Server. Trong đó hostname là tênvới CSDL Microsoft SQL Server. Trong đó hostname là tên
máy cài SQL Server.máy cài SQL Server.
23
RDBMS Database URL format
MySQL jdbc:mysql://hostname:portNumber/databaseName
ORACLE jdbc:oracle:thin:@hostname:portNumber:databaseName
DB2 jdbc:db2:hostname:portNumber/databaseName
Java DB/Apache Derby jdbc:derby:dataBaseName (embedded)
jdbc:derby://hostname:portNumber/databaseName (network)
Microsoft SQL Server jdbc:sqlserver://hostname:portNumber;databaseName=dataBaseName
Sybase jdbc:sybase:Tds:hostname:portNumber/databaseName
Fig. 25.24 | Popular JDBC database URL formats.
Database URL
String DB_URL = "jdbc:mysql://dbserver:3306/world";
Địnnh dạng chung của database URL:
Protocol Sub-protocol Hostname Port DatabaseName
 Port là TCP port mà hệ QTCSDL sử dụng để lắng nghe yêu cầu.
 3306 is the default port for MySQL
 Sử dụng "localhost" nếu CSDL nằm cùng 1 máy.
Database URL
Ví dụ:
"jdbc:mysql://localhost:3306/world"
"jdbc:mysql://localhost/world"
"jdbc:mysql:///world"
"jdbc:mysql:/world"
hostname và port là tùy chọn.
Đối với MySQL driver: defaults là localhost và port 3306
Kết nối CSDL với JDBC
DriverManager
getConnection( url, user,
passwd) : Connection
<<interface>>
Connection
createStatement(): Statement
close( )
isClosed( ): boolean
getCatalog( ): String
MySqlConnection
creates
url = "jdbc:mysql://hostname/database"
HSQLConnection
Thi hành SQL Commands
 Để thi hành SQL command sử dụng pt
createStatement của đối tượng Connection.
 Statement interface định nghĩa các phương
thức để thi hành câu lệnh SQL.
Statement statement = connection.createStatement( );
// execute an UPDATE command
int count = statement.executeUpdate( "UPDATE City
SET population=30000 WHERE name='Bangsaen'" );
System.out.println("Modified " + count + " records");
Thì hành câu lệnh SQL
 Câu lệnh statement.executeQuery( ) trả về 1
ResultSet.
 ResultSet là bảng chứa kết quả trả về của SQL.
Statement statement = connection.createStatement();
// execute a SELECT command
ResultSet rs = statement.executeQuery(
"SELECT * FROM city WHERE id = "+id );
rs.first(); // scroll to first result
do {
String name = rs.getString(1); // get by position
int population = rs.getInt("population"); // by name
...
} while( rs.next() );
Ví dụ:
Scanner console = new Scanner(System.in);
System.out.print("Name of city to find? ");
String name = console.nextLine().trim();
String query =
"SELECT * FROM city WHERE Name='"
+name+ "'";
ResultSet rs = statement.executeQuery( query
);
ResultSet Methods
 ResultSet chứa các "row" trả về từ câu query.
 ResultSet hỗ trợ các phương thức để lấy dữ liệu từ
cột:
 "get" by column number -- starts at 1 (not 0)!
 "get" by column name -- field names in table/query.
String query = "SELECT * FROM Country WHERE ...";
ResultSet rs = statement.executeQuery( query );
// go to first row of results
rs.first( );
// display the values
System.out.println( rs.getString( 1 ) );
System.out.println( rs.getInt( "population" ) );
get by column number
get by name
ResultSet Methods
go to next row of results. "false" if no more.
go to previous row. "false" if 1st result.
go to first row of results.
go to last row of results.
go to k-th row of results.
get int value of field "name"
get int value of k-th column in a record
ResultSet
next() : boolean
previous() : boolean
first() : boolean
last() : boolean
absolute( k )
getInt( name: String )
getInt( index: int )
...
 ResultSet hỗ trợ các phương thức để lấy
từng dòng và cột trong kết quả trả về
ResultSet Methods for Getting
Data
ResultSet "get" methods return column data:
getLong( 3 ) : get by column index (most efficient)
getLong( "population" ) : get by field name (safest)
getInt( ), getLong( ) - get Integer field value
getFloat( ), getDouble() - get floating pt. value
getString( ) - get Char or Varchar field value
getDate( ) - get Date or Timestamp field value
getBoolean( ) - get a Bit field value
getBytes( ) - get Binary data
getBigDecimal( ) - get Decimal field as BigDecimal
getBlob( ) - get Binary Large Object
getObject( ) - get any field value
Thi hành câu lệnh SQL Commands
Statement interface định nghĩa nhiều phương thức
Resultset rs =
statement.executeQuery("SELECT ...");
 use for statements that return data values (SELECT)
int count =
statement.executeUpdate("UPDATE ...");
 use for INSERT, UPDATE, and DELETE
boolean b =
statement.execute("DROP TABLE test");
 use to execute any SQL statement(s)
Các bước làm việc với CSDL
 Thao tác với CSDL:
Ví dụ minh họa – JDBC ODBC
…
Connection myCon;
Statement myStatement;
ResultSet myResultSet;
String sUsername, sPassword;
try {
Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);
myCon = DriverManager.getConnection("jdbc:odbc:ThuchanhJ2EE", "", "");
myStatement = myCon.createStatement();
myResultSet = myStatement.executeQuery("Select * from Account");
Ví dụ minh họa - JDBC ODBC
while (myResultSet.next()) {
sUsername = myResultSet.getString(1);
sPassword = myResultSet.getString(2);
if (sUsername.equals("admin") && sPassword.equals("admin"))
return true;
}
myResultSet.close(); myStatement.close(); myCon.close();
}
catch(Exception e) {
System.out.println(e.toString());
}
JDBC Driver SQL Server 2000
…
Connection myCon;
Try {
// JDBC Driver for SQL Server 2000
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
myCon = DriverManager.getConnection("jdbc:microsoft:sqlserver://hntin:1433;
DatabaseName=ThuchanhJ2EE; User=sa; Password=sa");
…
}
catch (Exception e) {
…
}
JDBC Driver SQL Server 2000
 Lưu ý:
 Cần cài đặt SQL Server Service Pack 4 trước khi dùng
JDBC Driver kết nối trực tiếp đến SQL Server
 Kiểm tra xem cổng 1433 của SQL Server đã mở chưa bằng
cách vào cửa sổ dòng lệnh gõ telnet <hostname> 1433
39
PreparedStatement
 Đối tượng PreparedStatement chứa 1 câu
lệnh SQL đã được biên dịch trước.
 Khi thực thi DBMS không cần phải biên dịch câu
lệnh SQL.
 Thường được dùng với các câu lệnh SQL có
tham số.
PreparedStatements
 Được tạo ra từ đối tượng Connection.
 Ví dụ đối tượng PreparedStatement có chứa 2 tham
số:
“SELECT lastName, firstName, title ” +
“FROM authors, titles, authorISBN ” +
“WHERE authors.authorID = authorISBN.authorID ” +
“AND titles.ISBN = authorISBN.isbn AND ” +
“lastName = ? AND firstName = ?” );
41
Cung cấp giá trị cho tham số của
PreparedStatement
 Trước khi thi hành, chúng ta cần cung cấp
giá trị cho tham số trong đối tượng
PreparedStatement.
 Thực hiện thông qua các phương thức
setXXX.
 authorBooks.setString( 1, “Deitel” );
 authorBooks.setString( 2, “Paul” );
42
Ví dụ
Lớp Quản Lý DB Connection
Tạo lớp ConnectionManager with a static factory
method ConnectionManager
- connection : Connection
+getConnection( ) : Connection
+close( ) : void
// example how to use
Statement statement =
ConnectionManager.getConnection().createStatement( );
Simple version of manager (1)
public class ConnectionManager {
// literal constants in Java code is baaaad code.
// we will change to a configuration file later.
private static String driver = "com.mysql.jdbc.Driver";
private static String url = "jdbc:mysql://hostname/world";
private static String user = "student";
private static String password = "student";
/* a single shared database connection */
private static Connection connection = null;
private ConnectionManager() { /* no object creation */ }
Simple version of
ConnectionManager (2)
/* the public accessor uses lazy instantiation */
public static Connection getConnection( ) throws ... {
if ( connection == null ) connection = makeConnection();
return connection;
}
Simple version of
ConnectionManager (2)
private static Connection makeConnection( )
throws SQLException {
try {
Class.forName( driver );
// load the database driver class
connection = DriverManager.getConnection(
url, user, password );
} catch ( FileNotFoundException ex ) {
logger.error("connection error", ex ); // Logging
throw new SQLException( ex );
}
}
/* the public accessor uses lazy instantiation */
public static Connection getConnection( ) throws ... {
if ( connection == null ) connection = makeConnection();
return connection;
}
ResultSet
 ResultSet gắn kết với 1 statement và 1 connection.
 Nếu statement or connection bị đóng, kết quả sẽ
mất
 Nếu thi hành câu query khác, kết quả mất
 ResultSet thay đổi sau khi thi hành câu query
 ResultSet có thể cập nhật database
Statement stmt = connection.createStatement(
ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE );
ResultSet rs = statement.executeQuery( query );
ResultSet cập nhật database
 Xác định thuộc tính
ResultSet.CONCUR_UPDATABLE khi tạo Statement.
 Đòi hỏi sự hỗ trợ của database driver
// rs is scrollable, will not show changes made
// by others, and will be updatable
Statement statement = connection.createStatement(
ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_UPDATABLE );
ResultSet rs = statement.executeQuery( query );
rs.next();
int population = rs.getInt("population");
// add 10,000 to the population
rs.updateInt( "population", population+10000 );
rs.updateRow( );
JTable
 Swing object hiển thị dữ liệu dưới dạng bảng.
A JTable
JTable Class Diagram
 JTable hiển thị kết quả trả về bỡi TableModel.
JTable TableModel
describes data in the
table
AbstractTableModel
getColumnCount( ) : int
getColumnName( index ) : String
getColumnClass( index ) : Class
getRowCount( ) : int
getValueAt( row, col ) : Object
Design a TableModel for Queries
 Design a TableModel to manage a ResultSet
JTable ResultSetTableModel
ResultSetTableModel(statement)
runQuery( query : String )
AbstractTableModel
getColumnCount( ) : int
getColumnName( index ) : String
getColumnClass( index ) : Class
getRowCount( ) : int
getValueAt( row, col ) : Object
Cài đặt TableModel
 ResultSet chưa dữ liệu cần hiển thị.
class ResultSetTableModel extends AbstractTableModel {
private Statement statement;
private ResultSet rs;
public Object getValueAt(int row, int col) {
if ( rs == null ) return null;
rs.absolute( row + 1 );
rs.getObject( col );
}
public int getRowCount() {
if ( rs == null ) return 0;
rs.last(); // move to last row
rowCount = rs.getRow();
return rowCount;
}
Implementing TableModel (2)
 ResultSet is missing some information.
public int getColumnCount( ) {
}
public String getColumnName( int col ) {
}
ResultSet Meta-data
 ResultSet có getMetaData( )trả về các
thông tin.
 ResultSetMetaData chứa thông tin miêu tả.
try {
ResultSet resultSet =
statement.executeQuery( query );
ResultSetMetaData metadata = resultSet.getMetaData();
int numberOfColumns = metadata.getColumnCount();
for(int col=1; col<=numberOfColumns; col++) {
// get name and SQL datatype for each column
String name = metadata.getColumnName( col );
int type = metadata.getColumnType( col );
int typeName = metadata.getColumnTypeName( col );
} catch( SQLException sqle ) { ... }
Closing the Connection
 Khuyến cáo nên đóng connection sau khi
hoàn tất
Connection connection = DriverManager.getConnection(...);
/* use the database */
...
/* done using database */
public void close( ) {
if ( connection == null ) return;
try {
connection.close();
}
catch ( SQLException sqle ) { /* ignore it */ }
finally { connection = null; }
}

Mais conteúdo relacionado

Mais procurados

Quản trị dự án công nghệ thông tin
Quản trị dự án công nghệ thông tinQuản trị dự án công nghệ thông tin
Quản trị dự án công nghệ thông tinAnh Dam
 
chuong 3. quan he
chuong 3. quan hechuong 3. quan he
chuong 3. quan hekikihoho
 
Báo cáo đồ án tốt nghiệp "Ứng dụng trí tuệ nhân tạo nhận dạng chữ viết tay xâ...
Báo cáo đồ án tốt nghiệp "Ứng dụng trí tuệ nhân tạo nhận dạng chữ viết tay xâ...Báo cáo đồ án tốt nghiệp "Ứng dụng trí tuệ nhân tạo nhận dạng chữ viết tay xâ...
Báo cáo đồ án tốt nghiệp "Ứng dụng trí tuệ nhân tạo nhận dạng chữ viết tay xâ...The Boss
 
Đề tài: Tác động của mạng xã hội Facebook đối với học sinh trung học cơ sở
Đề tài: Tác động của mạng xã hội Facebook đối với học sinh trung học cơ sởĐề tài: Tác động của mạng xã hội Facebook đối với học sinh trung học cơ sở
Đề tài: Tác động của mạng xã hội Facebook đối với học sinh trung học cơ sởViết thuê trọn gói ZALO 0934573149
 
Bài giảng kiến trúc máy tính
Bài giảng kiến trúc máy tínhBài giảng kiến trúc máy tính
Bài giảng kiến trúc máy tínhCao Toa
 
Bài tiểu luận Kỹ năng thuyết trình - Học viện công nghệ bưu chính viễn thông
Bài tiểu luận Kỹ năng thuyết trình - Học viện công nghệ bưu chính viễn thôngBài tiểu luận Kỹ năng thuyết trình - Học viện công nghệ bưu chính viễn thông
Bài tiểu luận Kỹ năng thuyết trình - Học viện công nghệ bưu chính viễn thôngHuyen Pham
 
Giáo trình bảo mật thông tin
Giáo trình bảo mật thông tinGiáo trình bảo mật thông tin
Giáo trình bảo mật thông tinjackjohn45
 
Cơ sở dữ liệu phân tán - phạm thế quế
Cơ sở dữ liệu phân tán - phạm thế quếCơ sở dữ liệu phân tán - phạm thế quế
Cơ sở dữ liệu phân tán - phạm thế quếTran Tien
 
Báo cáo đồ án đề tài xây dựng trợ lý ảo bằng python
Báo cáo đồ án đề tài xây dựng trợ lý ảo bằng pythonBáo cáo đồ án đề tài xây dựng trợ lý ảo bằng python
Báo cáo đồ án đề tài xây dựng trợ lý ảo bằng pythonjackjohn45
 
Bài giảng cơ sở dữ liệu
Bài giảng cơ sở dữ liệuBài giảng cơ sở dữ liệu
Bài giảng cơ sở dữ liệutrieulongweb
 
12.ma trận và dịnh thức
12.ma trận và dịnh thức12.ma trận và dịnh thức
12.ma trận và dịnh thứcTrinh Yen
 
Bài 2: Các khái niệm trong CSDL quan hệ - Giáo trình FPT
Bài 2: Các khái niệm trong CSDL quan hệ - Giáo trình FPTBài 2: Các khái niệm trong CSDL quan hệ - Giáo trình FPT
Bài 2: Các khái niệm trong CSDL quan hệ - Giáo trình FPTMasterCode.vn
 
Hướng dẫn lập trình quản lý c#
Hướng dẫn lập trình quản lý c#Hướng dẫn lập trình quản lý c#
Hướng dẫn lập trình quản lý c#An Nguyen
 
chuong 1. co so logic
chuong 1. co so logicchuong 1. co so logic
chuong 1. co so logickikihoho
 
Quan điểm sáng tạo của hồ chí minh về cách mạng giải phóng dân tộc
Quan điểm sáng tạo của hồ chí minh về cách mạng giải phóng dân tộcQuan điểm sáng tạo của hồ chí minh về cách mạng giải phóng dân tộc
Quan điểm sáng tạo của hồ chí minh về cách mạng giải phóng dân tộcFørgët Løvë
 
Quản lý dự án
Quản lý dự ánQuản lý dự án
Quản lý dự ánTran Tien
 
Slide Bao Cao Thuc Tap
Slide Bao Cao Thuc TapSlide Bao Cao Thuc Tap
Slide Bao Cao Thuc Tapthanhhauuit
 

Mais procurados (20)

Quản trị dự án công nghệ thông tin
Quản trị dự án công nghệ thông tinQuản trị dự án công nghệ thông tin
Quản trị dự án công nghệ thông tin
 
chuong 3. quan he
chuong 3. quan hechuong 3. quan he
chuong 3. quan he
 
Báo cáo đồ án tốt nghiệp "Ứng dụng trí tuệ nhân tạo nhận dạng chữ viết tay xâ...
Báo cáo đồ án tốt nghiệp "Ứng dụng trí tuệ nhân tạo nhận dạng chữ viết tay xâ...Báo cáo đồ án tốt nghiệp "Ứng dụng trí tuệ nhân tạo nhận dạng chữ viết tay xâ...
Báo cáo đồ án tốt nghiệp "Ứng dụng trí tuệ nhân tạo nhận dạng chữ viết tay xâ...
 
Luận văn tốt nghiệp: Khai phá dữ liệu với R, HAY
Luận văn tốt nghiệp: Khai phá dữ liệu với R, HAYLuận văn tốt nghiệp: Khai phá dữ liệu với R, HAY
Luận văn tốt nghiệp: Khai phá dữ liệu với R, HAY
 
Đề tài: Tác động của mạng xã hội Facebook đối với học sinh trung học cơ sở
Đề tài: Tác động của mạng xã hội Facebook đối với học sinh trung học cơ sởĐề tài: Tác động của mạng xã hội Facebook đối với học sinh trung học cơ sở
Đề tài: Tác động của mạng xã hội Facebook đối với học sinh trung học cơ sở
 
Bài giảng kiến trúc máy tính
Bài giảng kiến trúc máy tínhBài giảng kiến trúc máy tính
Bài giảng kiến trúc máy tính
 
Bài tiểu luận Kỹ năng thuyết trình - Học viện công nghệ bưu chính viễn thông
Bài tiểu luận Kỹ năng thuyết trình - Học viện công nghệ bưu chính viễn thôngBài tiểu luận Kỹ năng thuyết trình - Học viện công nghệ bưu chính viễn thông
Bài tiểu luận Kỹ năng thuyết trình - Học viện công nghệ bưu chính viễn thông
 
Giáo trình bảo mật thông tin
Giáo trình bảo mật thông tinGiáo trình bảo mật thông tin
Giáo trình bảo mật thông tin
 
Cơ sở dữ liệu phân tán - phạm thế quế
Cơ sở dữ liệu phân tán - phạm thế quếCơ sở dữ liệu phân tán - phạm thế quế
Cơ sở dữ liệu phân tán - phạm thế quế
 
Báo cáo đồ án đề tài xây dựng trợ lý ảo bằng python
Báo cáo đồ án đề tài xây dựng trợ lý ảo bằng pythonBáo cáo đồ án đề tài xây dựng trợ lý ảo bằng python
Báo cáo đồ án đề tài xây dựng trợ lý ảo bằng python
 
Bài giảng cơ sở dữ liệu
Bài giảng cơ sở dữ liệuBài giảng cơ sở dữ liệu
Bài giảng cơ sở dữ liệu
 
12.ma trận và dịnh thức
12.ma trận và dịnh thức12.ma trận và dịnh thức
12.ma trận và dịnh thức
 
Bài 2: Các khái niệm trong CSDL quan hệ - Giáo trình FPT
Bài 2: Các khái niệm trong CSDL quan hệ - Giáo trình FPTBài 2: Các khái niệm trong CSDL quan hệ - Giáo trình FPT
Bài 2: Các khái niệm trong CSDL quan hệ - Giáo trình FPT
 
Hướng dẫn lập trình quản lý c#
Hướng dẫn lập trình quản lý c#Hướng dẫn lập trình quản lý c#
Hướng dẫn lập trình quản lý c#
 
Cac lenh trong matlab
Cac lenh trong matlabCac lenh trong matlab
Cac lenh trong matlab
 
chuong 1. co so logic
chuong 1. co so logicchuong 1. co so logic
chuong 1. co so logic
 
Đề tài: Nghiên cứu thuật toán K-nearest neighbor, HAY, 9đ
Đề tài: Nghiên cứu thuật toán K-nearest neighbor, HAY, 9đĐề tài: Nghiên cứu thuật toán K-nearest neighbor, HAY, 9đ
Đề tài: Nghiên cứu thuật toán K-nearest neighbor, HAY, 9đ
 
Quan điểm sáng tạo của hồ chí minh về cách mạng giải phóng dân tộc
Quan điểm sáng tạo của hồ chí minh về cách mạng giải phóng dân tộcQuan điểm sáng tạo của hồ chí minh về cách mạng giải phóng dân tộc
Quan điểm sáng tạo của hồ chí minh về cách mạng giải phóng dân tộc
 
Quản lý dự án
Quản lý dự ánQuản lý dự án
Quản lý dự án
 
Slide Bao Cao Thuc Tap
Slide Bao Cao Thuc TapSlide Bao Cao Thuc Tap
Slide Bao Cao Thuc Tap
 

Destaque

Lớp kết nối csdl dùng jdbc trong java
Lớp kết nối csdl dùng jdbc trong javaLớp kết nối csdl dùng jdbc trong java
Lớp kết nối csdl dùng jdbc trong javaANHMATTROI
 
Core java 6
Core java 6Core java 6
Core java 6. .
 
Core java 8
Core java 8Core java 8
Core java 8. .
 
Ky thuat l.trinh_java
Ky thuat l.trinh_javaKy thuat l.trinh_java
Ky thuat l.trinh_javaLam Man
 
Core java 5
Core java 5Core java 5
Core java 5. .
 
Bai10 he thong bao ve bao mat
Bai10   he thong bao ve bao matBai10   he thong bao ve bao mat
Bai10 he thong bao ve bao matVũ Sang
 
Core java 1
Core java 1Core java 1
Core java 1. .
 
Core java 9
Core java 9Core java 9
Core java 9. .
 
Core java 7
Core java 7Core java 7
Core java 7. .
 
Core java 2
Core java 2Core java 2
Core java 2. .
 
Core java 3
Core java 3Core java 3
Core java 3. .
 
Core java 4
Core java 4Core java 4
Core java 4. .
 
Core java 10
Core java 10Core java 10
Core java 10. .
 
Bài 3: Cấu trúc chương trình
Bài 3: Cấu trúc chương trìnhBài 3: Cấu trúc chương trình
Bài 3: Cấu trúc chương trìnhindochinasp
 
Nguyen le hien duyen tin hoc 11 - bai 3 - cau truc chuong trinh
Nguyen le hien duyen   tin hoc 11 - bai 3 - cau truc chuong trinhNguyen le hien duyen   tin hoc 11 - bai 3 - cau truc chuong trinh
Nguyen le hien duyen tin hoc 11 - bai 3 - cau truc chuong trinhSP Tin K34
 
Exceptions ref
Exceptions refExceptions ref
Exceptions ref. .
 
Giáo Trình Java Cơ Bản ( Vietnamese)
Giáo Trình Java Cơ Bản ( Vietnamese)Giáo Trình Java Cơ Bản ( Vietnamese)
Giáo Trình Java Cơ Bản ( Vietnamese)Đông Lương
 
Lập trình hướng đối tượng với Java - Trần Đình Quế
Lập trình hướng đối tượng với Java  - Trần Đình QuếLập trình hướng đối tượng với Java  - Trần Đình Quế
Lập trình hướng đối tượng với Java - Trần Đình Quếf3vthd
 

Destaque (20)

Lớp kết nối csdl dùng jdbc trong java
Lớp kết nối csdl dùng jdbc trong javaLớp kết nối csdl dùng jdbc trong java
Lớp kết nối csdl dùng jdbc trong java
 
Core java 6
Core java 6Core java 6
Core java 6
 
Core java 8
Core java 8Core java 8
Core java 8
 
Ky thuat l.trinh_java
Ky thuat l.trinh_javaKy thuat l.trinh_java
Ky thuat l.trinh_java
 
Core java 5
Core java 5Core java 5
Core java 5
 
Bai10 he thong bao ve bao mat
Bai10   he thong bao ve bao matBai10   he thong bao ve bao mat
Bai10 he thong bao ve bao mat
 
Core java 1
Core java 1Core java 1
Core java 1
 
Core java 9
Core java 9Core java 9
Core java 9
 
Laptrinh java
Laptrinh javaLaptrinh java
Laptrinh java
 
Java2 studyguide 2012
Java2 studyguide 2012Java2 studyguide 2012
Java2 studyguide 2012
 
Core java 7
Core java 7Core java 7
Core java 7
 
Core java 2
Core java 2Core java 2
Core java 2
 
Core java 3
Core java 3Core java 3
Core java 3
 
Core java 4
Core java 4Core java 4
Core java 4
 
Core java 10
Core java 10Core java 10
Core java 10
 
Bài 3: Cấu trúc chương trình
Bài 3: Cấu trúc chương trìnhBài 3: Cấu trúc chương trình
Bài 3: Cấu trúc chương trình
 
Nguyen le hien duyen tin hoc 11 - bai 3 - cau truc chuong trinh
Nguyen le hien duyen   tin hoc 11 - bai 3 - cau truc chuong trinhNguyen le hien duyen   tin hoc 11 - bai 3 - cau truc chuong trinh
Nguyen le hien duyen tin hoc 11 - bai 3 - cau truc chuong trinh
 
Exceptions ref
Exceptions refExceptions ref
Exceptions ref
 
Giáo Trình Java Cơ Bản ( Vietnamese)
Giáo Trình Java Cơ Bản ( Vietnamese)Giáo Trình Java Cơ Bản ( Vietnamese)
Giáo Trình Java Cơ Bản ( Vietnamese)
 
Lập trình hướng đối tượng với Java - Trần Đình Quế
Lập trình hướng đối tượng với Java  - Trần Đình QuếLập trình hướng đối tượng với Java  - Trần Đình Quế
Lập trình hướng đối tượng với Java - Trần Đình Quế
 

Semelhante a Laptrinh jdbc

2.gioi thieu co ban ado.net cho nguoi lap trinh c#
2.gioi thieu co ban ado.net cho nguoi lap trinh c#2.gioi thieu co ban ado.net cho nguoi lap trinh c#
2.gioi thieu co ban ado.net cho nguoi lap trinh c#Dao Uit
 
Bài 4: Lập trình với CSDL ADO.NET & Kiến trúc không kết nối & Lập trình giao ...
Bài 4: Lập trình với CSDL ADO.NET & Kiến trúc không kết nối & Lập trình giao ...Bài 4: Lập trình với CSDL ADO.NET & Kiến trúc không kết nối & Lập trình giao ...
Bài 4: Lập trình với CSDL ADO.NET & Kiến trúc không kết nối & Lập trình giao ...MasterCode.vn
 
Các bước kết nối csdl my sql với java
Các bước kết nối csdl my sql với javaCác bước kết nối csdl my sql với java
Các bước kết nối csdl my sql với javaBrand Xanh
 
Java thegioiebook 3216
Java thegioiebook 3216Java thegioiebook 3216
Java thegioiebook 3216Đinh Luận
 
Lap trinhcosodulieuvoi c-sharp_phan-1
Lap trinhcosodulieuvoi c-sharp_phan-1Lap trinhcosodulieuvoi c-sharp_phan-1
Lap trinhcosodulieuvoi c-sharp_phan-1Hiển Phùng
 
Bài 5: Làm quen với lập trình CSDL ASP.NET - Giáo trình FPT - Có ví dụ kèm theo
Bài 5: Làm quen với lập trình CSDL ASP.NET - Giáo trình FPT - Có ví dụ kèm theoBài 5: Làm quen với lập trình CSDL ASP.NET - Giáo trình FPT - Có ví dụ kèm theo
Bài 5: Làm quen với lập trình CSDL ASP.NET - Giáo trình FPT - Có ví dụ kèm theoMasterCode.vn
 
Hoc sql server 2000
Hoc sql server 2000Hoc sql server 2000
Hoc sql server 2000phamhuuai
 
Tailieu.vncty.com giao-trinh-sql-2000
Tailieu.vncty.com   giao-trinh-sql-2000Tailieu.vncty.com   giao-trinh-sql-2000
Tailieu.vncty.com giao-trinh-sql-2000Trần Đức Anh
 
Spring mvc
Spring mvcSpring mvc
Spring mvcBa Big
 
Trong bài viết hôm nay
Trong bài viết hôm nayTrong bài viết hôm nay
Trong bài viết hôm nayledoanduc
 
Bài 1: Làm quen với SQL Server 2008 - Giáo trình FPT
Bài 1: Làm quen với SQL Server 2008 - Giáo trình FPTBài 1: Làm quen với SQL Server 2008 - Giáo trình FPT
Bài 1: Làm quen với SQL Server 2008 - Giáo trình FPTMasterCode.vn
 
Bai 1 lam quen voi sql 2008
Bai 1 lam quen voi sql 2008Bai 1 lam quen voi sql 2008
Bai 1 lam quen voi sql 2008Phương Nhung
 

Semelhante a Laptrinh jdbc (20)

Chapter9
Chapter9Chapter9
Chapter9
 
Chapter9
Chapter9Chapter9
Chapter9
 
2.gioi thieu co ban ado.net cho nguoi lap trinh c#
2.gioi thieu co ban ado.net cho nguoi lap trinh c#2.gioi thieu co ban ado.net cho nguoi lap trinh c#
2.gioi thieu co ban ado.net cho nguoi lap trinh c#
 
Bài 4: Lập trình với CSDL ADO.NET & Kiến trúc không kết nối & Lập trình giao ...
Bài 4: Lập trình với CSDL ADO.NET & Kiến trúc không kết nối & Lập trình giao ...Bài 4: Lập trình với CSDL ADO.NET & Kiến trúc không kết nối & Lập trình giao ...
Bài 4: Lập trình với CSDL ADO.NET & Kiến trúc không kết nối & Lập trình giao ...
 
Các bước kết nối csdl my sql với java
Các bước kết nối csdl my sql với javaCác bước kết nối csdl my sql với java
Các bước kết nối csdl my sql với java
 
Ung dung web chuong 6
Ung dung web  chuong 6Ung dung web  chuong 6
Ung dung web chuong 6
 
Java thegioiebook 3216
Java thegioiebook 3216Java thegioiebook 3216
Java thegioiebook 3216
 
Lap trinhcosodulieuvoi c-sharp_phan-1
Lap trinhcosodulieuvoi c-sharp_phan-1Lap trinhcosodulieuvoi c-sharp_phan-1
Lap trinhcosodulieuvoi c-sharp_phan-1
 
Aspnet 3.5 _02
Aspnet 3.5 _02Aspnet 3.5 _02
Aspnet 3.5 _02
 
Bài 5: Làm quen với lập trình CSDL ASP.NET - Giáo trình FPT - Có ví dụ kèm theo
Bài 5: Làm quen với lập trình CSDL ASP.NET - Giáo trình FPT - Có ví dụ kèm theoBài 5: Làm quen với lập trình CSDL ASP.NET - Giáo trình FPT - Có ví dụ kèm theo
Bài 5: Làm quen với lập trình CSDL ASP.NET - Giáo trình FPT - Có ví dụ kèm theo
 
Hoc sql server 2000
Hoc sql server 2000Hoc sql server 2000
Hoc sql server 2000
 
01 tong-quan-ado
01 tong-quan-ado01 tong-quan-ado
01 tong-quan-ado
 
Asp.net 3.5 _7
Asp.net 3.5 _7Asp.net 3.5 _7
Asp.net 3.5 _7
 
Tailieu.vncty.com giao-trinh-sql-2000
Tailieu.vncty.com   giao-trinh-sql-2000Tailieu.vncty.com   giao-trinh-sql-2000
Tailieu.vncty.com giao-trinh-sql-2000
 
Spring mvc
Spring mvcSpring mvc
Spring mvc
 
Tu hoc SQL 2000
Tu hoc SQL 2000Tu hoc SQL 2000
Tu hoc SQL 2000
 
Trong bài viết hôm nay
Trong bài viết hôm nayTrong bài viết hôm nay
Trong bài viết hôm nay
 
Bài 1: Làm quen với SQL Server 2008 - Giáo trình FPT
Bài 1: Làm quen với SQL Server 2008 - Giáo trình FPTBài 1: Làm quen với SQL Server 2008 - Giáo trình FPT
Bài 1: Làm quen với SQL Server 2008 - Giáo trình FPT
 
Bai 1 lam quen voi sql 2008
Bai 1 lam quen voi sql 2008Bai 1 lam quen voi sql 2008
Bai 1 lam quen voi sql 2008
 
Ch06
Ch06Ch06
Ch06
 

Laptrinh jdbc

  • 1. TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN KHOA CÔNG NGHỆ PHẦN MỀM LẬP TRÌNH JDBC (JAVA DATABASE CONNECTIVITY)
  • 2. NỘI DUNG  Khái niệm cơ bản  Kiến trúc JDBC & JDBC APIs  Các bước làm việc với Database dùng JDBC  Một số lớp và phương thức cơ bản trong JDBC API  Các loại JDBC Drivers  Ví dụ minh họa
  • 3. 3 Giới thiệu về JDBC  JDBC (Java DataBase Connectivity) là một thư việc chuẩn dùng để truy xuất các cơ sở dữ liệu như MS Acess, SQL Server, Oracle,… trong các ứng dụng Java bằng ngôn ngữ truy vấn SQL.  Các hàm truy xuất cơ sở dữ liệu với JDBC nằm trong gói java.sql.* CSDL JDBC JDBC CSDL JDBC
  • 4. Tại sao cần JDBC?  JDBC giúp các Java Developers tạo nên các ứng dụng truy xuất cơ sở dữ liệu mà không cần phải học và sử dụng các APIs do các công ty sản xuất phần mềm khác nhau bên thứ ba cung cấp. JDBC đảm bảo rằng bạn sẽ có thể phát triển nên các ứng dụng truy cập cơ sở dữ liệu có khả năng truy cập đến các RDBMS khác nhau bằng cách sử dụng các JDBC driver khác nhau.
  • 6.  JDBC API: là một API hoàn toàn dựa trên Java.  JDBC DriverManager: là trình quản lý JDBC giao tiếp trực tiếp với các trình điều khiển cơ sở dữ liệu cụ thể - giao tiếp thực sự với cơ sở dữ liệu.  Các RDBMS hay các nhà sản xuất phần mềm thứ 3 phát triển các drivers cho java đều phải tuân thủ đặc tả JDBC của SUN.  Các java developers dùng các JDBC drivers để phát triển các ứng dụng có truy cập, thao tác CSDL. Các khái niệm cơ bản
  • 7. JDBC Dirvers  Là một chương trình máy tính giúp truy cập đến các hệ DBMS khác nhau dùng kỹ thuật JDBC  Do các hãng xây dựng DBMS hoặc một đơn vị thứ 3 khác cung cấp. http://industry.java.sun.com/products/jdbc/drivers.
  • 8. Các loại JDBC Dirvers  JDBC-ODBC Bridge plus ODBC Driver  A native API partly Java technology-enabled driver  Pure Java Driver for Database Middleware  Direct-to-Database Pure Java Driver
  • 9. Các loại JDBC Dirvers Type 1: JDBC-ODBC Bridge DatabaseDatabase ODBC Driver ODBC Driver Java Applications Java Applications JDBC Driver Type 1JDBC Driver Type 1  JDBC-ODBC ủy nhiệm công việc truy cập dữ liệu cho ODBC API. Chúng là trình điều khiển chậm nhất trong số còn lại. Phương thức truy xuất dữ liệu đòi hỏi trình điều khiển ODBC được cài đặt trên máy tính client. JDBC-ODBC LibraryJDBC-ODBC Library
  • 10. Các loại JDBC Dirvers Type 2: Java to Native API DatabaseDatabase Database Library Database Library Java Applications Java Applications JDBC Driver Type 2JDBC Driver Type 2  Dùng Java Native API (JNI) để gọi đến các thư viện API của database. Khi đó sự chuyển đỗi này đặt trên máy client, một số mã nhị phân phải được cài đặt trên máy tính client.
  • 11. Các loại JDBC Dirvers Type 3: Java to Network Protocol Or All- Java Driver DatabaseDatabase JDBC Middleware (java) JDBC Middleware (java) Java Applications Java Applications JDBC Driver Type 3JDBC Driver Type 3  Dùng Network protocol để giao tiếp với JDBC middleware trên server. Chuyển đổi các lời gọi JDBC thành giao thức mạng độc lập với bất kỳ giao thức DBMS đặc thù. Sau đó, một phần mềm trung gian (middleware) chạy trên máy server chuyển đỗi giao thức mạng thành giao thức DBMS đặc thù. Sự chuyển này đặt ở phía server mà không đòi hỏi cài đặt trên máy tính client. Network protocol
  • 12. Các loại JDBC Dirvers Type 4: Java to Database Protocol DatabaseDatabase Java Applications Java Applications JDBC Driver Type 4JDBC Driver Type 4  Drivers thuần java và hiện thực/dùng database protocol để giao tiếp trực tiếp với CSDL. Thường là những JDBC drivers nhanh nhất. Chuyển lời gọi JDBC thành các lời gọi giao thức DBMS đặc thù.
  • 13. Cách nạp Database Driver? Driver được cài đặt trong JAR file. JAR phải được khai báo trong classpath:  Thêm jar file to vào IDE project  Thêm JAR file vào CLASSPATH CLASSPATH = /my/path/mysql-connector.jar;.  Thêm JAR sử dụng Java command line: java -cp /my/path/mysql-connector.jar ...  Đặt JAR file vào JRE/lib/ext directory: C:/java/jre1.6.0/lib/ext/mysql- connector.jar
  • 14. Cách nạp Database Driver? DriverManager nạp registered database driver: 1. Tự động đối với type 4 & 5. 2. Load the driver class trong chương trình: Class.forName("com.mysql.jdbc.Driver"); 3. Thêm thuộc tính jdbc.drivers System.setProperty("jdbc.drivers", "com.mysql.jdbc.Driver"); 1. Xác định thuộc tính jdbc.drivers trong command line: java -Djdbc.drivers="com.mysql.jdbc.Driver" ...
  • 16. Các bước làm việc với CSDL  Bước 1: nạp JDBC driver  Bước 2: tạo kết nối với CSDL dùng driver đã nạp ở bước 1  Bước 3: thao tác với CSDL
  • 17. Các bước làm việc với CSDL
  • 18. Các bước làm việc với CSDL creates Statements for database actions selects a specific Connection type and instantiates it
  • 19.  DriverManager - Nạp các JDBC driver vào trong bộ nhớ. Có thể sử dụng nó để mở các kết nối tới một nguồn dữ liệu.  Connection - Biểu thị một kết nối đến một nguồn dữ liệu. Được dùng để tạo ra các đối tượng Statement, PreparedStatement và CallableStatement.  Statement - Biểu diễn một lệnh SQL tĩnh. Có thể sử dụng nó để thu về đối tượng ResultSet.  PreparedStatement - Một giải pháp thay thế hoạt động tốt hơn đối tượng Statement, thực thi một câu lệnh SQL đã được biên dịch trước. Một số lớp và phương thức cơ bản
  • 20. JDBC Code static final String URL = "jdbc:mysql://dbserver/world"; static final String USER = "student"; static final String PASSWORD = "secret"; //Load driver Class.forName(“JDBC-DriverName”); // 1. Get a Connection to the database. Connection connection = DriverManager.getConnection( URL, USER, PASSWORD ); // 2. Create a Statement Statement statement = connection.createStatement(); // 3. Execute the Statement with SQL command. ResultSet rs = statement.executeQuery("SELECT * FROM ..."); // 4. Use the Result. while ( rs.next( ) ) { String name = rs.getString("name");
  • 21. Kết nối CSDL với JDBC  java.sql.Connection là giao diện chuẩn để kết nối đến các hệ QTCSDL.  Mỗi hệ QTCSDL sẽ phải cài đặt interface này.  MySQL driver mysql-connector-java-5.1.7-bin.jar  Derby driver  DB2 driver  DriverManager dùng để chọn driver và thiết lập kết nối.
  • 22. JDBC URLJDBC URL  Chỉ định nguồn dữ liệu sẽ kết nối jdbc:<subprotocol>:<dsn>:<others> Trong đó:Trong đó:  <subprotocol><subprotocol>:: được dùng để xác định trình điều khiển đểđược dùng để xác định trình điều khiển để kết nối với CSDL.kết nối với CSDL.  <dsn><dsn>:: địa chỉ CSDL. Cú pháp củađịa chỉ CSDL. Cú pháp của <dsn><dsn> phụ thuộc vàophụ thuộc vào từng trình điều khiển cụ thể.từng trình điều khiển cụ thể.  <other><other>:: các tham số kháccác tham số khác Ví dụ:Ví dụ:  jdbc:odbc:dbnamejdbc:odbc:dbname là URL để kết nối với CSDL tên dbnamelà URL để kết nối với CSDL tên dbname sử dụng cầu nối ODBC.sử dụng cầu nối ODBC.  jdbc:microsoft:sqlserver://hostname:1433jdbc:microsoft:sqlserver://hostname:1433 là URL để kết nốilà URL để kết nối với CSDL Microsoft SQL Server. Trong đó hostname là tênvới CSDL Microsoft SQL Server. Trong đó hostname là tên máy cài SQL Server.máy cài SQL Server.
  • 23. 23 RDBMS Database URL format MySQL jdbc:mysql://hostname:portNumber/databaseName ORACLE jdbc:oracle:thin:@hostname:portNumber:databaseName DB2 jdbc:db2:hostname:portNumber/databaseName Java DB/Apache Derby jdbc:derby:dataBaseName (embedded) jdbc:derby://hostname:portNumber/databaseName (network) Microsoft SQL Server jdbc:sqlserver://hostname:portNumber;databaseName=dataBaseName Sybase jdbc:sybase:Tds:hostname:portNumber/databaseName Fig. 25.24 | Popular JDBC database URL formats.
  • 24. Database URL String DB_URL = "jdbc:mysql://dbserver:3306/world"; Địnnh dạng chung của database URL: Protocol Sub-protocol Hostname Port DatabaseName  Port là TCP port mà hệ QTCSDL sử dụng để lắng nghe yêu cầu.  3306 is the default port for MySQL  Sử dụng "localhost" nếu CSDL nằm cùng 1 máy.
  • 25. Database URL Ví dụ: "jdbc:mysql://localhost:3306/world" "jdbc:mysql://localhost/world" "jdbc:mysql:///world" "jdbc:mysql:/world" hostname và port là tùy chọn. Đối với MySQL driver: defaults là localhost và port 3306
  • 26. Kết nối CSDL với JDBC DriverManager getConnection( url, user, passwd) : Connection <<interface>> Connection createStatement(): Statement close( ) isClosed( ): boolean getCatalog( ): String MySqlConnection creates url = "jdbc:mysql://hostname/database" HSQLConnection
  • 27. Thi hành SQL Commands  Để thi hành SQL command sử dụng pt createStatement của đối tượng Connection.  Statement interface định nghĩa các phương thức để thi hành câu lệnh SQL. Statement statement = connection.createStatement( ); // execute an UPDATE command int count = statement.executeUpdate( "UPDATE City SET population=30000 WHERE name='Bangsaen'" ); System.out.println("Modified " + count + " records");
  • 28. Thì hành câu lệnh SQL  Câu lệnh statement.executeQuery( ) trả về 1 ResultSet.  ResultSet là bảng chứa kết quả trả về của SQL. Statement statement = connection.createStatement(); // execute a SELECT command ResultSet rs = statement.executeQuery( "SELECT * FROM city WHERE id = "+id ); rs.first(); // scroll to first result do { String name = rs.getString(1); // get by position int population = rs.getInt("population"); // by name ... } while( rs.next() );
  • 29. Ví dụ: Scanner console = new Scanner(System.in); System.out.print("Name of city to find? "); String name = console.nextLine().trim(); String query = "SELECT * FROM city WHERE Name='" +name+ "'"; ResultSet rs = statement.executeQuery( query );
  • 30. ResultSet Methods  ResultSet chứa các "row" trả về từ câu query.  ResultSet hỗ trợ các phương thức để lấy dữ liệu từ cột:  "get" by column number -- starts at 1 (not 0)!  "get" by column name -- field names in table/query. String query = "SELECT * FROM Country WHERE ..."; ResultSet rs = statement.executeQuery( query ); // go to first row of results rs.first( ); // display the values System.out.println( rs.getString( 1 ) ); System.out.println( rs.getInt( "population" ) ); get by column number get by name
  • 31. ResultSet Methods go to next row of results. "false" if no more. go to previous row. "false" if 1st result. go to first row of results. go to last row of results. go to k-th row of results. get int value of field "name" get int value of k-th column in a record ResultSet next() : boolean previous() : boolean first() : boolean last() : boolean absolute( k ) getInt( name: String ) getInt( index: int ) ...  ResultSet hỗ trợ các phương thức để lấy từng dòng và cột trong kết quả trả về
  • 32. ResultSet Methods for Getting Data ResultSet "get" methods return column data: getLong( 3 ) : get by column index (most efficient) getLong( "population" ) : get by field name (safest) getInt( ), getLong( ) - get Integer field value getFloat( ), getDouble() - get floating pt. value getString( ) - get Char or Varchar field value getDate( ) - get Date or Timestamp field value getBoolean( ) - get a Bit field value getBytes( ) - get Binary data getBigDecimal( ) - get Decimal field as BigDecimal getBlob( ) - get Binary Large Object getObject( ) - get any field value
  • 33. Thi hành câu lệnh SQL Commands Statement interface định nghĩa nhiều phương thức Resultset rs = statement.executeQuery("SELECT ...");  use for statements that return data values (SELECT) int count = statement.executeUpdate("UPDATE ...");  use for INSERT, UPDATE, and DELETE boolean b = statement.execute("DROP TABLE test");  use to execute any SQL statement(s)
  • 34. Các bước làm việc với CSDL  Thao tác với CSDL:
  • 35. Ví dụ minh họa – JDBC ODBC … Connection myCon; Statement myStatement; ResultSet myResultSet; String sUsername, sPassword; try { Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”); myCon = DriverManager.getConnection("jdbc:odbc:ThuchanhJ2EE", "", ""); myStatement = myCon.createStatement(); myResultSet = myStatement.executeQuery("Select * from Account");
  • 36. Ví dụ minh họa - JDBC ODBC while (myResultSet.next()) { sUsername = myResultSet.getString(1); sPassword = myResultSet.getString(2); if (sUsername.equals("admin") && sPassword.equals("admin")) return true; } myResultSet.close(); myStatement.close(); myCon.close(); } catch(Exception e) { System.out.println(e.toString()); }
  • 37. JDBC Driver SQL Server 2000 … Connection myCon; Try { // JDBC Driver for SQL Server 2000 Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); myCon = DriverManager.getConnection("jdbc:microsoft:sqlserver://hntin:1433; DatabaseName=ThuchanhJ2EE; User=sa; Password=sa"); … } catch (Exception e) { … }
  • 38. JDBC Driver SQL Server 2000  Lưu ý:  Cần cài đặt SQL Server Service Pack 4 trước khi dùng JDBC Driver kết nối trực tiếp đến SQL Server  Kiểm tra xem cổng 1433 của SQL Server đã mở chưa bằng cách vào cửa sổ dòng lệnh gõ telnet <hostname> 1433
  • 39. 39 PreparedStatement  Đối tượng PreparedStatement chứa 1 câu lệnh SQL đã được biên dịch trước.  Khi thực thi DBMS không cần phải biên dịch câu lệnh SQL.  Thường được dùng với các câu lệnh SQL có tham số.
  • 40. PreparedStatements  Được tạo ra từ đối tượng Connection.  Ví dụ đối tượng PreparedStatement có chứa 2 tham số: “SELECT lastName, firstName, title ” + “FROM authors, titles, authorISBN ” + “WHERE authors.authorID = authorISBN.authorID ” + “AND titles.ISBN = authorISBN.isbn AND ” + “lastName = ? AND firstName = ?” );
  • 41. 41 Cung cấp giá trị cho tham số của PreparedStatement  Trước khi thi hành, chúng ta cần cung cấp giá trị cho tham số trong đối tượng PreparedStatement.  Thực hiện thông qua các phương thức setXXX.  authorBooks.setString( 1, “Deitel” );  authorBooks.setString( 2, “Paul” );
  • 43. Lớp Quản Lý DB Connection Tạo lớp ConnectionManager with a static factory method ConnectionManager - connection : Connection +getConnection( ) : Connection +close( ) : void // example how to use Statement statement = ConnectionManager.getConnection().createStatement( );
  • 44. Simple version of manager (1) public class ConnectionManager { // literal constants in Java code is baaaad code. // we will change to a configuration file later. private static String driver = "com.mysql.jdbc.Driver"; private static String url = "jdbc:mysql://hostname/world"; private static String user = "student"; private static String password = "student"; /* a single shared database connection */ private static Connection connection = null; private ConnectionManager() { /* no object creation */ }
  • 45. Simple version of ConnectionManager (2) /* the public accessor uses lazy instantiation */ public static Connection getConnection( ) throws ... { if ( connection == null ) connection = makeConnection(); return connection; }
  • 46. Simple version of ConnectionManager (2) private static Connection makeConnection( ) throws SQLException { try { Class.forName( driver ); // load the database driver class connection = DriverManager.getConnection( url, user, password ); } catch ( FileNotFoundException ex ) { logger.error("connection error", ex ); // Logging throw new SQLException( ex ); } } /* the public accessor uses lazy instantiation */ public static Connection getConnection( ) throws ... { if ( connection == null ) connection = makeConnection(); return connection; }
  • 47. ResultSet  ResultSet gắn kết với 1 statement và 1 connection.  Nếu statement or connection bị đóng, kết quả sẽ mất  Nếu thi hành câu query khác, kết quả mất  ResultSet thay đổi sau khi thi hành câu query  ResultSet có thể cập nhật database Statement stmt = connection.createStatement( ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE ); ResultSet rs = statement.executeQuery( query );
  • 48. ResultSet cập nhật database  Xác định thuộc tính ResultSet.CONCUR_UPDATABLE khi tạo Statement.  Đòi hỏi sự hỗ trợ của database driver // rs is scrollable, will not show changes made // by others, and will be updatable Statement statement = connection.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE ); ResultSet rs = statement.executeQuery( query ); rs.next(); int population = rs.getInt("population"); // add 10,000 to the population rs.updateInt( "population", population+10000 ); rs.updateRow( );
  • 49. JTable  Swing object hiển thị dữ liệu dưới dạng bảng. A JTable
  • 50. JTable Class Diagram  JTable hiển thị kết quả trả về bỡi TableModel. JTable TableModel describes data in the table AbstractTableModel getColumnCount( ) : int getColumnName( index ) : String getColumnClass( index ) : Class getRowCount( ) : int getValueAt( row, col ) : Object
  • 51. Design a TableModel for Queries  Design a TableModel to manage a ResultSet JTable ResultSetTableModel ResultSetTableModel(statement) runQuery( query : String ) AbstractTableModel getColumnCount( ) : int getColumnName( index ) : String getColumnClass( index ) : Class getRowCount( ) : int getValueAt( row, col ) : Object
  • 52. Cài đặt TableModel  ResultSet chưa dữ liệu cần hiển thị. class ResultSetTableModel extends AbstractTableModel { private Statement statement; private ResultSet rs; public Object getValueAt(int row, int col) { if ( rs == null ) return null; rs.absolute( row + 1 ); rs.getObject( col ); } public int getRowCount() { if ( rs == null ) return 0; rs.last(); // move to last row rowCount = rs.getRow(); return rowCount; }
  • 53. Implementing TableModel (2)  ResultSet is missing some information. public int getColumnCount( ) { } public String getColumnName( int col ) { }
  • 54. ResultSet Meta-data  ResultSet có getMetaData( )trả về các thông tin.  ResultSetMetaData chứa thông tin miêu tả. try { ResultSet resultSet = statement.executeQuery( query ); ResultSetMetaData metadata = resultSet.getMetaData(); int numberOfColumns = metadata.getColumnCount(); for(int col=1; col<=numberOfColumns; col++) { // get name and SQL datatype for each column String name = metadata.getColumnName( col ); int type = metadata.getColumnType( col ); int typeName = metadata.getColumnTypeName( col ); } catch( SQLException sqle ) { ... }
  • 55. Closing the Connection  Khuyến cáo nên đóng connection sau khi hoàn tất Connection connection = DriverManager.getConnection(...); /* use the database */ ... /* done using database */ public void close( ) { if ( connection == null ) return; try { connection.close(); } catch ( SQLException sqle ) { /* ignore it */ } finally { connection = null; } }