2013-03-04 56 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当你从数据库中检索数据的第一个问题。

对于第二个,您应该创建多个语句,并且不会对您尝试执行的每个查询使用相同的语句。您还应该正确关闭每个声明/连接。