08 java programming jdbc postgresql

50
JAVA PROGRAMMING JAVA PROGRAMMING – 2012 - V2.1 Nguyễn Hoàng Anh - [email protected] - ĐHKHTN 1 JDBC & POSTGRESQL Nguyễn Hoàng Anh - [email protected]

Upload: nguyen-vietquang

Post on 29-Apr-2015

333 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: 08 Java Programming Jdbc Postgresql

JAVA PROGRAMMINGJAVA PROGRAMMING – 2012 - V2.1

Nguyễn Hoàng Anh - [email protected] - ĐHKHTN 1

JDBC & POSTGRESQLNguyễn Hoàng Anh - [email protected]

Page 2: 08 Java Programming Jdbc Postgresql

JAVA PROGRAMMINGJAVA PROGRAMMING – 2012 - V2.1

Nguyễn Hoàng Anh - [email protected] - ĐHKHTN 2

Nội dung trình bày● JDBC API● Kiến trúc JDBC ● Thiết lập kết nối đến cơ sở dữ liệu● Statement ● PreparedStatement● CallableStatement ● PostgreSQL – Function

Page 3: 08 Java Programming Jdbc Postgresql

JAVA PROGRAMMINGJAVA PROGRAMMING – 2012 - V2.1

Nguyễn Hoàng Anh - [email protected] - ĐHKHTN 3

JDBC API● JDBC API là tập các Java API được sử dụng

để tương tác với cơ sở dữ liệu quan hệ.● Công dụng

● Kết nối cơ sở dữ liệu quan hệ.● Gửi các câu truy vấn đến cơ sở dữ liệu.● Nhận và xử lý các kết quả trả về từ cơ sở dữ liệu

Page 4: 08 Java Programming Jdbc Postgresql

JAVA PROGRAMMINGJAVA PROGRAMMING – 2012 - V2.1

Nguyễn Hoàng Anh - [email protected] - ĐHKHTN 4

Kiến trúc JDBC

Page 5: 08 Java Programming Jdbc Postgresql

JAVA PROGRAMMINGJAVA PROGRAMMING – 2012 - V2.1

Nguyễn Hoàng Anh - [email protected] - ĐHKHTN 5

Kiến trúc JDBC● Khi làm việc với JDBD, java developer sẽ làm việc như nhau

đối với các hệ cơ sở dữ liệu khác nhau.

● Java developer không phụ thuộc vào một hệ cơ sở dữ liệu cụ thể nào.

● Java developer không cần phải quan tâm đến sự khác nhau khi giao tiếp với các hệ quản trị cơ sở dữ liệu quan hệ khác nhau.

Page 6: 08 Java Programming Jdbc Postgresql

JAVA PROGRAMMINGJAVA PROGRAMMING – 2012 - V2.1

Nguyễn Hoàng Anh - [email protected] - ĐHKHTN 6

Thiết lập kết nối đến cơ sở dữ liệu● Bước 1: Thêm thư viện JDBC Driver vào ứng dụng

● Bước 2: Đăng ký Driver - PostgreSQL

Cách 1: Class.forName :

Class.forName(“org.postgresql.Driver”);

Cách 2: DriverManager.registerDriver

Driver driver = new org.postgresql.Driver()

DriverManager.registerDriver(driver);

Page 7: 08 Java Programming Jdbc Postgresql

JAVA PROGRAMMINGJAVA PROGRAMMING – 2012 - V2.1

Nguyễn Hoàng Anh - [email protected] - ĐHKHTN 7

Thiết lập kết nối đến cơ sở dữ liệu● PostgreSQL

→ Database: BookOnline

→ user: postgres , password: 123456

→ port: 5432 (default)

→ server: localhost● Java

→ url: jdbc:postgresql://localhost:5432/BookOnline

→ user: root , password: 123456

→ characterEncoding: utf-8

Page 8: 08 Java Programming Jdbc Postgresql

