Unknown

Teknologi

Dari Wikipedia bahasa Indonesia, ensiklopedia bebas

Pada pertengahan abad ke-20, manusia telah mencapai kecukupan teknologi untuk kali pertama meninggalkan atmosfer Bumi dan menjelajahi ruang angkasa.
Teknologi adalah keseluruhan sarana untuk menyediakan barang-barang yang diperlukan bagi kelangsungan dan kenyamanan hidup manusia.
Penggunaan teknologi oleh manusia diawali dengan pengubahan sumber daya alam menjadi alat-alat sederhana. Penemuan prasejarah tentang kemampuan mengendalikan api telah menaikkan ketersediaan sumber-sumber pangan, sedangkan penciptaan roda telah membantu manusia dalam beperjalanan dan mengendalikan lingkungan mereka. Perkembangan teknologi terbaru, termasuk di antaranya mesin cetak, telepon, dan Internet, telah memperkecil hambatan fisik terhadap komunikasi dan memungkinkan manusia untuk berinteraksi secara bebas dalam skala global. Tetapi, tidak semua teknologi digunakan untuk tujuan damai; pengembangan senjata penghancur yang semakin hebat telah berlangsung sepanjang sejarah, dari pentungan sampai senjata nuklir.
Teknologi telah memengaruhi masyarakat dan sekelilingnya dalam banyak cara. Di banyak kelompok masyarakat, teknologi telah membantu memperbaiki ekonomi (termasuk ekonomi global masa kini) dan telah memungkinkan bertambahnya kaum senggang. Banyak proses teknologi menghasilkan produk sampingan yang tidak dikehendaki, yang disebut pencemar, dan menguras sumber daya alam, merugikan dan merusak Bumi dan lingkungannya. Berbagai macam penerapan teknologi telah memengaruhi nilai suatu masyarakat dan teknologi baru seringkali mencuatkan pertanyaan-pertanyaan etika baru. Sebagai contoh, meluasnya gagasan tentang efisiensi dalam konteks produktivitas manusia, suatu istilah yang pada awalnynya hanya menyangku permesinan, contoh lainnya adalah tantangan norma-norma tradisional.
bahwa keadaan ini membahayakan lingkungan dan mengucilkan manusia; penyokong paham-paham seperti transhumanisme dan tekno-progresivisme memandang proses teknologi yang berkelanjutan sebagai hal yang menguntungkan bagi masyarakat dan kondisi manusia. Tentu saja, paling sedikit hingga saat ini, diyakini bahwa pengembangan teknologi hanya terbatas bagi umat manusia, tetapi kajian-kajian ilmiah terbaru mengisyaratkan bahwa primata lainnya dan komunitas lumba-lumba tertentu telah mengembangkan alat-alat sederhana dan belajar untuk mewariskan pengetahuan mereka kepada keturunan mereka.

Definisi dan penggunaan


