2011-06-14 59 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(); 
} 

为了看看会发生什么。

,霍华德还谈到只读可能是一个问题上面...

相关问题