JAVA PROGRAMMINGJAVA PROGRAMMING – 2012 - V2.1

Nguyễn Hoàng Anh - [email protected] - ĐHKHTN 8

Thiết lập kết nối đến cơ sở dữ liệu

123456789101112

Driver driver = new org.postgresql.Driver();DriverManager.registerDriver(driver);String conString= "jdbc:postgresql://localhost:5432/BookOnline";Properties info = new Properties();info.setProperty("characterEncoding", "utf8");info.setProperty("user", "postgres");info.setProperty("password", "123456");Connection connection = DriverManager.getConnection(conString, info);. . .connection.close();

12

import java.sql.*; import java.util.*;

Page 9: 08 Java Programming Jdbc Postgresql

JAVA PROGRAMMINGJAVA PROGRAMMING – 2012 - V2.1

Nguyễn Hoàng Anh - [email protected] - ĐHKHTN 9

Thiết lập kết nối đến cơ sở dữ liệu● Sau khi thiết lập kết nối đến cơ sở dữ liệu, có

thể ● Gửi các câu truy vấn đến cơ sở dữ liệu.● Nhận và xử lý các kết quả trả về từ cơ sở dữ liệu.

Page 10: 08 Java Programming Jdbc Postgresql

JAVA PROGRAMMINGJAVA PROGRAMMING – 2012 - V2.1

Nguyễn Hoàng Anh - [email protected] - ĐHKHTN 10

Các dạng Statement● Statement: Thực hiện các câu truy vấn đơn

giản.● PreparedStatement: Thực hiện các câu truy

vấn có các tham số đầu vào● CallableStatement: Thực hiện các câu truy vấn

có các tham só đầu vào và đầu ra. Cụ thể là các function

Page 11: 08 Java Programming Jdbc Postgresql

JAVA PROGRAMMINGJAVA PROGRAMMING – 2012 - V2.1

Nguyễn Hoàng Anh - [email protected] - ĐHKHTN 11

Statement

Page 12: 08 Java Programming Jdbc Postgresql

JAVA PROGRAMMINGJAVA PROGRAMMING – 2012 - V2.1

Nguyễn Hoàng Anh - [email protected] - ĐHKHTN 12

Statement● Statement: Thực hiện các câu truy vấn đơn

giản.

Page 13: 08 Java Programming Jdbc Postgresql

JAVA PROGRAMMINGJAVA PROGRAMMING – 2012 - V2.1

Nguyễn Hoàng Anh - [email protected] - ĐHKHTN 13

Statement● Cách tạo Statement đơn giản

Statement sm = con.createStatement();

● Các phương thức thường dùng

sm.executeQuery(sql); → select

sm.executeUpdate(sql); → insert, update, delete, drop, create, …

sm.addBatch(sql) & sm.executeBatch() → Batch

Page 14: 08 Java Programming Jdbc Postgresql

JAVA PROGRAMMINGJAVA PROGRAMMING – 2012 - V2.1

Nguyễn Hoàng Anh - [email protected] - ĐHKHTN 14

Statement - executeQuery● ResultSet rs = sm.executeQuery(sql);

● ResultSet → forward : rs.next()

1234567891011

Statement statement = con.createStatement();String sql = “SELECT * FROM danh_muuc”;ResultSet rs = statement.executeQuery(sql);while (rs.next()){ int maDanhMuc = rs.getInt(“ma_danh_muc”); String tenDanhMuc = rs.getString(“ten_danh_muc”); System.out.println(maDanhMuc+” “+tenDanhMuc);}rs.close();sm.close();con.close();

Page 15: 08 Java Programming Jdbc Postgresql

JAVA PROGRAMMINGJAVA PROGRAMMING – 2012 - V2.1

Nguyễn Hoàng Anh - [email protected] - ĐHKHTN 15

Statement - executeQuery● Forward & Backward

Statement sm= connection.createStatement(

ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);

● ResultSet rs = sm.executeQuery(sql);