Penciptaan mesin cetak telah memungkinkan para ilmuwan dan politisi mengomunikasikan gagasan-gagasan mereka secara lebih mudah, kunci pembuka bagi Abad Pencerahan; sebuah contoh teknologi sebagai kekuatan budaya.
Penggunaan istilah 'teknologi' (bahasa Inggris: technology) telah berubah secara signifikan lebih dari 200 tahun terakhir. Sebelum abad ke-20, istilah ini tidaklah lazim dalam bahasa Inggris, dan biasanya merujuk pada penggambaran atau pengkajian seni berguna.[1] Istilah ini seringkali dihubungkan dengan pendidikan teknik, seperti di Institut Teknologi Massachusetts (didirikan pada tahun 1861).[2] Istilah technology mulai menonjol pada abad ke-20 seiring dengan bergulirnya Revolusi Industri Kedua. Pengertian technology berubah pada permulaan abad ke-20 ketika para ilmuwan sosial Amerika, dimulai oleh Thorstein Veblen, menerjemahkan gagasan-gagasan dari konsep Jerman, Technik, menjadi technology. Dalam bahasa Jerman dan bahasa-bahasa Eropa lainnya, perbedaan hadir di antara Technik dan Technologie yang saat itu justru nihil dalam bahasa Inggris, karena kedua-dua istilah itu biasa diterjemahkan sebagai technology. Pada dasawarsa 1930-an, technology tidak hanya merujuk pada 'pengkajian' seni-seni industri, tetapi juga pada seni-seni industri itu sendiri.[3] Pada tahun 1937, seorang sosiolog Amerika, Read Bain, menulis bahwa technology includes all tools, machines, utensils, weapons, instruments, housing, clothing, communicating and transporting devices and the skills by which we produce and use them ("teknologi meliputi semua alat, mesin, aparat, perkakas, senjata, perumahan, pakaian, peranti pengangkut/pemindah dan pengomunikasi, dan keterampilan yang memungkinkan kita menghasilkan semua itu").[4] Definisi yang diajukan Bain masih lazim dipakai oleh kaum terpelajar hingga saat ini, terkhusus ilmuwan sosial. Tetapi ada juga definisi yang sama menonjolnya, yakni definisi teknologi sebagai sains terapan, khususnya di kalangan para ilmuwan dan insinyur, meskipun sebagian besar ilmuwan sosial yang mempelajari teknologi menolak definisi ini.[5] Yang lebih baru, para kaum terpelajar telah meminjam dari para filsuf Eropa, technique, untuk memperluas makna technology ke berbagai macam bentuk nalar instrumental, seperti dalam karya Foucault tentang techniques de soi, yang diterjemahkan sebagai technologies of the self atau teknologi diri.
Kamus-kamus dan para sarjana telah memberikan berbagai macam definisi. Kamus Merriam-Webster memberikan definisi "technology" sebagai the practical application of knowledge especially in a particular area (terapan praktis pengetahuan, khususnya dalam ruang lingkup tertentu) dan a capability given by the practical application of knowledge (kemampuan yang diberikan oleh terapan praktis pengetahuan).[6] Ursula Franklin, dalam karyanya dari tahun 1989, kuliah "Real World of Technology", memberikan definisi lain konsep ini; yakni practice, the way we do things around here (praktis, cara kita memperbuat ini semua di sekitaran sini).[7] Istilah ini seringkali digunakan untuk mengimplikasikan suatu lapangan teknologi tertentu, atau untuk merujuk teknologi tinggi atau sekadar elektronik konsumen, bukannya teknologi secara keseluruhan.[8] Bernard Stiegler, dalam Technics and Time, 1, mendefinisikan technology dalam dua cara: sebagai the pursuit of life by means other than life (pencarian kehidupan, dalam artian lebih dari sekadar hidup), dan sebagai organized inorganic matter (zat-zat anorganik yang tersusun rapi).[9]
Secara umum, teknologi dapat didefinisikan sebagai entitas, benda maupun tak benda yang diciptakan secara terpadu melalui perbuatan dan pemikiran untuk mencapai suatu nilai. Dalam penggunaan ini, teknologi merujuk pada alat dan mesin yang dapat digunakan untuk menyelesaikan masalah-masalah di dunia nyata. Ia adalah istilah yang mencakupi banyak hal, dapat juga meliputi alat-alat sederhana, seperti linggis atau sendok kayu, atau mesin-mesin yang rumit, seperti stasiun luar angkasa atau pemercepat partikel. Alat dan mesin tidak mesti berwujud benda; teknologi virtual, seperti perangkat lunak dan metode bisnis, juga termasuk ke dalam definisi teknologi ini.[10]
Kata "teknologi" juga digunakan untuk merujuk sekumpulan teknik-teknik. Dalam konteks ini, ia adalah keadaan pengetahuan manusia saat ini tentang bagaimana cara untuk memadukan sumber-sumber, guna menghasilkan produk-produk yang dikehendaki, menyelesaikan masalah, memenuhi kebutuhan, atau memuaskan keinginan; ia meliputi metode teknis, keterampilan, proses, teknik, perangkat, dan bahan mentah. Ketika dipadukan dengan istilah lain, seperti "teknologi medis" atau "teknologi luar angkasa", ia merujuk pada keadaan pengetahuan dan perangkat disiplin pengetahuan masing-masing. "Teknologi state-of-the-art" (teknologi termutakhir, sekaligus tercanggih) merujuk pada teknologi tinggi yang tersedia bagi kemanusiaan di ranah manapun.
Teknologi dapat dipandang sebagai kegiatan yang membentuk atau mengubah kebudayaan.[11] Selain itu, teknologi adalah terapan matematika, sains, dan berbagai seni untuk faedah kehidupan seperti yang dikenal saat ini. Sebuah contoh modern adalah bangkitnya teknologi komunikasi, yang memperkecil hambatan bagi interaksi sesama manusia, dan sebagai hasilnya, telah membantu melahirkan sub-sub kebudayaan baru; bangkitnya budaya dunia maya yang berbasis pada perkembangan Internet dan komputer.[12] Tidak semua teknologi memperbaiki budaya dalam cara yang kreatif; teknologi dapat juga membantu mempermudah penindasan politik dan peperangan melalui alat seperti pistol atau bedil. Sebagai suatu kegiatan budaya, teknologi memangsa ilmu dan rekayasa, yang masing-masing memformalkan beberapa aspek kerja keras teknologis.

