เมื่อได้รับการเชื่อมต่อเราสามารถโต้ตอบกับฐานข้อมูล วิธีการและคุณสมบัติที่กำหนดไว้ในคำสั่ง JDBC, callablestatement และอินเทอร์เฟซ PreparedStatement เปิดใช้งานการส่งคำสั่ง SQL หรือ PL/SQL และรับข้อมูลจากฐานข้อมูล
พวกเขายังกำหนดวิธีการที่ช่วยแปลงความแตกต่างของข้อมูลระหว่าง Java และฐานข้อมูลโดยใช้ชนิดข้อมูล SQL
ตารางต่อไปนี้ให้ภาพรวมของวิธีการใช้แต่ละอินเทอร์เฟซเพื่อทำความเข้าใจว่าจะใช้อินเทอร์เฟซใด
คำสั่งวัตถุ:
สร้างวัตถุคำสั่ง
เมื่อคุณสามารถใช้วัตถุคำสั่งเพื่อเรียกใช้คำสั่ง SQL คุณต้องใช้เมธอด createstatement () ของวัตถุการเชื่อมต่อเพื่อสร้างหนึ่งดังที่แสดงในตัวอย่างต่อไปนี้:
คำสั่ง stmt = null; ลอง {stmt = conn.createstatement (); - - .} catch (sqlexception e) { - .} ในที่สุด { . - -เมื่อสร้างวัตถุคำสั่งแล้วจะสามารถใช้เพื่อเรียกใช้คำสั่ง SQL ด้วยวิธีการดำเนินการหนึ่งในสามวิธี
บูลีนดำเนินการ (สตริง SQL): ส่งคืนค่าบูลีนจริงถ้าสามารถเรียกคืนวัตถุ Resuredet ได้มิฉะนั้นจะส่งคืนเท็จ ใช้วิธีนี้เพื่อเรียกใช้คำสั่ง SQL DDL หรือเมื่อใช้ SQL แบบไดนามิกจริง
int executeUpdate (String SQL): ส่งคืนจำนวนแถวที่ดำเนินการโดยคำสั่ง SQL ที่ได้รับผลกระทบ ใช้วิธีนี้เพื่อดำเนินการและหวังว่าจะได้รับคำสั่ง SQL แถวที่ได้รับผลกระทบ - ตัวอย่างเช่นแทรกอัปเดตหรือลบคำสั่ง
ResultSet ExecuteQuery (String SQL): ส่งคืนวัตถุ Resuredet ใช้วิธีนี้เมื่อคุณต้องการตั้งค่าผลลัพธ์เช่นเดียวกับการใช้คำสั่ง SELECT
ปิดวัตถุคำสั่ง:
เช่นเดียวกับการปิดวัตถุการเชื่อมต่อเพื่อเก็บทรัพยากรฐานข้อมูลวัตถุคำสั่งควรปิดด้วยเหตุผลเดียวกัน
การโทรง่าย ๆ ไปยังวิธีปิด () จะทำงาน หากวัตถุการเชื่อมต่อถูกปิดก่อนมันจะปิดวัตถุคำสั่งเช่นกัน อย่างไรก็ตามวัตถุคำสั่งควรปิดอย่างชัดเจนเพื่อให้แน่ใจว่ามีการกวาดล้างที่เหมาะสม
คำสั่ง stmt = null; ลอง {stmt = conn.createstatement (); - - .} catch (sqlexception e) { - .} ในที่สุด {stmt.close ();}
วัตถุที่เตรียมไว้
อินเทอร์เฟซ PreparedStatement ขยายอินเทอร์เฟซคำสั่งทำให้สามารถเพิ่มคุณสมบัติขั้นสูงหลายอย่างในวัตถุคำสั่งทั่วไป
คำสั่งให้ความยืดหยุ่นสำหรับพารามิเตอร์แบบไดนามิก
สร้างวัตถุที่เตรียมไว้:
PreparedStatement pstmt = null; ลอง {string sql = "อัพเดตพนักงานตั้งค่าอายุ =? ที่ไหน id =?"; pstmt = conn.prepareStatement (SQL); - - .} catch (sqlexception e) { - .} ในที่สุด { . - -พารามิเตอร์ทั้งหมดใน JDBC มีการแสดง? สัญลักษณ์ซึ่งเป็นเครื่องหมายพารามิเตอร์ที่รู้จัก ก่อนที่จะดำเนินการคำสั่ง SQL แต่ละพารามิเตอร์ของค่าจะต้องมีให้
เมธอด setxxx () เชื่อมโยงค่ากับพารามิเตอร์โดยที่ xxx แสดงถึงประเภทข้อมูล Java ที่คุณต้องการผูกกับค่าพารามิเตอร์อินพุต หากคุณลืมที่จะให้คุณค่าคุณจะได้รับ sqlexception
แต่ละแท็กพารามิเตอร์จะอ้างอิงโดยตำแหน่งหมายเลขลำดับ เครื่องหมายแรกระบุตำแหน่งที่ 1 ตำแหน่งถัดไปคือ 2 และอื่น ๆ วิธีนี้แตกต่างจากการจัดทำดัชนีอาร์เรย์ Java เริ่มต้นด้วย 0
คำสั่งวัตถุทั้งหมดวิธีการโต้ตอบกับฐานข้อมูล (a) execute (), (b) executeQuery () และ (c) executeUpdate () ยังทำงานร่วมกับวัตถุที่เตรียมไว้ อย่างไรก็ตามวิธีนี้ได้รับการแก้ไขเพื่อใช้คำสั่ง SQL ซึ่งสามารถใช้พารามิเตอร์อินพุตได้
ปิดวัตถุที่เตรียมไว้:
เช่นเดียวกับการปิดวัตถุคำสั่งด้วยเหตุผลเดียวกันวัตถุที่เตรียมไว้ควรปิด
การโทรง่าย ๆ ไปยังวิธีปิด () จะทำงาน หากวัตถุการเชื่อมต่อถูกปิดมันจะปิดวัตถุที่เตรียมไว้ก่อน อย่างไรก็ตามวัตถุที่เตรียมไว้ควรปิดอย่างชัดเจนเพื่อให้แน่ใจว่ามีการกวาดล้างที่ถูกต้อง
PreparedStatement pstmt = null; ลอง {string sql = "อัพเดตพนักงานตั้งค่าอายุ =? ที่ไหน id =?"; pstmt = conn.prepareStatement (SQL); - - .} catch (sqlexception e) { - .} ในที่สุด {pstmt.close ();} อินสแตนซ์ที่เตรียมไว้
นี่คือตัวอย่างของการใช้งานการเตรียมการและการเปิดและปิดการตั้งค่า: เปิดและปิด:
คัดลอกตัวอย่างต่อไปนี้ jdbcexample.java, รวบรวมและเรียกใช้ตามที่แสดงด้านล่าง:
// ขั้นตอนที่ 1. นำเข้าแพ็คเกจที่ต้องการ java.sql.*; คลาสสาธารณะ JDBCEXAMPLE {// ชื่อไดรเวอร์ JDBC และ URL ฐานข้อมูลคงที่สตริงสุดท้าย jdbc_driver = "com.mysql.jdbc.driver"; สตริงสุดท้ายคงที่ db_url = "jdbc: mysql: // localhost/emp"; // ข้อมูลรับรองฐานข้อมูลสตริงสุดท้ายคงที่ user = "ชื่อผู้ใช้"; สตริงสุดท้ายคงที่ = "รหัสผ่าน"; โมฆะคงที่สาธารณะหลัก (สตริง [] args) {การเชื่อมต่อ conn = null; PreparedStatement STMT = NULL; ลอง {// ขั้นตอนที่ 2: ลงทะเบียนคลาสไดรเวอร์ JDBC forName ("com.mysql.jdbc.driver"); // ขั้นตอนที่ 3: เปิดระบบการเชื่อมต่อ. out.println ("การเชื่อมต่อกับฐานข้อมูล ... "); conn = drivermanager.getConnection (db_url, ผู้ใช้, ผ่าน); // ขั้นตอนที่ 4: ดำเนินการแบบสอบถาม System.out.println ("การสร้างคำสั่ง ... "); String SQL = "อัพเดทพนักงานตั้งค่าอายุ =? ที่ไหน id =?"; stmt = conn.prepareStatement (SQL); // ผูกค่าลงในพารามิเตอร์ stmt.setint (1, 35); // สิ่งนี้จะตั้งค่าอายุ stmt.setint (2, 102); // สิ่งนี้จะตั้งค่า ID // ให้เราอัปเดตอายุของบันทึกด้วย id = 102; int rows = stmt.executeUpdate (); System.out.println ("แถวที่ได้รับผลกระทบ:" + แถว); // ให้เราเลือกบันทึกทั้งหมดและแสดง SQL = "SELECT ID, FIRST, LANT, อายุจากพนักงาน"; resultset rs = stmt.executeQuery (SQL); // ขั้นตอนที่ 5: แยกข้อมูลจากชุดผลลัพธ์ในขณะที่ (Rs.Next ()) {// ดึงข้อมูลตามชื่อคอลัมน์ int id = rs.getInt ("id"); อายุ int = Rs.getInt ("อายุ"); String First = Rs.getString ("First"); String last = rs.getString ("สุดท้าย"); // แสดงค่า system.out.print ("id:" + id); System.out.print (", อายุ:" + อายุ); System.out.print (", First:" + First); System.out.println (", สุดท้าย:" + สุดท้าย); } // ขั้นตอนที่ 6: สภาพแวดล้อมการทำความสะอาด rs.close (); stmt.close (); conn.close (); } catch (sqlexception se) {// จัดการข้อผิดพลาดสำหรับ jdbc se.printstacktrace (); } catch (exception e) {// จัดการข้อผิดพลาดสำหรับ class.forName e.printStackTrace (); } ในที่สุด {// ในที่สุดบล็อกที่ใช้ในการปิดทรัพยากรลอง {ถ้า (stmt! = null) stmt.close (); } catch (sqlexception se2) {} // ไม่มีอะไรที่เราสามารถลอง {ถ้า (conn! = null) conn.close (); } catch (sqlexception se) {se.printstacktrace (); } // สิ้นสุดในที่สุดลอง} // end try system.out.println ("ลาก่อน!"); } // สิ้นสุดหลัก} // สิ้นสุด jdbcexampleตอนนี้มารวบรวมตัวอย่างข้างต้นกันดังนี้:
c:> javac jdbcexample.java
เมื่อเรียกใช้ JDBCEXAMPLE มันจะให้ผลลัพธ์ต่อไปนี้:
c:> java jdbcexample
การเชื่อมต่อกับฐานข้อมูล ... การสร้างคำสั่ง ... แถวที่ได้รับผลกระทบ: 1id: 100, อายุ: 18, แรก: Zara, สุดท้าย: Aliid: 101, อายุ: 25, แรก: Mahnaz, สุดท้าย: Fatmaid: 102, อายุ: 35, First: Zaid, สุดท้าย: Khanid: 103, อายุ: 30, แรก: Sumit, สุดท้าย: Mittalgoodby