Anda di halaman 1dari 20

MATERI PELATIHAN

JDBC

Ifnu Bima
ifnu@artivisi.com http://ifnu.artivisi.com

http://www.artivisi.com Jakarta, 2009

Daftar Isi
Koneksi Database Dengan JDBC.................................................................................1
Mengenal JDBC....................................................................................................................1 Database Driver..................................................................................................................2 Membuat Koneksi................................................................................................................3 Mengambil dan Memanipulasi Data dari Database..............................................................4 Menggunakan PreparedStatement...................................................................................... Bat!" #$e!ution..................................................................................................................% Menangani &ransa!tion.....................................................................................................1' D() dan Servi!e Pattern...................................................................................................11

HALAMAN III

KONEKSI DATABASE DENGAN JDBC | HALAMAN 1

Koneksi Database Dengan JDBC


Mengenal JDBC
Java Database Connectivity a a!ah "#$ yan% i%unakan Java untuk me!akukan koneksi en%an ap!ikasi !ain atau en%an berba%ai macam atabase. JD&C memun%kinkan kita untuk membuat ap!ikasi Java yan% me!akukan ti%a ha!: konek ke sumber ata, men%irimkan 'uery an statement ke atabase, menerima an men%o!ah resu!tset yan% ipero!eh ari atabase. JD&C mempunyai empat komponen : (. JD&C "#$ JD&C "#$ menye iakan meto e akses yan% se erhana ke sumber ata re!ationa! )*D&+,- men%%unakan pemro%raman Java. en%an men%%unakan JD&C "#$, kita bisa membuat pro%ram yan% apat men%eksekusi ,./, menerima hasi! *esu!t,et, an men%ubah ata a!am atabase. JD&C "#$ 0u%a mempunyai kemampuan untuk berinteraksi en%an !in%kun%an ter istribusi ari 0enis sumber ata yan% berbe a1be a. JD&C "#$ a a!ah ba%ian ari Java #!atform yan% isertakan a!am !ibrary JD2 maupun J*3. JD&C "#$ sekaran% ini su ah mencapai versi 4.0 yan% isertakan a!an JD2 5.0. JD&C "#$ 4.0 iba%i a!am ua packa%e yaitu : 0ava.s'! an 0ava6.s'!. 2. JD&C Driver +ana%er C!ass Driver+ana%er ari JD&C bertu%as untuk men efisikan ob0ect1ob0ect yan% apat i%unakan untuk me!akukan koneksi ke sebuah sumber ata. ,ecara tra isiona! Driver+ana%er te!ah men0a i tu!an% pun%%un% arsitektur JD&C.

HALAMAN

2 | JDBC
7. JD&C 8est ,uite JD&C 8est ,uite membantu kita untuk mencara river mana yan% cocok i%unakan untuk me!akukan sebuah koneksi ke sumber ata tertentu. 8es yan% i!akukan ti ak memer!ukan resource besar ataupun tes yan% komprehensif, namun cukup tes1tes se erhana yan% memastikan fitur1fitur pentin% JD&C apat ber0a!an en%an !ancar. 4. JD&C19D&C &ri %e &ri%e ini menye iakan fasi!itas JD&C untuk me!akukan koneksi ke sumber ata men%%unakan 9D&C )9pen Data&ase Connectivity- river. ,eba%ai catatan, an a per!u me!oa river 9D&C i setiap komputer c!ient untuk apat men%%unakan bri %e ini. ,eba%ai konsekuensinya, cara ini hanya cocok i!akukan i !in%kun%an intranet imana isu insta!asi ti ak men0a i masa!ah. Den%an keempat komponen yan% ipunyainya, JD&C men0a i too!s yan% apat ian a!kan untuk me!akukan koneksi, men%ambi! ata an merubah ata ari berba%ai macam sumber ata. +o u! ini hanya akan membahas ua komponen pertama ari keempat komponen yan% ipunyai o!eh JD&C, yaitu JD&C "#$ an Driver+ana%er. ,umber ata yan% i%unakan a a!ah *e!ationa! Database.