Ilmu, rekayasa, dan teknologi

Perbedaan antara ilmu, rekayasa, dan teknologi tidaklah selalu jelas. Ilmu adalah penyelidikan bernalar atau pengkajian fenomena, ditujukan untuk menemukan prinsip-prinsip yang melekat di antara unsur-unsur dunia fenomenal dengan membekerjakan teknik-teknik formal seperti metode ilmiah.[13] Teknologi tidak mesti hasil ilmu semata-mata, oleh karena teknologi harus memenuhi persyaratan seperti utilitas, kebergunaan, dan keselamatan.
Rekayasa adalah proses berorientasi tujuan dari perancangan dan pembuatan peralatan dan sistem untuk mengeksploitasi fenomena alam dalam konteks praktis bagi manusia, seringkali (tetapi tidak selalu) menggunakan hasil-hasil dan teknik-teknik dari ilmu. Pengembangan teknologi dapat dilukiskan pada banyak ranah pengetahuan, termasuk pengetahuan ilmiah, rekayasa, matematika, linguistika, dan sejarah, guna mencapai suatu hasil yang praktis.
Teknologi seringkali merupakan konsekuensi dari ilmu dan rekayasa — meskipun teknologi sebagai kegiatan manusia seringkali justru mendahului kedua-dua ranah tersebut. Misalnya, ilmu dapat mengkaji aliran elektron di dalam penghantar listrik, dengan menggunakan peralatan dan pengetahuan yang telah ada sebelumnya. Pengetahuan yang baru ditemukan ini kemudian dapat digunakan oleh para insinyur dan teknisi untuk menciptakan peralatan dan mesin-mesin baru, seperti semikonduktor, komputer, dan bentuk-bentuk teknologi tingkat lanjut lainnya. Dalam cara pandang seperti ini, para ilmuwan dan rekayasawan kedua-duanya dapat dipandang sebagai "teknolog"; ketiga-tiga ranah ini seringkali dapat dipandang sebagai satu untuk tujuan penelitian dan referensi.[14]
Hubungan pasti antara ilmu dan teknologi secara khusus telah diperdebatkan oleh para ilmuwan, sejarawan, dan pembuat kebijakan pada penghujung abad ke-20, sebagiannya karena debat dapat mengabarkan pembiayaan ilmu dasar dan ilmu terapan. Dalam kebangkitan setelah Perang Dunia II, misalnya, di Amerika Serikat terdapat anggapan yang meluas bahwa teknologi hanyalah "ilmu terapan" dan untuk mendanai ilmu dasar adalah dengan cara menuai hasil-hasil teknologi pada waktunya. Artikulasi filsafat ini dapat ditemukan secara eksplisit di dalam risalah yang ditulis Vannevar Bush mengenai kebijakan ilmu pascaperang, Science—The Endless Frontier: "Produk-baru, industri baru, dan lebih banyak lapangan kerja memerlukan tambahan pengetahuan sinambung akan hukum-hukum alam... Pengetahuan baru yang esensial ini dapat diperoleh hanya melalui penelitian ilmiah dasar." Tetapi, pada akhir dasawarsa 1960-an, pandangan ini muncul dilatarbelakangi oleh serangan langsung, memimpin ke arah berbagai inisiatif untuk mendanai ilmu untuk tujuan tertentu (inisiatif-inisiatif ini ditolak oleh komunitas ilmiah). Isu tersebut masih diperdebatkan—meskipun sebagian besar analis menolak model bahwa teknologi hanyalah hasil dari penelitian ilmiah.[15][16]

Sejarah

Perkembangan teknologi berlangsung secara evolutif.[17] Sejak zaman Romawi Kuno pemikiran dan hasil kebudayaan telah nampak berorientasi menuju bidang teknologi.[17]
Secara etimologis, akar kata teknologi adalah "techne" yang berarti serangkaian prinsip atau metode rasional yang berkaitan dengan pembuatan suatu objek, atau kecakapan tertentu, atau pengetahuan tentang prinsip-prinsip atau metode dan seni.[17] Istilah teknologi sendiri untuk pertama kali dipakai oleh Philips pada tahun 1706 dalam sebuah buku berjudul Teknologi: Diskripsi Tentang Seni-Seni, Khususnya Mesin (Technology: A Description Of The Arts, Especially The Mechanical).[17]