● ResultSet rs

→ forward : rs.next();

→ backward: rs.previous();

Page 16: 08 Java Programming Jdbc Postgresql

JAVA PROGRAMMINGJAVA PROGRAMMING – 2012 - V2.1

Nguyễn Hoàng Anh - [email protected] - ĐHKHTN 16

Statement – executeUpdate12345678910

Statement sm = con.createStatement();String sql =“DELETE FROM sach WHERE ma_danh_muc= 1”;int n = sm.executeUpdate (sql);if (n >= 0){ System.out.println(n + “ Sách đã được xóa”);}else{ System.out.println(“Lỗi”);}sm.close();con.close();

Page 17: 08 Java Programming Jdbc Postgresql

JAVA PROGRAMMINGJAVA PROGRAMMING – 2012 - V2.1

Nguyễn Hoàng Anh - [email protected] - ĐHKHTN 17

Statement – executeUpdate1234567891011121314

Statement sm = con.createStatement();String sql = String.format(“UPDATE danh_muc SET ten_danh_muc = '%s'” WHERE ma_danh_muc= %d”, maDanhMuc, tenDanhMuc);

int n = sm.executeUpdate (sql);if (n >= 0){ System.out.println(“Cập nhật thành công”);}else{ System.out.println(“Lỗi”);}sm.close();con.close();

Page 18: 08 Java Programming Jdbc Postgresql

JAVA PROGRAMMINGJAVA PROGRAMMING – 2012 - V2.1

Nguyễn Hoàng Anh - [email protected] - ĐHKHTN 18

Statement – executeUpdate1234567891011

Statement sm = con.createStatement();String sql = String.format(“INSERT INTO danh_muc (ten_danh_muc) VALUES('%s')”,tenDanhMuc);int n = sm.executeUpdate (sql);if (n >= 0){ System.out.println(“Thêm thành công”);}else{ System.out.println(“Lỗi”);}sm.close();con.close();

Page 19: 08 Java Programming Jdbc Postgresql

JAVA PROGRAMMINGJAVA PROGRAMMING – 2012 - V2.1

Nguyễn Hoàng Anh - [email protected] - ĐHKHTN 19

Statement – executeUpdate123456789101112131415

String tenDanhMuc = "C++";String sql= String.format("INSERT INTO danh_muc(ten_danh_muc) VALUES ('%s')", tenDanhMuc);int n=sm.executeUpdate(sql, Statement.RETURN_GENERATED_KEYS);if(n>0){ System.out.println("Thêm thành công"); ResultSet rs=statement.getGeneratedKeys(); if(rs.next()){ int mdm = rs.getInt(1); System.out.println("Mã danh mục vừa thêm:" +mdm); }}sm.close();con.close();

Page 20: 08 Java Programming Jdbc Postgresql

JAVA PROGRAMMINGJAVA PROGRAMMING – 2012 - V2.1

Nguyễn Hoàng Anh - [email protected] - ĐHKHTN 20

Statement – executeUpdate123456789101112131415161718

String [] tenDanhMucs = {"C++", "C#", "Java"};String sql="INSERT INTO danh_muc(ten_danh_muc) VALUES ";for(int i=0; i<tenDanhMucs.length; i++){ sql=sql + String.format("('%s') ", tenDanhMucs[i]); if(i<tenDanhMucs.length-1){sql=sql + ", ";}}int n=stm.executeUpdate(sql, Statement.RETURN_GENERATED_KEYS);if(n>0){ System.out.println("Thêm thành công"); ResultSet rs=statement.getGeneratedKeys(); while(rs.next()){ int mdm = rs.getInt(1); System.out.println("Mã danh mục vừa thêm: " + mdm); }}sm.close();con.close();

Page 21: 08 Java Programming Jdbc Postgresql

JAVA PROGRAMMINGJAVA PROGRAMMING – 2012 - V2.1

Nguyễn Hoàng Anh - [email protected] - ĐHKHTN 21