Database Driver
JD&C memer!ukan atabase river untuk me!akukan koneksi ke suatu sumber ata. Database river ini bersifat spesifik untuk setiap 0enis sumber ata. Database river biasanya ibuat o!eh pihak pembuat sumber atanya, namun ti ak 0aran% 0u%a komunitas atau pihak keti%a menye iakan atabase river untuk sebuah sumber ata tertentu. #er!u ipahami seka!i !a%i bahwa atabase river bersifat spesifik untuk setiap 0enis sumber ata. +isa!nya, Database Driver +y,'! hanya bisa i%unakan untuk me!akukan koneksi ke atabase +y,'! an be%itu 0u%a atabase river untuk #ost%re ,./ 0u%a hanya bisa i%unakan untuk me!akukan koneksi ke atabase #ost%re ,./.

KONEKSI DATABASE DENGAN JDBC | HALAMAN 3


Database river untuk setiap D&+, pa a umumnya apat i own!oa ari website pembuat D&+, tersebut. &eberapa ven or D&+, menyebut Database river ini en%an sebutan Java Connector )J/Connector-. Database river biasanya ibun%kus a!am fi!e yan% berekstensi 0ar. ,etiap atabase river harus men%imp!ement interface 0ava.s'!.Driver.

Membuat Koneksi
+e!akukan koneksi ke atabase me!ibatkan ua !an%kah: +e!oa river an membuat koneksi itu sen iri. Cara me!oa river san%at mu ah, pertama !etakkan fi!e 0ar atabase river ke a!am c!asspath. 2emu ian !oa river en%an menambahkan ko e berikut ini: Class.forName(com.mysql.jdbc.Driver); :ama c!ass atabase river untuk setiap D&+, berbe a, an a bisa menemukan nama c!ass tersebut a!am okumentasi river atabase yan% an a %unakan. Da!am contoh ini, nama c!ass atabase river ari +y,'! a a!ah com.mys'!.0 bc.Driver. +eman%%i! metho C!ass.for:ame secara otomatis membuat instance ari atabase river, c!ass Driver+ana%er secara otomatis 0u%a ipan%%i! untuk men%e!o!a c!ass atabase river ini. Ja i an a ti ak per!u men%%unakan statement new untuk membuat instance ari c!ass atabase river tersebut. /an%kah berikutnya a a!ah membuat koneksi ke atabase men%%unakan atabase river yan% su ah i!oa ta i. C!ass Driver+ana%er beker0a sama en%an interface Driver untuk men%e!o!a river1 river yan% i!oa o!eh ap!ikasi, 0a i a!am satu sesi an a bisa me!oa beberapa atabase river yan% berbe a. 2etika kita benar1benar me!akukan koneksi, JD&C 8est ,uite akan me!akukan seran%kaian tes untuk menentukan river mana yan% akan i%unakan. #arameter yan% i%unakan untuk menentukan river yan% sesuai a a!ah ;*/. "p!ikasi yan% akan me!akukan koneksi ke atabase menye iakan ;*/ pen%ena! ari server atabse tersebut. ,eba%ai contoh a a!ah ;*/ yan% i%unakan untuk me!akukan koneksi ke +y,'! :

HALAMAN

4 | JDBC
jdbc:mysql://[host]:[port]/[schema] contoh konkritnya : jdbc:mysql://localhost:3306/latihan ,etiap ven or D&+, akan menyertakan cara untuk menentukan ;*/ ini i a!am okumentasi. "n a tin%%a! membaca okumentasi tersebut tanpa harus khawatir ti ak menemukan informasi yan% an a per!ukan. +etho Driver+ana%er.%etConnection bertu%as untuk membuat koneksi: Connection conn = DriverManager.getConnection( jdbc:mysql://localhost:3306/latihan); Da!am kebanyakan kasus an a 0u%a harus memasukkan parameter username an passwor untuk apat me!akukan koneksi ke a!am atabase. +etho %etConnection menerima ;sername seba%ai parameter ke ua an paswor seba%ai parameter keti%a, sehin%%a ko e iatas apat irubah men0a i : Connection conn = DriverManager.getConnection( jdbc:mysql://localhost:3306/latihan, root,); Jika sa!ah satu ari river yan% i!oa berhasi! i%unakan untuk me!akukan koneksi en%an ;*/ tersebut, maka koneksi ke atabase berhasi! i!aksanakan. C!ass Connection akan meme%an% informasi koneksi ke atabase yan% i efinisikan o!eh ;*/ tersebut. ,ete!ah sukses me!akukan koneksi ke atabase, kita apat men%ambi! ata ari atabase men%%unakan perintah 'uery ataupun me!akukan perubahan terha ap atabase. ba%ian berikut ini akan meneran%kan ba%aimana cara men%ambi! an memanipu!asi ata ari atabase.