Kemajuan

Tak dapat dipungkiri jika kemajuan teknologi masa kini berkembang sangat pesat. Hal ini dapat dibuktikan dengan banyaknya inovasi-inovasi yang telah dibuat di dunia ini. Dari hingga yang sederhana, hingga yang menghebohkan dunia.
Sebenarnya Teknologi sudah ada sejak jaman dahulu, yaitu jaman romawi kuno. Perkembangan teknologi berkembang secara drastis dan terus berevolusi hingga sekarang. Hingga menciptakan obyek-obyek, teknik yang dapat membantu manusia dalam pengerjaan sesuatu lebih efisien dan cepat. Salah satunya adalah seperti yang ada di Indonesia, yaitu fenomena mobil esemka yang diciptakan beberapa sekolah di Solo. Telah membuat inovasi mobil Nasional untuk Indonesia. Selain itu juga, ada di Sidoarjo yang memproduksi kapal laut untuk kebutuhan melaut.
Dalam bentuk yang paling sederhana, kemajuan teknologi dihasilkan dari pengembangan cara-cara lama atau penemuan metode baru dalam menyelesaikan tugas-tugas tradisional seperti bercocok tanam, membuat baju, atau membangun rumah.[18]
Ada tiga klasifikasi dasar dari kemajuan teknologi yaitu :[18]
  • Kemajuan teknologi yang bersifat netral (bahasa Inggris: neutral technological progress)
    Terjadi bila tingkat pengeluaran (output) lebih tinggi dicapai dengan kuantitas dan kombinasi faktor-faktor pemasukan (input) yang sama.
  • Kemajuan teknologi yang hemat tenaga kerja (bahasa Inggris: labor-saving technological progress)
    Kemajuan teknologi yang terjadi sejak akhir abad kesembilan belas banyak ditandai oleh meningkatnya secara cepat teknologi yang hemat tenaga kerja dalam memproduksi sesuatu mulai dari kacang-kacangan sampai sepeda hingga jembatan.
  • Kemajuan teknologi yang hemat modal (bahasa Inggris: capital-saving technological progress)
    Fenomena yang relatif langka. Hal ini terutama disebabkan karena hampir semua riset teknologi dan ilmu pengetahuan di dunia dilakukan di negara-negara maju, yang lebih ditujukan untuk menghemat tenaga kerja, bukan modalnya.
Pengalaman di berbagai negara berkembang menunjukan bahwa adanya campur tangan langsung secara berlebihan, terutama berupa peraturan pemerintah yang terlampau ketat, dalam pasar teknologi asing justru menghambat arus teknologi asing ke negara-negara berkembang.[19]
Kemajuan teknologi memang sangat penting untuk kehidupan manusia jaman sekarang. Karena teknologi adalah salah satu penunjang kemajuan manusia. Di banyak belahan masyarakat, teknologi telah membantu memperbaiki ekonomi, pangan, komputer, dan masih banyak lagi.
Di lain pihak suatu kebijaksanaan 'pintu yang lama sekali terbuka' terhadap arus teknologi asing, terutama dalam bentuk penanaman modal asing (PMA), justru menghambat kemandirian yang lebih besar dalam proses pengembangan kemampuan teknologi negara berkembang karena ketergantungan yang terlampau besar pada pihak investor asing, karena merekalah yang melakukan segala upaya teknologi yang sulit dan rumit.[19]
Ini menjadi bukti bahwa memang teknologi sudah menjadi kebutuhan dan merata di setiap sektor kehidupan manusia. Terlebih setelah adanya penemuan komputer dan laptop, yang sekarang hampir semua pekerjaan manusia memiliki hubungan dengan komputer ataupun laptop. Sehingga pantas jika komputer adalah penemuan yang paling mutakhir dan yang paling berpengaruh pada kehidupan manusia.