Statement – executeBatch1234567891011

String sql1="INSERT INTO danh_muc(ten_danh_muc) VALUES('Java')";String sql2="INSERT INTO danh_muc(ten_danh_muc) VALUES('PHP')";String sql3="UPDATE DANHMUC SET ten_danh_muc='C' WHERE ma_danh_muc=43";Statement statement=connection.createStatement();statement.addBatch(sql1);statement.addBatch(sql2);statement.addBatch(sql3);int [] n = statement.executeBatch();

Page 22: 08 Java Programming Jdbc Postgresql

JAVA PROGRAMMINGJAVA PROGRAMMING – 2012 - V2.1

Nguyễn Hoàng Anh - [email protected] - ĐHKHTN 22

Statement - SQLException1234567

try{ . . .}catch(SQLException ex){ . . .}finally{ con.close();}

Page 23: 08 Java Programming Jdbc Postgresql

JAVA PROGRAMMINGJAVA PROGRAMMING – 2012 - V2.1

Nguyễn Hoàng Anh - [email protected] - ĐHKHTN 23

Statement● Statement: Thực hiện các câu truy vấn đơn

giản?

Page 24: 08 Java Programming Jdbc Postgresql

JAVA PROGRAMMINGJAVA PROGRAMMING – 2012 - V2.1

Nguyễn Hoàng Anh - [email protected] - ĐHKHTN 24

PreparedStatement

Page 25: 08 Java Programming Jdbc Postgresql

JAVA PROGRAMMINGJAVA PROGRAMMING – 2012 - V2.1

Nguyễn Hoàng Anh - [email protected] - ĐHKHTN 25

PreparedStatement● PreparedStatement: Thực hiện các câu truy

vấn có các tham số đầu vào

Page 26: 08 Java Programming Jdbc Postgresql

JAVA PROGRAMMINGJAVA PROGRAMMING – 2012 - V2.1

Nguyễn Hoàng Anh - [email protected] - ĐHKHTN 26

PreparedStatement● Cách tạo PreparedStatement đơn giản

PreparedStatement ps =

con.prepareStatement(sql);

● Các phương thức thường dùng

ps.setXXX(index, value); → XXX : int, string, ...

ps.executeQuery(); → select

ps.executeUpdate(); → insert, update, delete, drop, create, …

ps.addBatch() & ps.executeBatch() → Batch

Page 27: 08 Java Programming Jdbc Postgresql

JAVA PROGRAMMINGJAVA PROGRAMMING – 2012 - V2.1

Nguyễn Hoàng Anh - [email protected] - ĐHKHTN 27

PreparedStatement - executeQuery● ResultSet rs = sm.executeQuery();

● ResultSet → forward : rs.next()

12345678910111213

String sql = “SELECT * FROM sach WHERE gia_ban < ? AND TenSach LIKE ?”;PreparedStatement ps = con.prepareStatement(sql);ps.setDouble(1, 2000);ps.setString(2, “%java%”);ResultSet rs = ps.executeQuery();while (rs.next()){ int maSach = rs.getInt(“MaSach”); . . .}rs.close();ps.close();con.close();

Page 28: 08 Java Programming Jdbc Postgresql

JAVA PROGRAMMINGJAVA PROGRAMMING – 2012 - V2.1

Nguyễn Hoàng Anh - [email protected] - ĐHKHTN 28

PreparedStatement - executeQuery● Forward & Backward

PreparedStatement ps = con.prepareStatement(

sql, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);

● ps.setXXX(index, value);

● ResultSet rs = ps.executeQuery();

● ResultSet rs

→ forward : rs.next();

→ backward: rs.previous();

Page 29: 08 Java Programming Jdbc Postgresql

JAVA PROGRAMMINGJAVA PROGRAMMING – 2012 - V2.1

Nguyễn Hoàng Anh - [email protected] - ĐHKHTN 29

PreparedStatement – executeUpdate123456789101112

