ฉันจะไม่พูดเรื่องไร้สาระมากนักฉันจะแบ่งปันปัญหาการเชื่อมต่อทั่วไปของฐานข้อมูล SQL ที่ใช้งานได้กับ Java
1. เชื่อมต่อคำถามอัปเดตปิด
การดำเนินการข้อมูลพื้นฐานเหล่านี้จะถูกรวมเข้าด้วยกันและเขียนลงในโมเดลที่มีลักษณะคล้ายเครื่องมือซึ่งเป็นเครื่องมือ Model2 Model SQL ตอนแรกฉันต้องการเพิ่มการดำเนินการอื่น ๆ เช่นการประมวลผลธุรกรรม แต่ฉันยังไม่ได้คิดถึงวิธีที่สมบูรณ์แบบมากขึ้น โปรดดูรหัสโดยละเอียด ความคิดเห็นมีรายละเอียดมาก
นำเข้า java.sql.*; นำเข้า java.util.iterator; นำเข้า java.util.map นำเข้า java.util.set;/*** สร้างโดย NL101 เมื่อปี 2016/1/29.*/คลาสสาธารณะ SQLBean {// การดำเนินการเริ่มต้น "oracle.jdbc.driver.oracledriver"; string url = "jdbc: oracle: thin: @localhost: 1521: orcl"; String username = "Scott"; String Password = "123456";/*** เริ่มต้นการเชื่อมต่อ DriverManager.getConnection (URL, ชื่อผู้ใช้, รหัสผ่าน);} catch (classnotFoundException e) {e.printstacktrace (); system.err.println ("ข้อยกเว้นลิงก์ฐานข้อมูล");} catch (sqlexception e) {e.printstacktrace (); หายไป* // *** สร้างฟังก์ชั่นการอัปเดตฐานข้อมูล* @param SQL การอัปเดตที่สอดคล้องกันคำสั่ง SQL* @Param พารามิเตอร์พารามิเตอร์เพิ่มเติมที่จำเป็น* @return การอัปเดตจริงที่ประสบความสำเร็จการอัปเดตที่ผิดพลาดล้มเหลว*/การอัปเดตบูลีนสาธารณะ (สตริง sql, สตริง [] พารามิเตอร์) {int k = 0; ลอง {ps = conn ps.setstring (i+1, params [i]);} k = ps.executeUpdate ();} catch (sqlexception e) {e.printstacktrace (); system.err.println ("ข้อยกเว้นการอัปเดตฐานข้อมูล พารามิเตอร์* @return Query Set*/Public Resultions Stuery (String sql, string [] params) {ลอง {ps = conn.preparestatement (sql); สำหรับ (int i = 0; i <params.length; i ++) {ps.setstring (i+1, params [i]) {E.PrintStackTrace (); System.err.println ("ข้อยกเว้นการสืบค้นฐานข้อมูล");} ส่งคืน rs;}/*** คำสั่งปิดฐานข้อมูลปิด*/โมฆะสาธารณะปิด () {ลอง {ถ้า (rs! = null) rs.close (); rs = null; ถ้า (ps! = null) ps.close (); ps = null; if (conn! = null) conn.close (); conn = null;} catch (sqlexception e) {e.printstacktrace ();}}}เขียนเช่นนี้ถ้าคุณโทรหาคลาสอื่นคุณสามารถทำตามวิธีการต่อไปนี้
sqlbean sqlbean = new sqlbean (); string [] params = {}; // ถ้ามีพารามิเตอร์ให้เขียนใน Resultset rs = sqlbean.query ("เลือก ename จาก emp", params); catch (sqlexception e) {e.printstacktrace (); sqlbean.close (); // ปิดการเชื่อมต่อถ้าข้อยกเว้น} sqlbean.close (); // ปิดการเชื่อมต่อฐานข้อมูล2. การประมวลผลธุรกรรม
เมื่อประมวลผลธุรกรรมการส่งอัตโนมัติจะถูกยกเลิกก่อนเสมอจากนั้นคำสั่งจะถูกดำเนินการและการส่งขั้นสุดท้ายจะถูกส่งจากนั้นข้อยกเว้นจะเกิดขึ้นเมื่อย้อนกลับ สำหรับวิธีการเขียนวิธีการฉันยังไม่ได้คิดถึงความคิดที่ดี
นำเข้า Bean.sqlbean; นำเข้า Java.sql.*;/*** สร้างโดย NL101 เมื่อ 2016/1/29.*/การทดสอบระดับสาธารณะ {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {การเชื่อมต่อ conn = null; คำสั่ง ps = null; string drivername = "oracle.jdbc.driver.oracled "JDBC: Oracle: Thin: @LocalHost: 1521: ORCL"; String username = "Scott"; String Password = "7946521"; ลอง {class.forname (drivername); conn = drivermanager.getConnection conn.createstatement (); ps.addbatch ("ประโยคที่ 1 ในการดำเนินการ"); ps.addbatch ("ประโยค 2 ในการทำงาน"); ps.addbatch ("ประโยค 3 เพื่อดำเนินการ"); ps.addbatch (ประโยค 4 conn.setautocommit (true); // เปิดใช้งานการส่งอัตโนมัติ} catch (classnotfoundexception e) {e.printstacktrace (); system.err.println ("ข้อยกเว้นลิงก์ฐานข้อมูล");} catch (sqlexception e) {e.printStackTrace (); (conn! = null) {conn.rollback (); // ย้อนกลับการทำงานกลับ conn.setautocommit (true);}} catch (sqlexception e1) {e1.printstacktrace ();}} ในที่สุด {// จบฐานข้อมูล {ถ้า (rs! = null) = null; if (conn! = null) conn.close (); conn = null;} catch (sqlexception e) {e.printstacktrace ();}}}}}3. โทรขั้นตอนที่เก็บไว้
call = ct.prepareCall ("{call sp_pro4 (?,?,?,?,?,?,?)}"); // ตั้งค่าพารามิเตอร์อินพุต call.setstring (1, "emp"); call.setint (2, 4); call.setint (3, 1); // ตั้งค่าพารามิเตอร์เอาต์พุต call.registeroutparameter (4, oracletypes.number); call.registeroutparameter (5, oracletypes.number); call.registeroutparameter (6, oraclepes.cursor); // ดำเนินการ call.execute (); // จำนวนทั้งหมดของเอาต์พุตและหน้าทั้งหมด system.out.println ("จำนวนบันทึกทั้งหมด"+call.getint (4)+"-จำนวนหน้าทั้งหมด" ในขณะที่ (rs.next ()) {สำหรับ (int i = 0; i <7; i ++) {system.out.print (rs.getString (i+1)+"");} system.out.println ();};4. ชุดผลลัพธ์ที่เคลื่อนย้ายได้
ดวงอาทิตย์มีเพียงอินเทอร์เฟซเท่านั้น ไม่ว่าจะสามารถใช้งานได้หรือไม่นั้นขึ้นอยู่กับว่าไดรเวอร์ JDBC ที่คุณอ้างอิงรองรับนั้นรองรับ
นำเข้า Java.sql.*; Public Class Testscroll {โมฆะคงที่สาธารณะ (สตริง args []) {ลอง {ใหม่ oracle.jdbc.driver.oracledriver (); string url = "jdbc: oracle:@192.168.0.1: 1521: sxt"; stmt = conn.createstatement (resultset.type_scroll_insensitive, // ตั้งค่า RS เพื่อเลื่อน Resultset.curcur_read_only); // ตั้งค่า rs เป็น result-only resultset rs = stmt.executeQuery ("เลือก * จากคำสั่ง emp โดย sal") System.out.println (rs.getint (1)); rs.last (); // ชี้ไปที่บรรทัดสุดท้ายของ system.out.println (rs.getString (1)); syst.out.println (rs.islast ()); syst.out.println (rs.isafterlast (); em.out.println (rs.getrow ()); rs.previous (); // ย้าย line up system.out.println (rs.getString (1)); rs.absolute (6); // วิธีนี้พบหมายเลขบรรทัดโดยตรง (sqlexception e) {e.printstacktrace ();}}}5. ชุดผลลัพธ์ที่อัปเดตได้
นำเข้า java.sql.*; Public Class TestupDatars {โมฆะคงที่สาธารณะ (สตริง args []) {ลอง {ใหม่ oracle.jdbc.driver.oracledriver (); string url = "jdbc: oracle: thin:@192.168.0.1: 1521: 1521: conn = drivermanager.getConnection (url, "Scott", "Tiger"); คำสั่ง stmt = conn.createstatement (resultset.type_scroll_insensitive, resultet.curcur_updatable); resultet rs = stmt.executequery ("เลือก * จาก emp2"); Rs.UpDatestring ("ename", "aaaa"); rs.updaterow (); // แทรกแถวใหม่ rs.movetoinsertrow (); rs.updateint (1, 9999); rs.updatestring ("ename", "aaaa"); 99.99); rs.insertrow (); // ย้ายเคอร์เซอร์ไปที่บรรทัดที่สร้างขึ้นใหม่ rs.movetocurrentrow (); // ลบบรรทัด rs.absolute (5); rs.deleterow (); // ยกเลิกการอัปเดต // rs.cancelrowupdates ()ข้างต้นคือการดำเนินการที่ฉันมักจะใช้เพื่อเชื่อมต่อกับฐานข้อมูล SQL ใน Java ที่บรรณาธิการแบ่งปันกับคุณ ฉันหวังว่ามันจะเป็นประโยชน์กับคุณ