2011-06-14 91 views
2

我很難讓Java寫入數據庫。爲什麼我的Java類不能寫入數據庫?

我有以下編譯和運行沒有錯誤的代碼。

import java.sql.*; 
import java.lang.reflect.*; 
import java.lang.reflect.Array; 

public class InquireRecord { 

    private String submitter; 

    public static void main(String[] args) { 
     InquireRecord Stub = new InquireRecord(); 
     Stub.sendToDb("insert into inquiries (submitter) values ('Rodger Dunn')"); 
    } 

    public InquireRecord() { 
     super(); 
    } 

    public void sendToDb(String queryString){ 
     try { 
      Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
      String filename = "C:/Development/inquire.mdb"; 
      String database = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ="; 
      database+= filename.trim() + ";DriverID=22;READONLY=true}"; 
      Connection con = DriverManager.getConnection(database ,"",""); 
      Statement s = con.createStatement(); 
      s.execute (queryString);  
     } 
     catch (Throwable e) { 
      System.out.println(e); 
     } 
    } 
} 

C:/Development/inquire.mdb文件存在並且是可寫的。它沒有被其他任何東西使用。

數據庫有2場:ID(其中增量,是指數)和submitter這是一個文本字段的255

的長度,當它運行或當它編譯我沒有得到任何錯誤。但是沒有數據出現在數據庫中。我是Java的全新,但不是SQL。我錯過了什麼?

+4

也許問題是在你的驅動程序參數'READONLY = TRUE'? – Howard 2011-06-14 19:48:10

+0

我覺得有一個問題,你調用s.execute()而不是s.executeUpdate()。 [api文檔](http://download.oracle.com/javase/6/docs/api/java/sql/Statement.html#executeUpdate(java.lang.String))默認情況下,事務模式是自動提交,所以你不應該關閉連接才能顯示數據。你仍然應該關閉自己的連接來清理自己。 – Jim 2011-06-14 20:24:11

回答

1

我想你應該在退出程序之前關閉(con.close())連接。

+0

輝煌。我知道答案很簡單。關閉con工作。 – 2011-06-14 20:01:06

0

修改你釣到的魚:

try { 
    Class.forName(....); 
} catch (ClassNotFoundException e) { 
    System.out.println(e.getMessage()); 
    System.exit(1); 
} 
try {   
    ...your SQL commands... 
} catch (SQLException sqe) { 
    System.out.println(sqe.getMessage(); 
} 

爲了看看會發生什麼。

,霍華德還談到只讀可能是一個問題上面...

相關問題