Referensi

  1. ^ For ex., George Crabb, Universal Technological Dictionary, or Familiar Explanation of the Terms Used in All Arts and Sciences, Containing Definitions Drawn From the Original Writers, (London: Baldwin, Cradock and Joy, 1823), s.v. "technology."
  2. ^ Julius Adams Stratton and Loretta H. Mannix, Mind and Hand: The Birth of MIT (Cambridge: MIT Press, 2005), 190-92. ISBN 0-262-19524-0.
  3. ^ Eric Schatzberg, "Technik Comes to America: Changing Meanings of Technology Before 1930," Technology and Culture 47 (July 2006): 486-512.
  4. ^ Read Bain, "Technology and State Government," American Sociological Review 2 (December 1937): 860.
  5. ^ Donald A. MacKenzie and Judy Wajcman, "Introductory Essay" in The Social Shaping of Technology, 2nd ed. (Buckingham, England : Open University Press, 1999) ISBN 0-335-19913-5.
  6. ^ Kesalahan pengutipan: Tag <ref> tidak sah; tidak ditemukan teks untuk ref bernama mwdict
  7. ^ Franklin, Ursula. "Real World of Technology". House of Anansi Press. Diakses 2007-02-13.
  8. ^ "Technology news". BBC News. Diakses 2006-02-17.
  9. ^ Stiegler, Bernard (1998). Technics and Time, 1: The Fault of Epimetheus. Stanford University Press. hlm. 17, 82. ISBN 0-8047-3041-3 Check |isbn= value (help). Stiegler lebih terkemudian menyatakan bahwa biotechnology (bioteknologi) tidak lagi dapat didefinisikan sebagai "organized inorganic matter", given that it is, rather, "the reorganization of the organic" ('zat-zat anorganik yang tersusun rapi', melainkan 'penyusunan kembali zat-zat organik'). Stiegler, Bernard (2008). L'avenir du passé: Modernité de l'archéologie. La Découverte. hlm. 23. ISBN 2-7071-5495-4.
  10. ^ "Industry, Technology and the Global Marketplace: International Patenting Trends in Two New Technology Areas". Science and Engineering Indicators 2002. National Science Foundation. Diakses 2007-05-07.
  11. ^ Borgmann, Albert (2006). "Technology as a Cultural Force: For Alena and Griffin" (fee required). The Canadian Journal of Sociology 31 (3): 351–360. doi:10.1353/cjs.2006.0050. Diakses 2007-02-16.
  12. ^ Macek, Jakub. "Defining Cyberculture". Diakses 2007-05-25.
  13. ^ "Science". Dictionary.com. Diakses 2007-02-17.
  14. ^ "Intute: Science, Engineering and Technology". Intute. Diakses 2007-02-17.
  15. ^ Wise, George (1985). "Science and Technology". Osiris (2nd Series) 1: 229–246.
  16. ^ Guston, David H. (2000). Between politics and science: Assuring the integrity and productivity of research. New York: Cambridge University Press. ISBN 0-521-65318-5.
  17. ^ a b c d Imam Sukardi, "Pilar Islam Bagi Pluralisme Modern", Tiga Serangkai, 2003, 9796684055, 9789796684052.
  18. ^ a b "Pembangunan Ekonomi, Edisi 9, Jilid 1", Erlangga, 9790158149, 9789790158146.
  19. ^ a b Isei, "Pemikiran Dan Permasalahan Ekonomi Di Indonesia Dalam Setengah Abad Terakhir 4", Kanisius, 2005, 979211212X, 9789792112122.

Pranala luar

Unknown

*Pengertian Sistem,Data,dan Informasi

Sistem adalah suatu atau beberapa elemen yang saling bekerja sama satu sama lain untuk mencapai suatu tujuan tertentu, satu elemen dan elemen yang lainnya saling berkaitan dan membutuhkan.

Data adalah sesuatu yang belum mempunyai arti bagi penerimanya dan masih memerlukan adanya suatu pengolahan.

Informasi adalah data yang diproses kedalam bentuk yang lebih berarti bagi penerima dan berguna dalam pengambilan keputusan, sekarang atau untuk masa yang akan datang.