KONEKSI DATABASE DENGAN JDBC | HALAMAN 5

Mengambil dan Memanipulasi Data dari Database


#roses pen%ambi!an ata ari atabase memer!ukan suatu c!ass untuk menampun% ata yan% berhasi! iambi!, c!ass tersebut harus men%imp!ement interface *esu!t,et. 9b0ect yan% bertipe *esu!t,et apat mempunyai !eve! fun%siona!itas yan% berbe a, ha! ini ter%antun% ari tipe ari resu!t set. /eve! fun%siona!itas ari setiap tipe resu!t set ibe akan ber asarkan ua area: Den%an cara ba%aimana resu!t set itu apat imanipu!asi &a%aimana resu!t set itu menan%ani perubahan ata yan% i!akukan o!eh proses !ain secara bersamaan )concurrent-.

JD&C menye iakan ti%a tipe resu!t set untuk tu0uan berbe a: (. 8<#3=>9*?"*D=9:/< : resu!t set tersebut ti ak bisa ber0a!an mun ur, res!ut set hanya bisa ber0a!an ma0u ari baris pertama hin%%a baris terakhir. resu!t set hanya men%%ambarkan kea aan ata ketika 'uery i0a!ankan atau ketika ata iterima o!eh resu! set. Jika sete!ah itu a a perubahan ata a!am atabase, resu!t set ti ak akan iup ate a!ias ti ak a a perubahan a!am resu!t set tipe ini. 8<#3=,C*9//=$:,3:,$8$@3 : resu!t set apat ber0a!an ma0u mun ur. resu!t set apat ber0a!an ma0u ari row pertama hin%%a terakhir atau ber%erak bebas ber asarkan posisi re!atif atau abso!ute. 8<#3=,C*9//=,3:,$8$@3 : resu!t set apat ber0a!an ma0u mun ur. resu!t set apat ber0a!an ma0u ari row pertama hin%%a terakhir atau ber%erak bebas ber asarkan posisi re!atif atau abso!ute.

2.

7.

$nstance ari ob0ect bertipe *esu!t,et iper!ukan untuk menampun% hasi! kemba!ian ata ari atabase. ,ebe!um kita bisa mempero!eh instance ari *esu!t,et, kita harus membuat instance

HALAMAN

6 | JDBC
ari c!ass ,tatement. C!ass ,tatement mempunyai metho e6ecute.uery yan% i%unakan untuk men0a!ankan perintah 'uery a!am atabase kemu ian men%emba!ikan ata hasi! eksekusi 'uery ke a!am ob0ect *esu!t,et. &erikut ini a a!ah contoh ko e untuk membuat instance c!ass ,tatement, kemu ian men0a!ankan 'uery untuk men%ambi! ata ari atabase yan% hasi!nya ipe%an% o!eh *esu!t,et : Statement statement = conn.createStatement( ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); ResulSet rs = statement.executeQuery(select * from Customers); *esu!t,et akan me!etakkan kursornya )posisi pembacaan baris- i sebuah posisi sebe!um baris pertama. ;ntuk men%%erakkan kursor ma0u, mun ur, ke suatu posisi re!atif atau ke suatu posisi abso!ute tertentu, %unakan metho 1metho ari *esu!t,et: ne6t)- 11 men%arahkan kursor ma0u satu baris. previous)- 11 men%arahkan kursor mun ur satu baris. first)- 11 men%arahkan kursor ke baris pertama. !ast)- 11 men%arahkan kursor ke baris terakhir. before>irst)- 11 men%arahkan kursor ke sebe!um baris pertama. after/ast)- 11 men%arahkan kursor ke sete!ah baris terakhir. re!ative)int rows- 11 men%arahkan kursor re!atif ari posisinya yan% sekaran%. ,et ni!ai rows en%an ni!ai positif untuk ma0u, an ni!ai ne%atif untuk mun ur. abso!ute)int row:umber- A men%arahkan kursor ke posisi tertentu sesuai en%an ni!ai row:umber, an tentu sa0a ni!ainya harus positif.

KONEKSI DATABASE DENGAN JDBC | HALAMAN 7


$nterface *esu!t,et menye iakan metho %etter untuk men%akses ni!ai ari setiap ko!om a!am baris yan% se an% aktif. #arameter fun%si %etter bisa menerima ni!ai in e6 ari ko!om ataupun nama ko!omnya. :amun be%itu, pen%%unaan ni!ai in e6 !ebih efisien iban in% men%%unakan nama ko!om. :i!ai in e6 imu!ai en%an satu hin%%a banyaknya ko!om. #en%%unaan nama ko!om a a!ah case insensitive, artinya huruf keci! atau huruf besar ti ak men0a i masa!ah. %et,trin% i%unakan untuk men%ambi! ko!om en%an tiper ata char, varchar atau tipe ata strin% !ainya. %et$nt i%unakan untuk men%ambi! ko!om en%an tipe ata inte%er. &erikut ini a!ah contoh pro%ram !en%kap hin%%a men%ambi! ata ari atabase. ari me!akukan koneksi

Class.forName(com.mysql.jdbc.Driver); Connection conn = DriverManager.getConnection( jdbc:mysql://localhost:3306/latihan, root,); Statement statement = conn.createStatement( ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); ResulSet rs = statement.executeQuery(select * from Customers); while(rs.next()){ System.out.println(rs.getInt(id)); System.out.println(rs.getString(Nama)); } +etho e6ecute.uery hanya apat men0a!ankan perintah ,./ se!ect, %unakan metho e6ecute;p ate untuk men0a!ankan perintah insert, up ate an e!ete. Basi! ari eksekusi insert, up ate an e!ete ti ak men%emba!ikan resu!t set, tetapi men%emba!ikan sebuah ni!ai inte%er yan% merepresentasikan status hasi! eksekusi metho e6ecute;p ate. &erikut ini contoh insert, up ate an e!ete :

HALAMAN

8 | JDBC
result = statement.executeUpdate( "update Customers set nama ='roby' nama='andy'"); result = statement.executeUpdate( "delete Customers where nama='andy'");

where

+en%%unakan e6ecute.uery an e6ecute;p ate san%at mu ah an f!eksib!e, namun san%at ti ak efisien, #repare ,tatement menawarkan keun%%u!an a!am bentuk efisiensi.

Menggunakan PreparedStatement
+eman%%i! metho e6ecute;p ate beru!an%1u!an%, misa!nya me!akukan insert ratusan atau ribuan baris, san%at ti ak efisien. Ba! ini isebabkan karena D&+, harus memproses setiap 'uery yan% ikirimkan a!am beberapa !an%kah: memparsin% 'uery, men%compi!e 'uery an kemu ian baru men%eksekusi 'uery tersebut. #repare ,tatement menawarkan so!usi yan% !ebih baik a!am menan%ani kea aan tersebut. #repare ,tatement menyaratkan 'uery yan% akan ieksekusi i efinisikan ter!ebih ahu!u ketika #repare ,tatement ibuat. 2emu ian 'uery tersebut ikirimkan ke a!am atabase untuk icompi!e ter!ebih ahu!u sebe!um i%unakan. 2onsekuensinya, #repare ,tatement bukan hanya mempunyai 'uery, tetapi mempunyai 'uery yan% su ah icompi!e. 2etika #repare ,tatement i0a!ankan, D&+, ti ak per!u me!akukan kompi!asi u!an% terha ap 'uery yan% i0a!ankan #repare ,tatement. Ba! ini!ah yan% menyebabkan #repare ,tatement 0auh !ebih efisien iban in%kan men%%unakan metho ,tatement.e6ecute;p ate. &erikut ini contoh pembuatan #repare ,tatement men%%unakan c!ass Connection yan% te!ah ibuat sebe!umnya : PreparedStatement ps = conn.prepareStatement( update T_PERSON set name = ? where name = ?); #erhatikan tan a C yan% a a a!am 'uery iatas, tan a C isebut seba%ai parameter. 2ita bisa memberikan ni!ai yan% berbe a ke a!am parameter a!am setiap peman%%i!an #repare ,tatement. +etho set,trin%, set>!oat, set$nt an beberapa metho !ain

KONEKSI DATABASE DENGAN JDBC | HALAMAN 9


i%unakan untuk memasukkan ni!ai ari setiap parameter. +etho tersebut mempunyai ua parameter, parameter pertama a a!ah int yan% i%unakan untuk menentukan parameter #repare ,tatement mana yan% akan iberi ni!ai. #arameter ke ua a a!ah ni!ai yan% akan imasukkan ke a!am #repare ,tatement, tipe ata ari parameter ke ua ter%antun% ari metho yan% i%unakan. &er asarkan ko e iatas, berikut ini contoh pen%%unaan metho #repare ,tatement.set,trin% : ps.setString(1,andy); ps.setString(2,rizal); 2o e iatas memberikan contoh ba%aimana memasukkan ni!ai ke a!am parameter #repare ,tatement. &aris pertama memasukkan ,trin% Dan yE ke a!am parameter pertama an baris ke ua memasukkan ,trin% DriFa!E ke parameter ke ua. ,ehin%%a peman%%i!an 'uery o!eh #repare ,tatement ber asarkan ko e iatas sama en%an 'uery statement i bawah ini : update T_PERSON set name = 'andy' where name = 'rizal' &erikut ini contoh !en%kap pen%%unaan #repare ,tatement untuk me!akukan up ate an insert ata : PreparedStatement pInsert = conn.prepareStatement( "insert into Person(name) values(?)"); pInsert.setString(1,"dian"); pInsert.executeUpdate(); PreparedStatement pUpdate = conn.prepareStatement( "update Person set name=? where name=?"); pUpdate.setString(1,"andry"); pUpdate.setString(2,"andri"); pUpdate.executeUpdate(); Da!am contoh iatas, insert an up ate ata hanya i!aksanakan seka!i sa0a, ha! ini ti ak memberikan %ambaran yan% tepat untuk me!ihat keun%%u!an #repare ,tatement iban in%kan ,tatement.e6ecute;p ate.

Batch Execution
+isa!nya kita in%in men%1insert seratus baris ata a!am sebuah !oop, kita bisa men%%unakan fasi!itas batc e6ecution ari #repare ,tatement. batch e6ecution men%umpu!kan semua eksekusi pro%ram yan% akan i!aksanakan, sete!ah semuanya terkumpu! batch e6ecution kemu ian men%irimkan kumpu!an

HALAMAN

10 | JDBC
eksekusi pro%ram secara bersamaan ke D&+, a!am satu kesatuan. +eto e ini san%at efisien karena men%uran%i overhea yan% iper!ukan pro%ram untuk berkomunikasi en%an D&+,. Da!am contoh i bawah ini kita akan men%%unakan batch e6ecution untuk me!akukan insert ata sebanyak seratus ka!i. PreparedStatement pInsert = conn.prepareStatement( "insert into Person(nama) values(?)"); for(int i=0;i<100;i++){ pInsert.setString(1,"user ke " + i); pInsert.addBatch(); } pInsert.executeBatch(); ,etiap ka!i iterasi, metho set,trin% ipan%%i! untuk men%isikan sebuah strin% ke a!am #repare ,tatement, kemu ian metho a &atch ipan%%i! untuk men%umpu!kan batch a!am satu wa ah. ,ete!ah iterasi se!esai, metho e6ecute&atch ipan%%i! untuk me!aksanakan semua keseratus instruksi insert secara berurut en%an seka!i sa0a me!aksanakan koneksi ke atabase.

Menangani Transaction
Dukun%an transaction o!eh JD&C ter%antun% en%an Databasenya, karena a a atabase yan% men ukun% transaction an a a pu!a atabase yan% ti ak men ukun% transaction. +y,./ men ukun% transaction 0ika kita men%%unakan $nnoD& seba%ai sistem tab!enya, ka!au kita men%%unakan +y$,"+ maka transaction ti ak i ukun%. 8ransaction merupakan konsep pentin% ari atabase. 8ransaction memastikan perubahan ata i!aksanakan en%an kai ah "C$D )"tomicity, Consistency, $so!ation, Durabi!ity-. 2ai ah ini memastikan semua proses perubahan ata ber0a!an secara benar, 0ika a a yan% sa!ah maka semua perubahan a!am satu kesatuan !o%ika harus ibata!kan )ro!!back-. +ari kita eva!uasi ko e iatas a%ar men%%unakan transaction, sehin%%a 0ika satu proses insert %a%a!, maka semua insert yan% i!aksanakan sebe!umnya akan ibata!kan :

KONEKSI DATABASE DENGAN JDBC | HALAMAN 11


try{ connection.setAutoCommit(false); PreparedStatement pInsert = conn.prepareStatement( "insert into Person(nama) values(?)"); for(int i=0;i<100;i++){ pInsert.setString(1,"user ke " + i); pInsert.addBatch(); } pInsert.executeBatch(); connection.commit(); connection.setAutoCommit(true); } catch (SQLException ex) { try{ connection.rollback(); }catch(SQLException e){ } }

DAO dan Service Pattern


"kses terha ap atabase merupakan ba%ian yan% san%at pentin% ari ap!ikasi atabase. #en%%unaan pattern yan% sesuai apat memberikan manfaat san%at besar. #attern yan% serin% i%unakan a!am akses atabase a a!ah D"9 )Data "ccess 9b0ect- an ,ervice/>aca e pattern. 2e ua pattern ini i%unakan untuk menerapkan Dseparation of concernE atau pemisahan ko e proram ber asarkan fun%si ko e pro%ram. ,emua ko e untuk akses ata harus ipisahkan en%an ko e untuk pen%aturan user inteface. Ba! ini memun%kinkan ko e akses ata yan% ibuat untuk ap!ikasi esktop, en%an mu ah i%unakan untuk ap!ikasi web. #enerapan konsep separation of concern secara isip!in, apat men%hasi!kan ko e pro%ram yan% apat ites secara otomatis men%%unakan J;nit atau D&;nit. ;nit testin% merupakan paramater utama a!am menentukan apakah ko e pro%ram yan% kita hasi!kan mempunyai mutu yan% tin%%i atau ti ak. Covera%e unit testin% yan% tin%%i mencerminkan ko e pro%ram yan% berkua!itas tin%%i pu!a. Dao pattern berisi semua ko e untuk men%akses ata, seperti 'uery. ,emua ko e yan% sepesifik terha ap imp!ementasi akses ata berhenti i sini, !apisan !ebih atas ti ak bo!eh tahu ba%aimana

