Articles by "JavaJDBC"
Hiển thị các bài đăng có nhãn JavaJDBC. Hiển thị tất cả bài đăng
no image
[Kết nối cơ sở dữ liệu trong Java với JDBC] Java JDBC là một Java API để kết nối và thực thi truy vấn với cơ sở dữ liệu. JDBC API sử dụng các JDBC Driver để kết nối với cơ sở dữ liệu. JDBC làm việc với Java trên nhiều nền tảng đa dạng như Windows, Mac OS, Unix, …
Để đáp ứng nhu cầu học tập và tìm hiểu về cách Java làm việc như thế nào với cơ sở dữ liệu, chúng tôi cung cấp loạt bài hướng dẫn về Java JDBC. Loạt bài hướng dẫn về Java JDBC này cung cấp đầy đủ các khái niệm và các kiến thức cơ bản về Java JDBC cho các lập trình viên Java mong muốn tìm hiểu về JDBC Framework cũng như cách sử dụng của nó.
Dưới đây là danh sách các bài hướng dẫn học Java JDBC cơ bản và nâng cao:
MỤC LỤC

JDBC cơ bản và nâng cao

  • Tổng quan về JDBC
  • Cài đặt JDBC
  • Giới thiệu JDBC Driver
  • Kiểu dữ liệu
  • Kết nối với Database (chung)
  • Kết nối với Oracle
  • Kết nối với MySQL
  • Tạo ứng dụng JDBC đơn giản
  • Lớp DriverManager
  • Connection Interface
  • Statement Interface
  • PreparedStatement Interface
  • CallableStatement Interface
  • ResultSet Interface
  • Di chuyển trong ResultSet
  • Quan sát ResultSet
  • Cập nhật ResultSet
  • ResultSetMetaData
  • DatabaseMetaData
  • RowSet Interface
  • Giới thiệu Transaction
  • Ví dụ Commit và Rollback
  • Ví dụ Savepoint
  • SQLException: Xử lý ngoại lệ
  • Ví dụ Batch Processing

Một số chương trình JDBC cơ bản


Để hiểu và thực hành các ví dụ được cung cấp trong bài, bạn cần hiểu rõ về Java cũng như có kiến thức cơ bản về một số ngôn ngữ truy vấn cơ sở dữ liệu, đặc biệt là SQL.
Nếu như bạn có bỏ quên vấn đề gì, bạn có thể tham khảo hai loạt bài hướng dẫn của chúng tôi về Java và SQL.
Hướng dẫn Java: Tìm hiểu về Java, một trong các ngôn ngữ lập trình mạnh mẽ nhất.
Hướng dẫn SQL: Bạn có thể tham khảo một số cú pháp SQL ở đây.
Loạt bài hướng dẫn được chia thành hai phần: phần đầu giới thiệu các lớp, Interface và một số khái niệm cơ bản bạn cần biết khi học về JDBC; phần thứ hai là về một số ví dụ về một số hoạt động cơ bản liên quan tới cơ sở dữ liệu như tạo, xóa cơ sở dữ liệu; tạo, xóa bảng; chèn, chọn, xóa, cập nhật bản ghi, …
Trong loạt bài hướng dẫn về JDBC này, mình sử dụng MySQL, do đó, trong các chương trình ví dụ trong bài, mình sử dụng root là username và 123456 là mật khẩu.
JDBC Driver chuyển đổi kiểu dữ liệu của Java thành kiểu dữ liệu của JDBC tương ứng trước khi gửi giá trị dữ liệu tới Database. Ví dụ, một double trong Java được chuyển đổi thành một SQL DOUBLE.
Bảng dưới đây tổng kết các kiểu dữ liệu mặc định của JDBC mà kiểu dữ liệu Java được chuyển đổi thành, khi bạn gọi phương thức setXXX() của các đối tượng PreparedStatement hoặc CallableStatement hoặc phương thức ResultSet.updateXXX().
SQLJDBC/JavasetXXXupdateXXX
VARCHARjava.lang.StringsetStringupdateString
CHARjava.lang.StringsetStringupdateString
LONGVARCHARjava.lang.StringsetStringupdateString
BITbooleansetBooleanupdateBoolean
NUMERICjava.math.BigDecimalsetBigDecimalupdateBigDecimal
TINYINTbytesetByteupdateByte
SMALLINTshortsetShortupdateShort
INTEGERintsetIntupdateInt
BIGINTlongsetLongupdateLong
REALfloatsetFloatupdateFloat
FLOATfloatsetFloatupdateFloat
DOUBLEdoublesetDoubleupdateDouble
VARBINARYbyte[ ]setBytesupdateBytes
BINARYbyte[ ]setBytesupdateBytes
DATEjava.sql.DatesetDateupdateDate
TIMEjava.sql.TimesetTimeupdateTime
TIMESTAMPjava.sql.TimestampsetTimestampupdateTimestamp
CLOBjava.sql.ClobsetClobupdateClob
BLOBjava.sql.BlobsetBlobupdateBlob
ARRAYjava.sql.ArraysetARRAYupdateARRAY
REFjava.sql.RefSetRefupdateRef
STRUCTjava.sql.StructSetStructupdateStruct
JDBC 3.0 đã bổ sung hỗ trợ tới kiểu dữ liệu BLOB, CLOB, ARRAY, và REF. Tương ứng, đối tượng ResultSet cũng có các phương thức là updateBLOB(), updateCLOB(), updateArray() và updateRef().
Đối tượng ResultSet cũng cung cấp phương thức getXXX() tương ứng cho mỗi kiểu dữ liệu để lấy giá trị của các cột. Mỗi phương thức có thể được sử dụng với tham số là tên cột hoặc chỉ mục cột.
SQLJDBC/JavasetXXXgetXXX
VARCHARjava.lang.StringsetStringgetString
CHARjava.lang.StringsetStringgetString
LONGVARCHARjava.lang.StringsetStringgetString
BITbooleansetBooleangetBoolean
NUMERICjava.math.BigDecimalsetBigDecimalgetBigDecimal
TINYINTbytesetBytegetByte
SMALLINTshortsetShortgetShort
INTEGERintsetIntgetInt
BIGINTlongsetLonggetLong
REALfloatsetFloatgetFloat
FLOATfloatsetFloatgetFloat
DOUBLEdoublesetDoublegetDouble
VARBINARYbyte[ ]setBytesgetBytes
BINARYbyte[ ]setBytesgetBytes
DATEjava.sql.DatesetDategetDate
TIMEjava.sql.TimesetTimegetTime
TIMESTAMPjava.sql.TimestampsetTimestampgetTimestamp
CLOBjava.sql.ClobsetClobgetClob
BLOBjava.sql.BlobsetBlobgetBlob
ARRAYjava.sql.ArraysetARRAYgetARRAY
REFjava.sql.RefSetRefgetRef
STRUCTjava.sql.StructSetStructgetStruct