Contoh penggunaan sistem informasi di perusahaan fedex
Fedex adalah perusahaan internasional yang memproduksi barang dan jasa.Berawal dari sebuah perusahaan industry transportasi ekspres. Fedexcorporation terdiri atas beberapa bagian misalnya : fedex ekspres, fedex fright, fedex ground dan lain sebagainya. Fedex sendiri telah melayani lebih dari 220 negara dan wilayah dengan operasi yang mencakup lebih dari 677 pesawat, dan 80.000 kendaraan. Memiliki lebih dari 290.000 anggota tim yang tersebar di seluruh dunia untuk menangani sekitar 8 juta pengiriman setiap hari.
Fedex termasuk perusahaan yang menggunakan sistem informasi untuk membantu perusahaan meningkatkan tingkat persaingan, dengan memanfaakan fasilitas teknologi informasi dengan maksimal,yang berupa internet, e-commerce, e-bisnis, e-tailing dan sebagainya serta pendokumentasian yang baik dengan menyediakan library digital untuk mempermudah share. Selain itu juga dengan adanya virtual information infrastruktur seperti COSMOS (customer, operation, service master on-line system),bisa mempermudah perusahaan melakukan pemantauan/tracking terhadap semua pergerakan paket. Data pergerakan paket, pickup, invoicing, dan delivery dipusatkan di sebuah database. Jadi setiap paket ditempatkan barcode kemudian dilakukan scanning/pembacaan barcode di setiap tahap pada siklus delivery.POWERSHIP PROGRAM,memberikan service tambahan kepada customer diantaranya storing, label printing, online package pick-up request, package tracking dan lain-lain. EDI-Electronic Data Interchange dan Internet,memungkinkan fedex untuk melakukan hubungan one-to-one dengan customernya.

*Contoh-contoh sistem basis data

a.Pembelian di supermarket
b.Pembelian dengan kartu kredit
c.Pemesanan tempat pada sebuah biro perjalanan dll.

*Struktur Basis Data

Untuk menggambarkan struktur suatu database, perlu dijelaskan tentang konsep model data. Model Data adalah kumpulan cara yang secara konseptual menggambarkan tentang data, hubungan data, semantik data, serta kendala yang konsisten terhadap data tersebut.
Ada 3 kelompok model data yang paling umum digunakan yaitu:
1.Object – Based Logical Models
2.Record – Based Logical Models
3.Physical Data Models

Unknown

Statement vs PreparedStatement vs Batch, Security and Performance

Jika kita membuat aplikasi yang memanipulasi database dengan plain JDBC, Statement dan PreparedStatement object mempunyai peranan yang penting. Keduanya sama-sama dapat digunakan untuk mengirim perintah query ke database. Sekarang, kita akan coba melihat apa yang membuat mereka berbeda.
Note: Source code untuk class DBManager bisa didapat disini.
1. Security attack: SQL Injection
Yang pertama, dilihat dari sudut pandang keamanan, khususnya terhadap serangan yang disebut SQL injection. Penyerang biasanya mencoba untuk menembus sistem dengan cara merusak SQL query yang kita buat. Triknya adalah dengan menggunakan susunan karakter, yang bila digabungkan dengan query sebenarnya akan menghasilkan nilai yang berbeda.
Berikut adalah tabel yang akan kita gunakan untuk percobaan.
1
2
3
4
5
6
CREATE TABLE `myblog`.`user_security` (
  `username` VARCHAR(50) NOT NULL DEFAULT '',
  `pswd` VARCHAR(255) NOT NULL DEFAULT '',
  PRIMARY KEY(`username`)
)
ENGINE = InnoDB;
Isi dengan sample data:

Dengan kode berikut, kita akan mencoba untuk menjalankan test menggunakan Statement dan PreparedStatement dengan input yang sama, yaitu:
username: aaa
pswd: bbb’ OR ’1′=’1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
package suhearie.blog.sql_injection;
 
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
 
import suhearie.blog.jdbc.DBManager;
 
public class TesSqlInjection {
 
    private DBManager manager;
 
    private Connection conn;
 
    public TesSqlInjection() throws Exception {
        manager = new DBManager();
        conn = manager.getConnection();
    }
 
    private void testStatement(String user, String pswd) throws Exception {
        System.out.println("Test menggunakan Statement");
        String sql = "SELECT * FROM user_security WHERE username = '"+user+"' AND pswd = '"+pswd+"'";
        Statement statement = conn.createStatement();
        ResultSet rs = statement.executeQuery(sql);
        if (rs.next()) {
            System.out.println("User: "+user+", Pswd:"+pswd+" BENAR, login valid");
        }
        else {
            System.out.println("User: "+user+", Pswd:"+pswd+" SALAH, login invalid");
        }
    }
 
    private void testPreparedStatement(String user, String pswd) throws Exception {
        System.out.println("Test menggunakan PreparedStatement");
        String sql = "SELECT * FROM user_security WHERE username = ? AND pswd = ?";
        PreparedStatement preparedStatement = conn.prepareStatement(sql);
        preparedStatement.setString(1, user);
        preparedStatement.setString(2, pswd);
        ResultSet rs = preparedStatement.executeQuery();
        if (rs.next()) {
            System.out.println("User: "+user+", Pswd:"+pswd+" BENAR, login valid");
        } else {
            System.out.println("User: "+user+", Pswd:"+pswd+" SALAH, login invalid");
        }
    }
 