String sql = “DELETE FROM sach WHERE ma_danh_muc= ?”;PreparedStatement ps = con.prepareStatement(sql);ps.setInt(1, 1);int n = ps.executeUpdate ();if (n >= 0){ System.out.println(n + “ Sách đã được xóa”);}else{ System.out.println(“Lỗi”);}ps.close();con.close();

Page 30: 08 Java Programming Jdbc Postgresql

JAVA PROGRAMMINGJAVA PROGRAMMING – 2012 - V2.1

Nguyễn Hoàng Anh - [email protected] - ĐHKHTN 30

PreparedStatement – executeUpdate1234567891011121314

String sql = String.format(“UPDATE danh_muc SET ten_danh_muc = ?” WHERE ma_danh_muc= ?”);PreparedStatement ps = con.prepareStatement(sql);ps.setString(1, “Java”);ps.setInt(2, 1);int n = ps.executeUpdate ();if (n >= 0){ System.out.println(“Cập nhật thành công”);}else{ System.out.println(“Lỗi”);}ps.close();con.close();

Page 31: 08 Java Programming Jdbc Postgresql

JAVA PROGRAMMINGJAVA PROGRAMMING – 2012 - V2.1

Nguyễn Hoàng Anh - [email protected] - ĐHKHTN 31

PreparedStatement – executeUpdate123456789101112

String sql = “INSERT INTO danh_muc (ten_danh_muc) VALUES(?)”;PreparedStatement ps = con.prepareStatement(sql);ps.setString(1, “PHP”);int n = ps.executeUpdate ();if (n >= 0){ System.out.println(“Thêm thành công”);}else{ System.out.println(“Lỗi”);}ps.close();con.close();

Page 32: 08 Java Programming Jdbc Postgresql

JAVA PROGRAMMINGJAVA PROGRAMMING – 2012 - V2.1

Nguyễn Hoàng Anh - [email protected] - ĐHKHTN 32

PreparedStatement – executeUpdate12345678910111213141516

String tenDanhMuc = "C++";String sql= String.format("INSERT INTO danh_muc(ten_danh_muc) VALUES ('%s')", tenDanhMuc);PreparedStatement ps = con.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);int n=ps.executeUpdate();if(n>0){ System.out.println("Thêm thành công"); ResultSet rs=ps.getGeneratedKeys(); if(rs.next()){ int mdm = rs.getInt(1); System.out.println("Mã danh mục vừa thêm:" +mdm); }}sm.close();con.close();

Page 33: 08 Java Programming Jdbc Postgresql

JAVA PROGRAMMINGJAVA PROGRAMMING – 2012 - V2.1

Nguyễn Hoàng Anh - [email protected] - ĐHKHTN 33

PreparedStatement – executeBatch12345678910

String sql="INSERT INTO danh_muc(ten_danh_muc) VALUES(?)";PreparedStatement ps = con.prepareStatement(sql);ps.setString(1, “Java”);ps.addBatch();ps.setString(1, “PHP”);ps.addBatch();ps.setString(1, “C++”);ps.addBatch();int [] n = ps.executeBatch();

Page 34: 08 Java Programming Jdbc Postgresql

JAVA PROGRAMMINGJAVA PROGRAMMING – 2012 - V2.1

Nguyễn Hoàng Anh - [email protected] - ĐHKHTN 34

Statement - SQLException1234567

try{ . . .}catch(SQLException ex){ . . .}finally{ con.close();}

Page 35: 08 Java Programming Jdbc Postgresql

JAVA PROGRAMMINGJAVA PROGRAMMING – 2012 - V2.1

Nguyễn Hoàng Anh - [email protected] - ĐHKHTN 35

PreparedStatement● PreparedStatement: Thực hiện các câu truy

vấn có các tham số đầu vào

Page 36: 08 Java Programming Jdbc Postgresql

JAVA PROGRAMMINGJAVA PROGRAMMING – 2012 - V2.1