Kiểu dữ liệu Date và Time trong JDBC

Lớp java.sql.Date ánh xạ kiểu dữ liệu DATE trong SQL. Các lớp java.sql.Time và java.sql.Timestamp ánh xạ tương ứng các kiểu dữ liệu TIME và TIMESTAMP trong SQL.
Dưới đây là ví dụ minh họa cách các lớp Date và Time định dạng các giá trị date và time trong Java để kết nối với kiểu dữ liệu tương ứng trong SQL.
package com.vietjack.jdbc;

import java.sql.Date;
import java.sql.Time;
import java.sql.Timestamp;
import java.util.*;

public class ViDuJDBC {
public static void main(String[] args) {
// Lay date va time chuan
java
.util.Date javaDate = new java.util.Date();
long javaTime = javaDate.getTime();
System.out.println("Java Date la:" +
javaDate
.toString());

//Lay va hien thi SQL DATE
java
.sql.Date sqlDate = new java.sql.Date(javaTime);
System.out.println("SQL DATE la: " +
sqlDate
.toString());

//Lay va hien ti SQL TIME
java
.sql.Time sqlTime = new java.sql.Time(javaTime);
System.out.println("SQL TIME la: " +
sqlTime
.toString());
//Lay va hien thi SQL TIMESTAMP
java
.sql.Timestamp sqlTimestamp =
new java.sql.Timestamp(javaTime);
System.out.println("SQL TIMESTAMP la: " +
sqlTimestamp
.toString());
}// Ket thuc main
}//Ket thuc SqlDateTime
Sao chép và dán ví dụ trên trong ViDuJDBC.java, sau đó biên dịch và chạy chương trình Java trên sẽ cho kết quả:
Kiểu dữ liệu Date và Time trong JDBC

Xử lý giá trị NULL trong JDBC

