Download as doc, pdf, or txt
Download as doc, pdf, or txt
You are on page 1of 17

Chng 9

X l c s d liu trong Java


Cc ng dng nternet ngy nay thng c da trn cc c s d liu ln c
ci t bng cch s dng cng ngh c s d liu quan h. K t khi xut hin t nm
1995, Java c yu cu cn cung cp kh nng kt ni vi cc c s d liu quan h
hin c nh ngres, Oracle, Access, v SQL Server,.Cc tin ch cho php truy xut c
s d liu nm trong gi java.sql.
Ngy nay cc thng tin vi dung lng ln u c lu tr trong cc kho d liu
ln. Kh nng truy xut ti cc c s d liu l iu khng th thiu i vi cc ng
dng. iu ny lai cng ng vi cc ng dng chay trn mang my tnh ni chung v
nternet ni ring. Trong chng ny chng ta s i vo tm hiu giao din lp trnh ng
dng JDBC ca Java v cch thc kt ni vi mt c s d liu t mt ng dng
Java thng qua JDBC.
1. JDBC Java Database Connectivity A!
SUN pht trin mt giao din lp trnh ng dng AP truy xut c s d liu-
JDBC. Mc tiu t ra ca SUN l:
JDBC l mt giao din lp trnh ng dng mc SQL.
JDBC cn c c nhng kinh nghim lm vic vi cc AP c s d liu hin c.
JDBC cn n gin
Giao din lp trnh ng dng mc SQL ngha l JDBC cho php ta xy dng cc
lnh SQL v nhng cc lnh SQL bn trong cc li goi Java AP. Ni tm lai, v c bn ta
vn s dng SQL nhng JDBC cho php ta djch mt cch tri chy gia th gii c s
d liu v th gii ng dng Java. Kt qu ca ban t c s d liu, c tr v di
dang cc i tng Java v nu c vn khi truy xut n s a ra cc ngoai l.
JDBC AP chun ha:
Cch thit lp ti c s d liu
Cch tip cn khi tao cc truy vn
Cch thc tao ra cc truy vn c tham s
Chun ha cu trc d liu ca kt qu truy vn
o Xc jnh s ct
o Tra tm cc metadata.
JDBC AP cha chun ha c php SQL. JDBC khng phi l SQL nhng. Lp
JDBC nm trong gi java.sql. N bao gm hai phn:
JDBC AP l mt giao din lp trnh ng dng vit bng ngn ng Java thun ty.
Trnh qun l Driver JDBC truyn tin vi cc trnh iu khin c th ca nh sn
xut, cc trnh iu khin c s d liu ca nh sn xut truyn tin vi c s d
liu.
". C#u tr$c c%a JDBC
JDBC thc hin cc mc tiu ca n thng qua mt tp hp cc giao tip JDBC,
mi giao tip thc c thc hin bi tng nh sn xut. Tp hp cc lp thc thi cc
giao tip JDBC cho mt m t c s d liu c th c goi l mt trnh iu khin
JDBC. Khi xy dng mt ng dng c s d liu, ta khng phi xem xt n tt c cc
lp c s. JDBC che du cc chi tit ca tng c s d liu v nh vy ta chi cn quan
tm n ng dng ca mnh.
1
Hnh 9.1
Cc c s d liu v cc trnh iu khin
Hnh 9.2
2.1. Kiu 1
Cc trnh iu khin ny s dng mt cng ngh cu ni truy xut ti mt c s
d liu. Cu ni JDBC-ODBC c bt u a vo t JDK 1.2 l mt v d in hnh
cho kiu driver ny. N cung cp mt gateway ti AP ODBC. Ci t ca AP ny thc
hin truy xut ti c s d liu thc t. Gii php cu ni thng yu cu phn mm phi
c ci t trn h thng client, ngha l chng khng phi l cc gii php tt cho cc
ng dng m khng cho php ci t phn mm trn client.
Cu ni JDBC-ODBC cung cp cch truy xut thng qua mt hay nhiu trnh iu khin
ODBC.
Uu im:
o y l mt cch tip cn tt hoc JDBC.
o Hu ch cho cc cng ty ci t trnh iu khin ODBC trn tng my
client.
o y l cch duy nht truy xut c ti cc c s d liu trn my tnh
bn mc thp.
Nhc im:
o Khng ph hp vi cc ng dng quy m ln. Hiu nng thp v c cn
nhiu cng oan cn thc hin chuyn t JDBC sang ODBC.
o Khng h tr tt c cc c trng ca Java.
o Ngi s dng bj han ch bi chc nng do trnh iu khin ODBC cung
cp.
2.2. Kiu 2
Cc trnh iu khin kiu 2 l cc trnh iu khin AP-trnh iu khin gc. iu
ny ngha l m Java goi cc phng thc C hoc C++ c cung cp bi tng nh sn
2
xut h qun trj c s d liu thc hin truy xut ti c s d liu. Gii php ny vn
yu cu phi c phn mm trn h thng client. JDBC chuyn cc li goi ti JDBC AP
thnh cc li goi kt ni vi giao din lp trnh ng dng ca my khc cho mt c s d
liu c th nh BM, nformix, Oracle, hoc Sybase.
Uu im:
Hiu nng tt hn kiu 1, v trnh iu khin kiu 2 cha cc m lnh c bin
djch c ti u ha cho h iu hnh ca server c s d liu hoat ng ch hu
trng,
Nhc im
o Ngi s dng cn m bo rng trnh iu khin JDBC ca nh sn xut
c s d liu c trn tng my khch.
o Phi c chng trnh c bin djch cho mi h iu hnh m ng dng
s chay.
o Chi s dng c hiu qu trong cc mi trng c kim sot nh mt mang
intranet
2.3. Kiu 3
Cc trnh iu khin kiu 3 cung cp cho client mt AP mang chung, AP ny sau
chuyn thnh thao tc truy xut c s d liu mc server. Mt khc, trnh iu khin
JDBC trn client s dng cc socket goi mt ng dng trung gian (middleware) trn
server chuyn cc yu cu ca client thnh mt AP c th i vi tng server. Kt
qu l trnh iu khin ny c bit linh hoat, v n khng cn phi c phn mm ci t
trn client v mt trnh iu khin c th cung cp kh nng truy xut ti nhiu c s d
liu.
Java Middleware thun tu
Trnh iu khin Java thun ty cho cc chng trnh trung gian c s d liu
djch cc li goi JDBC cho giao thc ca nh sn xut phn mm trung gian, trnh iu
khin ny sau c chuyn cho mt giao thc gn vi c s d liu c th bi phn
mm server trung gian.
Uu im:
o c s dng khi mt cng ty c nhiu c s d liu v mun s dng mt
trnh iu khin JDVC kt ni vi tt c cc c s d liu.
o Trnh iu khin nm trn server, v th khng cn trnh iu khin JDBC
trn tng my client
o Thnh phn server c ti u ha cho h iu hnh ang chay ch
hu trng
Nhc im:
o Cn m lnh cho c s d liu c th trn server trung gian
2.4. Kiu 4
S dng cc giao thc mang c tch hp sn vo engine c s d liu, cc
driver kiu 4 truyn tin trc tip vi c s d liu bng cch s dng socket Java. y l
trnh iu khin Java thun ty nht. Kiu trnh iu khin ny thng do nh sn xut c
s d liu cung cp.
Trnh iu khin Java thun ty ti kt ni trc tip vi c s d liu chuyn cc
li goi JDBC thnh cc gi tin c truyn i trn mang theo mt khun dang c s
dng bi c s d liu c th. Cho php mt li goi trc tip t my client ti c s d
liu.
3
Uu im:
o Khng cn ci phn mm c bit no trn client hoc server. C th c
ti v mt cch linh hoat
Nhc im
o Khng ti u cho h iu hnh server v vy trnh iu khin khng th tn
dng cc c trng u vit ca h iu hnh
&. '(t n)i c s d liu
Hnh 10.3
Hnh v trn cho thy cch thc m mt ng dng JDBC truyn tin vi mt hoc
nhiu c s d liu m khng cn bit n cc chi tit c lin quan n ci t driver cho
c s d liu . Mt ng dng s dng JDBC nh l mt giao tip, thng qua n
truyn tt c cc yu cu lin quan n c s d liu ca n.
Khi ta vit cc applet hay ng dng c s d liu, ta c th cung cp cc thng tin
c th v trnh iu khin JDBC l URL c s d liu. Thm ch ta c th nhp vo URL
c s d liu cho ng dng v applet vo thi gian chay di dang cc tham s.
JDBC l gi kt ni c s d liu bao gm giao din lp trnh ng dng cn bn
Java AP. Java cung cp mt interface c lp vi c s d liu m mt kt ni ti c
s d liu, bng cch pht ra cc li goi SQL ti c s d liu v nhn v kt qu l mt
tp hp cc d liu. gc k thut, JDBC ng vai tr nh l mt chng trnh ci
t giao tip mc li goi SQL c jnh ngha bi X/Open v c h tr bi hu ht
cc nh cung cp c s d liu quan h. thc hin giao tc vi mt kiu c s d liu
c th, ta cn phi c mt trnh iu khin JDBC ng vai tr nh l mt cu ni gia cc
li goi phng thc JDBC v interface c s s liu.
3.1. DriverManager
DriverManager cung cp phng tin nap cc trnh iu khin c s d liu vo
mt ng dng Java hoc mt applet; n chnh l cch JDBC thit lp mt lin kt vi
c s d liu. ng dng Java, trc tin tao mt i tng DriverManager, kt ni vi c
s d liu bng cch goi phng thc tnh getConnection() ca lp DriverManager, vi
tham chiu truyn vo ging nh mt URL c goi l URL c s d liu. DriverManager
tm kim mt driver h tr vic kt ni trong tp hp cc driver hin c. Nu tm thy
driver n truyn ja chi c s d liu cho driver v yu cu driver tao ra mt kt ni. Kt
ni ti c s d liu c tr v di dang mt i tng Connection.
Tt c cc driver JDBC cung cp mt ci t giao tip java.sql.Driver. Khi mt
DriverManager c tao ra, n ti mt tp hp cc driver c xc jnh bi thuc tnh
ca java.sql.Driver. Driver c nap vo thi gian chay Java, n c nhim v tao ra mt
4
i tng v ng k i tng vi DriverManager. Cc driver cn cho ng dng c th
c nap bi phng thc Class.forName()
Driver myDriver=(Driver)Class.forName(specialdb.Driver);
3.2. Connection
Mi khi cc driver cn thit c nap bi DriverManager, s c mt lin kt vi mt
c s d liu c tao ra nh phng thc getConnection() ca lp DriverManager. C
s d liu cn lm vic c xc jnh thng qua mt tham s String ng vai tr nh l
ja chi tham chiu ti c s d liu. Khng c mt khun dang chun no cho ja chi xu
c s d liu; DriverManager truyn xu ja chi cho tng driver JDBC c nap v
xem n c hiu v h tr kiu c s d liu c xc jnh.
Jdbc:odbc:financedata
Trong financedata l ngun c s d liu cc b. truy xut ti mt c s d
liu t xa t mt my client ta c th dng c php sau:
Jdbc:odbc:drvr://dataserver.foobar.com:500/financedata.
c t JDBC AP khuyn co mt URL c s d liu nn c dang nh sau:
Jdbc:<sub-protocol>:<sub-name>
Trong <sub-protocol> xc jnh djch v kt ni c s d liu v <sub-name>
cung cp tt c cc thng tin cn thit djch v tm c s d liu v kt ni ti n.
Phng thc getConnection() trn DriverManager hoc l tr v mt i tng
Connection biu din lin kt ti c s d liu c chi ra, hoc l a ra ngoai l
nu lin kt khng c thit lp.
3.3. Statement
Giao tip Connection cho php ngi s dng tao ra mt cu lnh truy vn ti c
s d liu. Cc lnh truy vn c biu din di dang cc i tng Statement hoc
cc lp con ca n. Giao tip Connection cung cp ba phng thc tao ra cc lnh
truy vn c s d liu l: createStatement(), prepareStatement(), v precpareCall().
createStatement() c s dng cho cc lnh SQL n gin khng lin quan n cc
tham s. Phng thc ny tr v mt i tng Statement c s dng pht tra cc
truy vn SQL ti c s d liu, bng cch s dng phng thc executeQuery().
Phng thc ny chp nhn mt lnh SQL nh l mt xu v cc kt qu tr v l
di dang mt i tng ResultSet. Cc phng thc khc c trong giao tip Statement
pht ra cc lnh SQL ti cc c s d liu l phng thc execute(), phng thc
ny c s dng cho cc truy vn SQL v tr v nhiu resultset v phng thc
executeUpdate() c s dng pht ra cc lnh NSERT, UPDATE, hoc DELETE.
Ngoi giao tip Statement c bn, mt i tng Connection c th c s dng
tao ra mt i tng PreparedStatement v cc CallableStatement biu din cc th
tc stored procedure trong c s d liu. Mt lnh SQL c th lin quan n nhiu tham
s u vo, hoc mt lnh m ta mun x l nhiu ln, c th c tao ra bng cch s
dng lnh prepareStatement() trn i tng Connection, phng thc ny tr v i
tng PreparedStatement. Lnh SQL c truyn cho phng thc prepareStatement()
l mt lnh c bin djch trc v vy vic x l nhiu ln mt lnh s hiu qu hn.
Lp con ca lp Statement h tr vic thit lp cc gi trj ca cc tham s u vo c
bin djch trc thng qua cc phng thc setXXX(). i tng PreparedStatement c
phng thc executeQuery() khng cn tham s, thay vo n x l cc lnh SQL
c bin djch trc trn c s d liu. Ch rng khng phi tt c cc nh sn xut
c s d iu hoc cc driver JDBC u h tr cc lnh c bin djch trc.
3.4. ResultSet
Cc dng d liu c tr v t vic x l mt lnh c biu din bng mt
ResultSet trong JDBC. V d, phng thc executeQuery() ca Statement tr v mt i
tng ResultSet. i tng ResultSet cung cp cc cch duyt qua cc dng d liu
5
c tr v t vic x l cu lnh truy vn SQL thng qua phng thc next() ca n;
cc trng d liu trong mi hng c th c tm kim thng qua cc tn hoc chi mc
ct bng cch s dng phng thc getXXX(). Ngi dng cn phi bit kiu d liu
trong mi ct d liu c tr v, v mi mc d liu c tm kim thng qua cc
phng thc getXXX() c kiu c th.
Ty thuc vo kiu trnh iu khin JDBC c ci t, vic duyt qua cc hng
d liu trong i tng ResultSet c th tao ra hiu ng ly d liu t c s d liu,
hoc ng gin l tr v tng hng d liu t cache. Nu hiu nng ca cc giao djch l
vn i vi ng dng, ta cn xc jnh d liu tr v c qun l nh th no bi cc
trnh iu khin ca nh sn xut.
Luu : Gi trj tr lai ca hm getXXX(args) l d liu ca trng c tn l args ca
cc dng d liu c chon ra. Ngoi ra cng cn phn bit cc kiu ca Java vi cc
kiu d liu ca SQL. Bng di y m t cc kiu d liu tng ng ca Java, SQL v
cc hm getXXX().
Kiu ca SQL Kiu ca Java Hm getXXX()
CHAR String getString()
VARCHAR String getString()
LONGVARCHAR String getString()
NUMBERC java.math.BigDecimal getBigDecimal()
DECMAL java.math.BigDecimal getBigDecimal()
BT Boolean (boolean) getBoolean()
TNNT nteger (byte) getByte()
SMALLNT nteger (short) getShort()
NTEGER nteger (int) getnt()
BGNT Long (long) getLong()
REAL loat (float) getloat()
LOAT Double (double) getDouble()
DOUBLE Double (double) getDouble()
BNAR byte getBytes()
VARBNAR byte getBytes()
LONGVARBNAR byte getBytes()
DATE java.sql.Date getDate()
TME java.sql.Time getTime()
TMESTAMP java.sql.Timestamp getTimestamp()
Bng 10.1
*. +,- Database.etaData
Mun x l tt cc d liu ca mt CSDL th chng ta phi bit c nhng thng
tin chung v cu trc ca CSDL nh: h QTCSDL, tn ca cc bng d liu, tn goi
ca cc trng d liu, v.v .
bit c nhng thng tin chung v cu trc ca mt h CSDL, chng ta c th
s dng giao din java.sql.DatabaseMetaData thng qua hm getMetaData().
DatabaseMetaData dbmeta = con.getMetaData();
trong , con l i tng kt ni c tao ra bi lp Connection.
6
Lp DatabaseMetaData cung cp mt s hm c nap chng xc jnh c
nhng thng tin v cu hnh ca mt CSDL. Mt s hm cho lai i tng ca String
(getURL()), mt s tr lai gi trj logic (nullsAreSortedHigh()) hay tr lai gi trj nguyn nh
hm getMaxConnection()). Nhng hm khc cho lai kt qu l cc i tng ca
ResultSet nh: getColumns(), getTableType(), getPrivileges(), v.v.
/. +,- 0esult1et.etaData
Giao din ResultSetMetaData cung cp cc thng tin v cu trc c th ca
ResultSet, bao gm c s ct, tn v gi trj ca chng. V d sau l mt chng trnh
hin thj cc kiu v gi trj ca tng trng ca mt bng d liu.
V d 9.3 Chng trnh hin thj mt bng d liu.
import java.sql.*;
import java.util.StringTokenizer;
public class TableViewer {
final static String jdbcURL = "jdbc:odbc:StudentDB";
final static String jdbcDriver =
"sun.jdbc:odbc:JdbcOdbcDriver";
final static String table = "STUDENT";
public static void main(java.lang.String[]args) {
System.out.println("---Table Viewer ---");
try {
Class.forName(jdbcDriver);
Connection con =
DriverManager.getConnection(jdbcURL, "", "");
Statement stmt = con.createStatement();
// oc ra c bng Student v dua vo di tuong rs
ResultSet rs = stmt.executeQuery("SELECT * FROM " + table);
// oc ra cc thng tin v rs
ResultSetMetaData rsmd = rs.getMetaData();
// Xc djnh s ct ca rsmd
int colCount = rsmd.getColumnCount();
for(int col = 1; col <= colCount; col++)
{
// In ra tn v kiu ca tng trung d liu trong rsmd
System.out.print(rsmd.getColumnLabel(col));
System.out.print(" (" + rsmd.getColumnTypeName(col) + ")");
if(col < colCount)
System.out.print(", ");
}
System.out.println();
while(rs.next()){
7
// In ra dng d liu trong rsmd
for(int col = 1; col <= colCount; col++)
{
System.out.print(rs.getString(col));
if(col < colCount)
System.out.print(" ");
}
System.out.println();
}
rs.close();
stmt.close();
con.close();
}
catch (ClassNotFoundException e) {
System.out.println("Unable to load database driver class");
}
catch (SQLException se) {
System.out.println("SQL Exception: " + se.getMessage());
}
}
}
2. C3c b4,c c b5n 67 8(t n)i v,i c s d liu t9 :;t <ng d=ng Java
B4,c 1> Nap trnh iu khin
try{
Class.forName(oracle.jdbc.driver.OracleDriver);
}
catch(ClassNotFoundException e)
{
System.out.println(Loi nap trinh dieu khien:+e);
}
B4,c "> Xc jnh URL c s d liu
String host=dbhost.yourcompany.com;
String dbName=someName;
int port=1234;
String oracaleURL=jdbc:oracle:thin:@+host+:+port+dbName;
B4,c &> Thit lp lin kt
String username=hoan_td2001;
8
String password=topsecret;
Connection con=DriverManager.getConnecton(oracleURL,username,password);
B4,c *> Tao ra mt i tng Statement
Statement s=con.createStatement();
B4,c /> X l truy vn
String q=Select col1, col2, col3 from sometable;
ResultSet rs=s.executeQuery(q);
B4,c 2> X l kt qu
while(rs.next())
{
System.out.println(rs.getString(1)+ +
rs.getString(2)+ +
rs.getString(3));
}
Ct u tin c chi mc l 1 ch khng phi l 0.
B4,c ?> @Ang liBn 8(t
con.close();
Cc v d v kt ni c s d liu t ng dng Java.
V d v kt ni kiu 1:
import java.sql.*;
class DBOracle1
{
public static void main(String args[])throws ClassNotFoundException,
SQLException
{
try{
//Co the dung lenh nay de tai driver
Class.forName("oracle.jdbc.OracleDriver");
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
//Lien ket toi co so du lieu
Connection conn =
DriverManager.getConnection("jdbc:oracle:oci8:@HOAN", "scott", "tiger");
Statement stmt = conn.createStatement( );
ResultSet rset = stmt.executeQuery("select empno, ename from emp");
ResultSetMetaData rst=rset.getMetaData();
int numcol=rst.getColumnCount();
System.out.println("So cot cua bang la:"+numcol);
9
System.out.println("Schema Name:" + rst.getTableName(1));

for(int i=1;i<numcol+1;i++)
System.out.println(rst.getColumnName(i)+" "+rst.getColumnTypeName(i));
while(rset.next( ))
{
System.out.println(rset.getString("empno"));
System.out.println(rset.getString("ename"));
}
rset.close( );
stmt.close( );
conn.close( );
}
catch(Exception e)
{
System.err.println("Ex : "+e);
}
}
}
V d v kt ni kiu 2:
import java.io.*;
import java.sql.*;
import java.text.*;
public class DBOracle2 {
Connection conn;
public DBOracle2( )
{
try
{
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
Connection conn = DriverManager.getConnection("jdbc:oracle:oci8:@HOAN",
"scott", "tiger");
}
catch (SQLException e)
{
System.err.println(e.getMessage( ));
e.printStackTrace( );
}
10
}
public static void main(String[] args)throws Exception, IOException
{
new DBOracle2().process( );
}
public void process( ) throws IOException, SQLException
{
int rows = 0;
ResultSet rslt = null;
PreparedStatement pstmt = null;
String insert ="insert into EMP " +"( EMPNO, ENAME,JOB) " +"values " +"(
?, ?, ?)";
try {
System.out.println(insert);
pstmt = conn.prepareStatement(insert);
pstmt.setString( 1, "EMPNO" );
pstmt.setString( 2, "ENAME" );
pstmt.setString( 3,"JOB" );
rows = pstmt.executeUpdate( );
pstmt.close( );
pstmt = null;
System.out.println(rows + " rows inserted");
System.out.println("");
}
catch (SQLException e) {
System.err.println(e.getMessage( ));
}
finally {
if (pstmt != null)
try {
pstmt.close( );
}
catch(SQLException ignore)
{
}
}
11
}
protected void finalize( )throws Throwable {
if (conn != null)
try { conn.close( ); } catch (SQLException ignore) { }
super.finalize( );
}
}
V d v kt ni kiu 4:
//Type 4 Driver
import java.sql.*;
import java.util.*;
class DBOracle4
{
public static void main(String args[])throws ClassNotFoundException,
SQLException
{
try{
//Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());

Enumeration drivers = DriverManager.getDrivers();
while(drivers.hasMoreElements())
{
Driver driver = (Driver)drivers.nextElement();
System.out.println("Registered Driver:"+driver.getClass().getName());
}

//Lien ket toi co so du lieu
Connection conn =
DriverManager.getConnection("jdbc:Oracle:thin:@neworacle02:1521:HOAN", "scott",
"tiger");
DatabaseMetaData dbmd=conn.getMetaData();
12
System.out.println(dbmd.getDatabaseProductName());
System.out.println(dbmd.getDatabaseProductVersion());
Statement stmt = conn.createStatement( );
ResultSet rset = stmt.executeQuery("select empno, ename from emp");
ResultSetMetaData rst=rset.getMetaData();
int numcol=rst.getColumnCount();
System.out.println("So cot cua bang la:"+numcol);
System.out.println(rst.getTableName(1));

for(int i=1;i<numcol+1;i++)
System.out.println(rst.getColumnName(i)+"
"+rst.getColumnTypeName(i));
while(rset.next( ))
{
System.out.println(rset.getString("empno")+"
"+rset.getString("ename"));
}
rset.close( );
stmt.close( );
conn.close( );
}
catch(Exception e)
{
System.err.println("Ex : "+e);
}
}
}
?. 1 d=ng re-ared1tate:ent
i khi vic s dng mt i tng PreparedStatent hiu qu v tin li hn nhiu
so vi vic s dng i tng Statement. Kiu lnh c bit ny l lp con ca lp
Statement.
Khi no cn s dng i tng PreparedStatement
Nu ta mun x l mt i tng Statement nhiu ln, ta c th s dng i tng
PreparedStatement gim thi gian x l.
c trng chnh ca mt i tng PreparedStatement l n c cung cp trc
mt lnh SQL trc khi tao ra i tng. i tng PreparedStatement l mt lnh SQL
13
c bin djch trc. iu ny ngha l khi i tng PreparedStatement c x l,
h qun trj c s d liu chi cn x l lnh SQL ca PreparedStatement m khng phi
bin djch n.
Mc d PreparedStatement c th c s dng vi cc lnh SQL khng c tham
s nhng ta thng hay s dng cc lnh SQL c tham s. Uu im ca vic s dng
lnh SQL c tham s l ta c th s dng cng mt lnh v cung cp cho n cc gi trj
khc nhau mi khi x l. Ta s thy iu ny trong v d phn sau.
Tao mt i tng PreparedStatement
Ging nh cc i tng Statement, ban oc c th tao ra cc i tng
PrepraredStatement vi mt phng thc Connection. S dng mt kt ni m trong v
d trc l con, c th tao ra i tng PreparedStatement nhn hai tham s u vo
nh sau:
PreparedStatement updateSales = con.prepareStatement(
"UPDATE COFFEES SET SALES = ? WHERE COF_NAME LIKE ?");
Cung cp cc gi trj cho cc tham s ca i tng PreparedStatement
Ta cn cung cp cc gi trj c s dng thay cho vj tr ca cc du hi nu c
trc khi x l mt i tng PreparedStatement. Ta c th thc hin iu ny bng
cch goi mt trong cc phng thc setXXX c jnh ngha trong lp
PreparedStatement. Nu gi trj ta mun thay th cho du hi () l kiu int trong Java, ta
c th goi phng thc setnt. Nu gi trj ta mun thay th cho du () l kiu String
trong Java, ta c th goi phng thc setString,.Mt cch tng qut, ng vi mi kiu
trong ngn ng lp trnh Java s c mt phng thc setXXX tng ng.
V d:
import java.sql.*;
public class PreparedStmt{
public static void main(String args[]){
int empid;
String LastName;
String FirstName;
String query = "SELECT * FROM Employees where EmployeeID=?;";
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con =DriverManager.getConnection ("jdbc:odbc:MyData");
PreparedStatement pstmt = con.prepareStatement(query);
pstmt.setInt(1,2);
ResultSet rs = pstmt.executeQuery();
while (rs.next()) {
empid = rs.getInt("EmployeeID");
LastName = rs.getString("LastName");
FirstName = rs.getString("FirstName");
System.out.println(empid+", "+LastName+"\t"+FirstName+"\t");
}
14
}
catch(ClassNotFoundException e){
e.printStackTrace();
}
catch(SQLException e){
e.printStackTrace();
}
}

S dng mt vng lp thit lp cc gi trj


Ta c th s dng vng lp thit lp cc gi trj cho cc tham s u vo.
PreparedStatement updateSales;
String updateString = "update COFFEES " +
"set SALES = ? where COF_NAME like ?";
updateSales = con.prepareStatement(updateString);
int [] salesForWeek = {175, 150, 60, 155, 90};
String [] coffees = {"Colombian", "French_Roast", "Espresso",
"Colombian_Decaf", "French_Roast_Decaf"};
int len = coffees.length;
for(int i = 0; i < len; i++) {
updateSales.setInt(1, salesForWeek[i]);
updateSales.setString(2, coffees[i]);
updateSales.executeUpdate();
}
Cc gi trj tr v ca phng thc executeUpdate
Phng thc executeQuery tr v mt i tng ResultSet cha cc kt qu ca truy
vn c gi ti h qun trj c s d liu, gi trj tr v khi x l phng thc
executeUpdate l mt s nguyn int chi ra s hng trong bng c cp nht.
updateSales.setInt(1, 50);
updateSales.setString(2, "Espresso");
int n = updateSales.executeUpdate();
// n = 1 because one row had a change in it
C. 1 d=ng c3c giao t3c
Qun l giao tc
Mt giao tc l mt tp hp mt hoc nhiu lnh c x l cng vi nhau nh
mt chinh th thng nht (n vj). Khi x l mt giao tc hoc tt c cc lnh c x l
hoc khng lnh no c x l. Nhiu trng hp ta khng mun mt lnh c hiu lc
ngay nu lnh khc khng thnh cng.
iu ny c th c thc hin nh phng thc setAutoCommit() ca i tng
Connection. Phng thc ny nhn mt gi trj boolean lm tham s..
Ngn ch Auto-commit
Khi mt lin kt c tao ra, th lin kt ch auto-commit.
Mi lnh SQL c xem nh l mt giao tc v s c t ng hon thnh ngay
khi n c x l.
Cch cho php hai hoc nhiu lnh c nhm cng vi nhau thnh mt giao
tc l cm ch auto-commit.
V d:
15
con.setAutoCommit(false);
Xc nhn hon thnh mt giao tc
Mi khi ch auto-commit bj cm, khng c lnh SQL no s c xc nhn hon
thnh cho ti khi ta goi phng thc commit().
Ta c th thc hin iu ny bng cch goi phng thc commit() ca cc i tng lin
kt.
Nu ta c gng x l mt hay nhiu lnh trong mt giao tc v nhn c mt ngoai l
SQLException, ta cn goi phng thc rollback() hy b giao tc v khi ng lai ton
b giao tc.
con.setAutoCommit(false);
PreparedStatement updateName =null;
String query = null;
Query="UPDATE license SET name = ? WHERE id = 126"
updateName= con.prepareStatement(query);
updateName.setString(1, name);
updateName.executeUpdate();
PreparedStatement updateSex = null;
query = "UPDATE test SET test_value =?
updateSex = con.prepareStatement(query);
updateSex.setString(1, "Male");
updateSex.executeUpdate();
con.commit();
con.setAutoCommit(true);
V d:
import java.sql.*;
public class PreparedUpdate{
public static void main(String args[]) throws Exception{
int empid;
int rows=0;
String LastName;
String FirstName;
String query = "insert into EMP " +"(EmployeeID,LASTNAME,FIRSTNAME) "
+"values " +"(?,?, ?)";
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con =DriverManager.getConnection ("jdbc:odbc:MyData");
con.setAutoCommit(false);
PreparedStatement pstmt = con.prepareStatement(query);
pstmt.setInt(1,Integer.parseInt(args[0]));
pstmt.setString(2,args[1]);
pstmt.setString(3,args[2]);
16
rows = pstmt.executeUpdate( );
pstmt.close( );
pstmt = null;
System.out.println(rows + " rows inserted");
System.out.println("");
con.commit();
}
catch(ClassNotFoundException e){
e.printStackTrace();
}
catch(SQLException e){
e.printStackTrace();
}
}
}
C. 1 d=ng c3c giao t3c
Sau thc hin cc lnh: Cc chng trnh Java chi thc hin c cc lnh trn
CSDL thng qua i tng 1tate:ent.
Cc cu lnh SQL c th c thc hin tc th thng qua i tng 1tate:ent, c th
l mt cu lnh bin djch trc (i tng re-ared1tate:ent) hay c th l mt lnh
goi cc th tc ci sn (Stored Procedure) trong CSDL (i tng Callable1tate:ent).
Cc cu lnh SQL c th c thc hin thng qua phng thc executeQuery() kt
qu l mt i tng ResultSet, hay phng thc executeUpdate() kt qu l mt s
nguyn cho bit tng s cc record chju nh hng ca cu lnh va thc hin (thng
l cc cu lnh sa i d liu Update - Delete).
Trong trng hp c s dng trnh qun l transaction, cc phng thc rollback() c
dng phc hi trang thi trc v commit() xc nhn vic thc hin lnh.
chm dt cn xa kt ni, xa cc i tng gii phng ti nguyn ca h thng.
.
17

You might also like