Nguyễn Hoàng Anh - [email protected] - ĐHKHTN 36

PostgreSQL – Simple Function

Page 37: 08 Java Programming Jdbc Postgresql

JAVA PROGRAMMINGJAVA PROGRAMMING – 2012 - V2.1

Nguyễn Hoàng Anh - [email protected] - ĐHKHTN 37

PostgreSQL - f_them_danh_muc123456789

create or replace function f_them_danh_muc(i_ten_danh_muc character) returns integer as $$begin

insert into danh_muc(ten_danh_muc) values(i_ten_danh_muc);

return lastval();end;$$language plpgsql;

Page 38: 08 Java Programming Jdbc Postgresql

JAVA PROGRAMMINGJAVA PROGRAMMING – 2012 - V2.1

Nguyễn Hoàng Anh - [email protected] - ĐHKHTN 38

JDBC - f_them_danh_muc123456

String sql="{? = call f_them_danh_muc(?)}";CallableStatement cs=con.prepareCall(sql);cs.registerOutParameter(1, Types.INTEGER);cs.setString(2, "Java");cs.execute();int ma_danh_muc = cs.getInt(1);

Page 39: 08 Java Programming Jdbc Postgresql

JAVA PROGRAMMINGJAVA PROGRAMMING – 2012 - V2.1

Nguyễn Hoàng Anh - [email protected] - ĐHKHTN 39

PostgreSQL - f_cap_nhat_danh_muc123456789101112

create or replace function f_cap_nhat_danh_muc(i_ma_danh_muc integer, i_ten_danh_muc character) returns integer as $$begin

update danh_muc set ten_danh_muc = i_ten_danh_muc where ma_danh_muc = i_ma_danh_muc;

get diagnostics count = ROW_COUNT;return count;

end;$$language plpgsql;

Page 40: 08 Java Programming Jdbc Postgresql

JAVA PROGRAMMINGJAVA PROGRAMMING – 2012 - V2.1

Nguyễn Hoàng Anh - [email protected] - ĐHKHTN 40

JDBC - f_cap_nhat_danh_muc1234567

String sql="{? = call f_cap_nhat_danh_muc(?,?)}";CallableStatement cs=con.prepareCall(sql);cs.registerOutParameter(1, Types.INTEGER);cs.setInt(2, 10);cs.setString(3, "Java");cs.execute();int count = cs.getInt(1);

Page 41: 08 Java Programming Jdbc Postgresql

JAVA PROGRAMMINGJAVA PROGRAMMING – 2012 - V2.1

Nguyễn Hoàng Anh - [email protected] - ĐHKHTN 41

PostgreSQL - f_xoa_danh_muc12345678910

create or replace function f_xoa_danh_muc(i_ma_danh_muc integer) returns integer as $$begin

delete from danh_muc where ma_danh_muc = i_ma_danh_muc;

get diagnostics count = ROW_COUNT;return count;

end;$$language plpgsql;

Page 42: 08 Java Programming Jdbc Postgresql

JAVA PROGRAMMINGJAVA PROGRAMMING – 2012 - V2.1

Nguyễn Hoàng Anh - [email protected] - ĐHKHTN 42

JDBC - f_xoa_danh_muc123456

String sql="{? = call f_xoa_danh_muc(?)}";CallableStatement cs=con.prepareCall(sql);cs.registerOutParameter(1, Types.INTEGER);cs.setInt(2, 10);cs.execute();int count = cs.getInt(1);

Page 43: 08 Java Programming Jdbc Postgresql

JAVA PROGRAMMINGJAVA PROGRAMMING – 2012 - V2.1

Nguyễn Hoàng Anh - [email protected] - ĐHKHTN 43

PostgreSQL - f_lay_danh_sach_danh_muc

12345678910

create or replace function f_lay_danh_sach_danh_muc() returns setof danh_muc as $$begin