    public static void main(String[] args) throws Exception {
        TesSqlInjection test = new TesSqlInjection();
        String user = "aaa";
        String pswd = "bbb' OR '1'='1";
        test.testStatement(user, pswd);
        test.testPreparedStatement(user, pswd);
    }
 
}
Output dari test di atas adalah:
Test menggunakan Statement
User: aaa, Pswd:bbb’ OR ’1′=’1 BENAR, login valid
Test menggunakan PreparedStatement
User: aaa, Pswd:bbb’ OR ’1′=’1 SALAH, login invalid
Mengapa hasil dari test Statement bisa demikian ?
Jawabannya adalah karena bila query awal dan input user digabung, query akan menjadi:
1
SELECT * FROM user_security WHERE username = 'aaa' AND pswd = 'bbb' OR '1'='1'
Karena ada OR 1=1, yang akan selalu bernilai TRUE, maka nilai klausa WHERE akan menjadi TRUE, dan query akan mengembalikan resultset, meskipun username dan password yang diberikan SALAH.
Dari test tersebut, jelas bahwa Statement sangat rentan terhadap SQL injection, karena input dari user akan di menjadi bagian dari query. Sementara jika kita menggunakan PreparedStatement, input dari user akan menjadi parameter saja, sehingga tidak mempengaruhi hasil query.
2. Performance
Disini kita akan menguji performance dari 3 metode tersebut untuk melakukan manipulasi data di database. Saya sudah melakukan percobaan untuk melakukan operasi insert pada tabel sederhana berikut:
1
2
3
4
CREATE TABLE  `myblog`.`st_vs_pst` (
  `COL1` int(10) unsigned NOT NULL default '0',
  `COL2` int(10) unsigned NOT NULL default '0'
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Test ini akan menghapus tabel, kemudian melakukan operasi insert sebanyak 1000 row dan menggunakan parameter untuk mengaktifkan atau mematikan option autocommit pada database.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
package suhearie.blog.stmt_vs_pstmt;
 
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.Statement;
 
import suhearie.blog.jdbc.DBManager;
 
public class TestPerformance {
 
    private DBManager manager;
 
    private Connection conn;
 
    private static final String TABLE_NAME = "ST_VS_PST";
 
    private static final int TOTAL = 1000;
 
    private static final int INTERVAL = 200;
 
    public TestPerformance() throws Exception {
        manager = new DBManager();
        conn = manager.getConnection();
    }
 
    private void truncateTable() throws Exception {
        System.out.println("Truncating table");
        Statement statement = conn.createStatement();
        statement.executeUpdate("TRUNCATE TABLE "+TABLE_NAME);
    }
 
    private void testStatement(boolean turnOffAutoCommit) throws Exception {
        System.out.println();
        System.out.println("Starting testStatement, turnOffAutoCommit:"+turnOffAutoCommit);
        truncateTable();
        long start = System.currentTimeMillis();
        if (turnOffAutoCommit) {
            conn.setAutoCommit(false);
        }
        Statement statement = conn.createStatement();
        for (int i=0; i<=TOTAL; i++) {
            statement.executeUpdate("INSERT INTO "+TABLE_NAME+" (COL1,COL2) VALUES ("+i+","+i*2+")");
            if (i%INTERVAL == 0) {
                System.out.print("Row:"+i+"; ");
            }
        }
        if (turnOffAutoCommit) {
            conn.commit();
            conn.setAutoCommit(true);
        }
        long diff = System.currentTimeMillis() - start;
        System.out.println("testStatement finish: "+diff+" ms");
    }
 
    private void testPreparedStatement(boolean turnOffAutoCommit) throws Exception {
        System.out.println();
        System.out.println("Starting testPreparedStatement, turnOffAutoCommit:"+turnOffAutoCommit);
        truncateTable();
        long start = System.currentTimeMillis();
        if (turnOffAutoCommit) {
            conn.setAutoCommit(false);
        }
        PreparedStatement preparedStatement = conn.prepareStatement("INSERT INTO "+TABLE_NAME+" (COL1,COL2) VALUES (?,?)");
        for (int i=0; i<=TOTAL; i++) {
            preparedStatement.setInt(1, i);
            preparedStatement.setInt(2, i*2);
            preparedStatement.executeUpdate();
            if (i%INTERVAL == 0) {
                System.out.print("Row:"+i+"; ");
            }
        }
        if (turnOffAutoCommit) {
            conn.commit();
            conn.setAutoCommit(true);
        }
        long diff = System.currentTimeMillis() - start;
        System.out.println("testPreparedStatement finish: "+diff+" ms");
    }
 
    private void testBatch(boolean turnOffAutoCommit) throws Exception {
        System.out.println();
        System.out.println("Starting testBatch, turnOffAutoCommit:"+turnOffAutoCommit);
        truncateTable();
        long start = System.currentTimeMillis();
        if (turnOffAutoCommit) {
            conn.setAutoCommit(false);
        }
        PreparedStatement preparedStatement = conn.prepareStatement("INSERT INTO "+TABLE_NAME+" (COL1,COL2) VALUES (?,?)");
        for (int i=0; i<=TOTAL; i++) {
            preparedStatement.setInt(1, i);
            preparedStatement.setInt(2, i*2);
            preparedStatement.addBatch();
            if (i%INTERVAL == 0) {
                System.out.print("Row:"+i+"; ");
                preparedStatement.executeBatch();
            }
        }
        if (turnOffAutoCommit) {
            conn.commit();
            conn.setAutoCommit(true);
        }
        long diff = System.currentTimeMillis() - start;
        System.out.println("testBatch finish: "+diff+" ms");
    }
 
    public static void main(String[] args) throws Exception {
        TestPerformance test = new TestPerformance();
        test.testStatement(true);
        test.testStatement(false);
        test.testPreparedStatement(true);
        test.testPreparedStatement(false);
        test.testBatch(true);
        test.testBatch(false);
    }
 
}
Output dari program tersebut adalah sebagai berikut:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Starting testStatement, turnOffAutoCommit:true
Truncating table
Row:0; Row:200; Row:400; Row:600; Row:800; Row:1000; testStatement finish: 297 ms
 
Starting testStatement, turnOffAutoCommit:false
Truncating table
Row:0; Row:200; Row:400; Row:600; Row:800; Row:1000; testStatement finish: 24203 ms
 
Starting testPreparedStatement, turnOffAutoCommit:true
Truncating table
Row:0; Row:200; Row:400; Row:600; Row:800; Row:1000; testPreparedStatement finish: 250 ms
 
Starting testPreparedStatement, turnOffAutoCommit:false
Truncating table
Row:0; Row:200; Row:400; Row:600; Row:800; Row:1000; testPreparedStatement finish: 23250 ms
 
Starting testBatch, turnOffAutoCommit:true
Truncating table
Row:0; Row:200; Row:400; Row:600; Row:800; Row:1000; testBatch finish: 219 ms
 
Starting testBatch, turnOffAutoCommit:false
Truncating table
Row:0; Row:200; Row:400; Row:600; Row:800; Row:1000; testBatch finish: 23297 ms
Dari output yang dihasilkan, tampak bahwa performance Batch > PreparedStatement > Statement. Alasannya:
1. Statement
Setiap SQL statement yang dieksekusi dikirim secara utuh ke database.
2. PreparedStatement
SQL query dikirim hanya satu kali, selanjutnya yang dikirim ke database hanya parameted querynya saja.
3. PreparedStatement Batch:
Seperti halnya PreparedStatement, tapi kita bisa mengakumulasi parameter-parameter dengan method addBatch() kemudian mengirim kumpulan parameter itu sekaligus dengan method executeBatch().
Tapi perbedaan paling signifikan yang memeberikan perbedaan performance paling besar didapat ketika kita mematikan option autocommit di database. Dari test di atas, kecepatannya bisa mencapai 100 kali lipat !!
Mengapa bisa begitu? Sekedar analisa/asumsi logika sederhana, jika kita menggunakan fitur autocommit, setiap kita melakukan insert satu baris, maka database akan langsung melakukan perubahan permanen pada tabel. Sebaliknya, jika database tidak melakukan autocommit, maka kita bisa melakukan ribuan operasi insert, dan mungkin database akan memprosesnya di memory/buffer. Kemudian pada saat kita meng-commit perubahan, database akan melakukan proses tersebut untuk ribuan bari sekaligus.
Kesimpulannya, jika Anda mau melakukan insert atau update dalam jumlah yang besar, pilihan terbaik adalah menggunakan PreparedStatement Batch, dan menonaktifkan option autocommit.