HALAMAN

12 | JDBC
akses ata iterapkan, apakah men%%unakan JD&C murni atau Bibernate atau J#". /apisan !ainya hanya per!u tahu fun%siona!itas ari suatu metho i a!am D"9 c!ass, ti ak per!u tahu ba%imana metho tersebut iimp!ementasikan. C!ass D"9 akan mempunyai metho seperti save, e!ete, %et&y$ atau %et"!!. #raktek yan% !aFim i%unakan a a!ah satu buah 3ntity/8ab!e akan mempunyai satu buah c!ass D"9. Di bawah ini a a!ah contoh C!ass D"9 men%%unakan JD&C untuk tab!e 8=C"83G9*< :

KONEKSI DATABASE DENGAN JDBC | HALAMAN 13


public class CategoryDaoJdbc { private Connection connection; private PreparedStatement insertStatement; private PreparedStatement updateStatement; private PreparedStatement deleteStatement; private PreparedStatement getByIdStatement; private PreparedStatement getAllStatement; private final String insertQuery = "insert into T_CATEGORY(name,description)" + " values(?,?)"; private final String updateQuery = "update T_CATEGORY set name=?, description=? " + " where id=?"; private final String deleteQuery = "delete from T_CATEGORY where id=?"; private final String getByIdQuery = "select * from T_CATEGORY where id =?"; private final String getAllQuery = "select * from T_CATEGORY"; public void setConnection(Connection connection) { try { this.connection = connection; insertStatement = this.connection.prepareStatement( insertQuery,Statement.RETURN_GENERATED_KEYS); updateStatement = this.connection.prepareStatement( updateQuery); deleteStatement = this.connection.prepareStatement( deleteQuery); getByIdStatement = this.connection.prepareStatement( getByIdQuery); getAllStatement = this.connection.prepareStatement( getAllQuery); } catch (SQLException ex) { } } public void save(Category category) { try { if (category.getId() == null) { insertStatement.setString(1,

HALAMAN

14 | JDBC
category.getName()); insertStatement.setString(2, category.getDescription()); int id = insertStatement.executeUpdate(); category.setId(id); } else { updateStatement.setString(1, category.getName()); updateStatement.setString(2, category.getDescription()); updateStatement.setInt(3, category.getId()); updateStatement.executeUpdate(); } } catch (SQLException ex) { }

public void delete(Category category) { try { deleteStatement.setInt(1, category.getId()); deleteStatement.executeUpdate(); } catch (SQLException ex) { } } public Category getById(Long id) { try { getByIdStatement.setLong(1, id); ResultSet rs = getByIdStatement.executeQuery(); //proses mapping dari relational ke object if (rs.next()) { Category category = new Category(); category.setId(rs.getInt("id")); category.setName(rs.getString("name")); category.setDescription( rs.getString("description")); return category; } } catch (SQLException ex) { } return null; } public List<Category> getAll() { try { List<Category> categories = new ArrayList<Category>();

KONEKSI DATABASE DENGAN JDBC | HALAMAN 15


ResultSet rs = getAllStatement.executeQuery(); while(rs.next()){ Category category = new Category(); category.setId(rs.getInt("id")); category.setName(rs.getString("name")); category.setDescription( rs.getString("description")); categories.add(category); } return categories; } catch (SQLException ex) { } return null;

} }

,ervice pattern i%unakan utamanya untuk menye erhanakan c!ass1c!ass D"9 yan% a a, misa!nya kita mempunyai H0 buah tab!e maka !aFimnya akan a a H0 buah c!ass D"9. C!ass D"9 tersebut per!u ise erhanakan, caranya a a!ah en%an men%e!ompokkan c!ass1c!ass D"9 a!am satu mo u! ap!ikasi ke c!ass ,ervice. +isa!nya D"9 yan% berhubun%an en%an user mana%ement ke a!am c!ass ;ser,ervice. 8ransaction iatur a!am c!ass ,ervice, praktek yan% !aFim i%unakan a a!ah satu metho a!am c!ass service a a!ah satu scoop transaction. Ja i ketika metho a!am service mu!ai ieksekusi transaction akan imu!ai )be%in-, ketika metho akan berakhir, transaction akan icommit. &erikut ini a a!ah contoh c!ass ,ervice :

HALAMAN

16 | JDBC
public class ServiceJdbc { private CategoryDaoJdbc categoryDao; private Connection connection; public void setDataSource(DataSource dataSource){ try { connection = dataSource.getConnection(); categoryDao = new CategoryDaoJdbc(); categoryDao.setConnection(connection); } catch (SQLException ex) { } } public void save(Category category){ try { connection.setAutoCommit(false); categoryDao.save(category); connection.commit(); connection.setAutoCommit(true); } catch (SQLException ex) { try{ connection.rollback(); }catch(SQLException e){ } } } public void delete(Category category){ try { connection.setAutoCommit(false); categoryDao.save(category); connection.commit(); connection.setAutoCommit(true); } catch (SQLException ex) { try{ connection.rollback(); }catch(SQLException e){ } } } public Category getGroup(Long id){ return categoryDao.getById(id); } public List<Category> getGroups(){

KONEKSI DATABASE DENGAN JDBC | HALAMAN 17


return categoryDao.getAll();

} }

,ete!ah c!ass D"9 an service berhasi! ba%aimana cara men%%unakannya : public class MainJdbc {

ibuat, mari kita !ihat

public static void main(String[] args) { MysqlDataSource dataSource = new MysqlDataSource(); dataSource.setUser("root"); dataSource.setPassword("admin"); dataSource.setDatabaseName("latihan"); dataSource.setServerName("localhost"); dataSource.setPortNumber(1527); ServiceJdbc service = new ServiceJdbc(); service.setDataSource(dataSource); Category category = new Category(); category.setName("administrator"); service.save(category); System.out.println("id : " + category.getId()); System.out.println("name : " + category.getName()); try { dataSource.getConnection().close(); } catch (SQLException ex) { } } } ,ete!ah men%ena! JD&C, kita akan membahas cara men%akses atabase yan% !ebih baik en%an man%%unakan J#". Den%an men%%unakan J#" ko e pro%ram yan% akan ibuat akan !ebih rin%kas an ter!ihat konsep 99# iban in% en%an JD&C murni. J#" a a!ah framework 9*+ untuk memetakan tabe! a!am atabase an c!ass a!am konsep 99#. Den%an men%%unakan J#" ko e pro%ram kita akan !ebih rapi an ter!ihat 99#.

Anda mungkin juga menyukai