2013-03-04 87 views
0

我有2個問題。java和msaccess插入sql不起作用

  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(); 
    } 
    
+1

你有沒有例外? – 2013-03-04 08:20:53

+0

使用[PreparedStatement](http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html) – MadProgrammer 2013-03-04 08:25:28

+0

問題可能是's.executeQuery(「drop table users」)'會拋出異常如果表不存在。在刪除表之前,您需要檢查表是否存在 – 2013-03-04 08:32:06

回答

1

沒有涉及任何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(); 
    } 
} 

要注意的是,爲了插入到數據庫表,你應該創建statetement傳遞適當的參數:如果你改變了這樣的代碼,你的程序應該工作。

另一個重要的一點是,當你完成後,你應該總是關閉Connection,Statement和ResultSet。當你關閉連接時,第二個插入將被刷新到數據庫表。

+0

謝謝。你的代碼像魅力一樣工作。 – jeet 2013-03-04 13:30:46

+0

這是你的代碼有幾個更正... – 2013-03-04 14:33:01

0

對於你應該使用executeUpdate的語句變更數據庫,並executeQuery當你從數據庫中檢索數據的第一個問題。

對於第二個,您應該創建多個語句,並且不會對您嘗試執行的每個查詢使用相同的語句。您還應該正確關閉每個聲明/連接。