Sử dụng giá trị NULL trong Java và sử dụng giá trị NULL trong SQL là hai khái niệm khác nhau. Vì thế, để xử lý các giá trị SQL NULL trong Java, bạn có thể theo 3 cách:
1. Tránh sử dụng phương thức getXXX() mà trả về kiểu dữ liệu gốc.
2. Sử dụng các lớp Wrapper cho các kiểu dữ liệu gốc, và sử dụng phương thức wasNull() của đối tượng ResultSet để kiểm tra xem biến lớp wrapper mà nhận giá trị được trả về bởi phương thức getXXX() có nên được thiết lập là Null không.
3. Sử dụng kiểu dữ liệu gốc và phương thức wasNull() của đối tượng ResultSet để kiểm tra xem biến gốc mà nhận giá trị được trả về bởi phương thức getXXX() có nên được thiết lập tới một giá trị có thể chấp nhận mà bạn đã chọn để biểu diễn một NULL không.
Bạn theo dõi ví dụ sau để xem cách xử lý giá trị NULL:
Statement stmt = conn.createStatement( );
String sql = "SELECT mssv, ho, ten, diemthi FROM sinhvienk60";
ResultSet rs = stmt.executeQuery(sql);

int id = rs.getInt(1);
if( rs.wasNull( ) ) {
id
= 0;
}
Chương này, chúng ta cùng tìm hiểu các bước đơn giản để thiết lập một kết nối JDBC với Oracle Database.
Để kết nối ứng dụng Java với Oracle Database, bạn cần tải ojdbc14.jar file. Sau đó, bạn theo một trong hai cách:
1. Dán ojdbc14.jar file trong JRE/lib/ext folder.
2. Thiết lập classpath:
  • Thiết lập classpath tạm thời: đầu tiên bạn tìm ojdbc14.jar file, sau đó mở command prompt và viết: C:>set classpath=c:\folder\ojdbc14.jar;.;
  • Thiết lập classpath vĩnh viễn: Vào MyComputer properties -> advanced tab -> environment variables -> tạo tab mới user variable -> viết giá trị path trong tên biến -> dẫn đến thư mục bin của cài đăt java -> ok -> ok -> ok.
  • Xây dựng ClassPath của ngôn ngữ Java
    Trong variable name, bạn viết classpath và trong variable value, bạn dán path là C:\oraclexe\app\oracle\product\10.2.0\server\jdbc\lib\ojdbc14.jar;.;
Sau đó, để kết nối ứng dụng Java với Oracle Database, bạn thực hiện theo 5 bước như dưới đây. Trong ví dụ, mình sử dụng Oracle10G Database. Vì thế, chúng ta cần biết các thông tin sau về Oracle Database:
1. Lớp Driver cho Oracle Database là oracle.jdbc.driver.OracleDriver.
2. Địa chỉ kết nối cho Oracle10G Database là jdbc:oracle:thin:@localhost:1521:xe. Trong đó:
  • jdbc là API
  • oracle là cơ sở dữ liệu
  • thin là driver
  • localhost là tên server mà Oracle đang chạy (chúng ta cũng có thể sử dụng địa chỉ IP tại đây)
  • 1521 là số hiệu cổng
  • xe là tên Oracle Service
Bạn có thể lấy tất cả thông tin này từ tnsnames.ora file.
3. Username mặc định cho Oracle Database là system.
4. Password được cung cấp bởi người dùng tại thời điểm cài đặt Oracle Database.
Bây giờ, chúng ta sẽ tạo một bảng trong Oracle Database.
// Tao co so du lieu co ten la sinhvien
create database sinhvien
;
// Chon co so du lieu de lam viec
use sinhvien;
// Tao bang hocphi trong co so du lieu tren
create table hocphi
(mssv number(10),ho varchar2(50), ten varchar2(30),hocphi number(3));

Ví dụ để kết nối ứng dụng Java với Oracle Database

Trong ví dụ này, mình sử dụng username mặc định là system và password của mình là 123oracle. Chương trình đơn giản này được sử dụng để lấy tất cả bản ghi có trong bảng hocphi. Mình đã liệt kê và comment chi tiết về các bước trong khi kết nối ứng dụng Java với Oracle Database để bạn tiện theo dõi.
package com.vietjack.jdbc;

import java.sql.*;
class ViDuJDBC{
public static void main(String args[]){
try{
// Buoc 1: Tai lop Driver
Class.forName("oracle.jdbc.driver.OracleDriver");

// Buoc 2: Tao doi tuong Connection
Connection con=DriverManager.getConnection(
"jdbc:oracle:thin:@localhost:1521:xe","system","123oracle");

// Buoc 3: Tao doi tuong Statement
Statement stmt=con.createStatement();

// Buoc 4: Thuc thi truy van
ResultSet rs=stmt.executeQuery("select * from hocphi");
while(rs.next())
System.out.println(rs.getInt(1)+" "+rs.getString(2)+" "+rs.getString(3)+ rs.getInt(4));

// Buoc 5: Dong doi tuong Connection
con
.close();

}catch(Exception e){ System.out.println(e);}

}
}