java และ msaccess insert sql ไม่ทำงาน

ฉันมีปัญหา 2 ข้อ

  1. แบบสอบถาม INSERT ด้านล่างไม่ได้แทรกบันทึกในฐานข้อมูล msAccess ใครช่วยอธิบายหน่อยได้ไหมว่าทำไมสิ่งนี้จึงเกิดขึ้นและฉันจะแก้ไขได้อย่างไร ฉันแทนที่เครื่องหมายคำพูดเดี่ยวด้วยเครื่องหมายคำพูดคู่ แต่นั่นก็ไม่ได้ช่วยอะไรเช่นกัน

  2. ในโค้ดด้านล่างนี้ มีเพียง 1 คิวรีเท่านั้นที่ได้รับการดำเนินการ คิวแรก ส่วนที่เหลือจะถูกข้ามไปทั้งหมด ฉันต้องแสดงความคิดเห็นในคำถามก่อนหน้าในแต่ละครั้งและคอมไพล์ใหม่เพื่อดำเนินการในคำถามถัดไป มีวิธีอื่นในการทำเช่นนี้หรือไม่?

    try {
       Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
       Connection conn=null;
       conn= DriverManager.getConnection("jdbc:odbc:SS");
       Statement s;
       s=conn.createStatement();
       ResultSet rs;
       rs=s.executeQuery("drop table users");
       rs=s.executeQuery("CREATE TABLE users ( id AUTOINCREMENT, username varchar(255) , pass varchar(255), PRIMARY KEY(id) ) ");
       rs=s.executeQuery(" insert into users (username, pass) values( 'name1', 'pass1') ");
       rs=s.executeQuery(" insert into users (username, pass) values( 'name2', 'pass2') ");
    } catch (SQLException ex) { 
       ex.printStackTrace(); 
    } catch(Exception ee) {
       ee.printStackTrace();
    }
    

person jeet    schedule 04.03.2013    source แหล่งที่มา
comment
คุณได้รับข้อยกเว้นบ้างไหม?   -  person Obl Tobl    schedule 04.03.2013
comment
ใช้ PreparedStatement   -  person MadProgrammer    schedule 04.03.2013
comment
ปัญหาอาจเป็น s.executeQuery("drop table users") จะส่งข้อยกเว้นหากไม่มีตาราง คุณต้องตรวจสอบว่ามีตารางอยู่ก่อนที่จะวางหรือไม่   -  person Arun P Johny    schedule 04.03.2013
comment
ข้อยกเว้นที่ฉันได้รับคือ: ไม่มีการสร้างชุดผลลัพธ์ นอกจากนี้ ฉันยังใช้คำสั่ง drop บนตารางที่มีอยู่เท่านั้น ปัญหาหลักคือมันไม่ใส่อะไรลงในฐานข้อมูล   -  person jeet    schedule 04.03.2013


คำตอบ (2)


ไม่มี ResultSet ที่เกี่ยวข้อง เนื่องจากคุณไม่ได้ทำการสืบค้นใดๆ คุณควรดำเนินการอัปเดตเท่านั้น โปรแกรมของคุณควรใช้งานได้หากคุณเปลี่ยนโค้ดดังนี้:

Connection conn=null;
Statement s=null;
try {
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    conn = DriverManager.getConnection("jdbc:odbc:SS");
    s = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
    s.executeUpdate("drop table users");
    s.executeUpdate("CREATE TABLE users ( id AUTOINCREMENT, username varchar(255) , pass varchar(255), PRIMARY KEY(id) ) ");
    s.executeUpdate("insert into users (username, pass) values( 'name1', 'pass1') ");
    s.executeUpdate("insert into users (username, pass) values( 'name2', 'pass2') ");
} catch (SQLException ex) {
    ex.printStackTrace();
} catch (Exception ee) {
    ee.printStackTrace();
} finally {
    try {
        conn.close();
        s.close();
    } catch (SQLException ex) {
        ex.printStackTrace();
    }
}

ระวังว่าในการแทรกลงในตารางฐานข้อมูล คุณควรสร้างคำสั่งของคุณผ่านพารามิเตอร์ที่เหมาะสม

จุดสำคัญอีกประการหนึ่งคือ คุณควรปิดการเชื่อมต่อ คำชี้แจง และชุดผลลัพธ์เสมอเมื่อดำเนินการเสร็จสิ้น เมื่อคุณปิดการเชื่อมต่อ ส่วนแทรกที่สองจะถูกล้างไปยังตารางฐานข้อมูล

person Costis Aivalis    schedule 04.03.2013

สำหรับปัญหาแรก คุณควรใช้ executeUpdate สำหรับคำสั่งที่เปลี่ยนแปลงฐานข้อมูล และ executeQuery สำหรับเมื่อคุณดึงข้อมูลจากฐานข้อมูล

สำหรับอันที่สอง คุณควรสร้างหลายคำสั่ง และอย่าใช้คำสั่งเดียวกันสำหรับทุก ๆ แบบสอบถามที่คุณพยายามดำเนินการ คุณควรปิดแต่ละคำสั่ง/การเชื่อมต่ออย่างถูกต้อง

person G-Man    schedule 04.03.2013