return query select ma_danh_muc, ten_danh_muc from danh_muc order by ten_danh_muc asc;

end;$$language plpgsql;

Page 44: 08 Java Programming Jdbc Postgresql

JAVA PROGRAMMINGJAVA PROGRAMMING – 2012 - V2.1

Nguyễn Hoàng Anh - [email protected] - ĐHKHTN 44

JDBC - f_lay_danh_sach_danh_muc

123456789101112

String sql = “select ma_danh_muc, ten_danh_muc from f_lay_danh_sach_danh_muc()”;PreparedStatement ps = con.prepareStament(sql);ResultSet rs = cs.executeQuery();while (rs.next()){ int ma_danh_muc rs.getInt(1); String ten_danh_muc = rs.getString(2); . . .}rs.close();cs.close();con.close();

Page 45: 08 Java Programming Jdbc Postgresql

JAVA PROGRAMMINGJAVA PROGRAMMING – 2012 - V2.1

Nguyễn Hoàng Anh - [email protected] - ĐHKHTN 45

JDBC - PostgreSQL● Khi function trả về kiểu SETOF

● CallableStatement không hỗ trợ ● Sử dụng Statement hoặc PreparedStament

Page 46: 08 Java Programming Jdbc Postgresql

JAVA PROGRAMMINGJAVA PROGRAMMING – 2012 - V2.1

Nguyễn Hoàng Anh - [email protected] - ĐHKHTN 46

PostgreSQL - f_tim_kiem_sach1234567891011

create function f_tim_kiem_sach(i_ten_sach character(64), i_gia_ban double precision) returns setof sach as $$begin

return query SELECT * FROM sach WHERE gia_ban < i_gia_ban AND ten_sach LIKE i_ten_sach;end;$$language plpgsql;

Page 47: 08 Java Programming Jdbc Postgresql

JAVA PROGRAMMINGJAVA PROGRAMMING – 2012 - V2.1

Nguyễn Hoàng Anh - [email protected] - ĐHKHTN 47

JDBC – f_tim_kiem_sach

123456789101112131415

String sql = “select ma_sach, ten_sach, gia_ban from f_tim_kiem_sach(?, ?)”;PreparedStatement ps = con.prepareStament(sql);ps.setString(1, “%java%”);ps.setString(2, 200000);ResultSet rs = cs.executeQuery();while (rs.next()){ int maSach = rs.getInt(1); String tenSach = rs.getString(2); double giaBan = rs.getDouble(3); . . .}rs.close();cs.close();con.close();

Page 48: 08 Java Programming Jdbc Postgresql

JAVA PROGRAMMINGJAVA PROGRAMMING – 2012 - V2.1

Nguyễn Hoàng Anh - [email protected] - ĐHKHTN 48

JDBC – f_lay_danh_sach_sach

1234567891011

create or replace function f_lay_danh_sach_sach() returns table(ma_sach integer, ten_danh_muc character(64)) as $$begin

return query select s.ma_sach, dm.ten_danh_muc from danh_muc dm inner join sach s

on dm.ma_danh_muc = s.ma_danh_muc order by ten_sach asc;

end;$$language plpgsql;

Page 49: 08 Java Programming Jdbc Postgresql

JAVA PROGRAMMINGJAVA PROGRAMMING – 2012 - V2.1

Nguyễn Hoàng Anh - [email protected] - ĐHKHTN 49

JDBC – f_lay_danh_sach_sach

1234567

String sql="select * from f_lay_danh_sach_sach()";PreparedStatement ps=con.prepareStatement(sql);ResultSet rs=ps.executeQuery();while(rs.next()){

System.out.println(rs.getInt(1));System.out.println(rs.getString(2));

}

Page 50: 08 Java Programming Jdbc Postgresql

JAVA PROGRAMMINGJAVA PROGRAMMING – 2012 - V2.1

Nguyễn Hoàng Anh - [email protected] - ĐHKHTN 50

HỎI VÀ ĐÁP