我有两个问题。
下面的INSERT查询不会在msAccess数据库中插入记录。有人可以解释为什么会发生这种情况以及如何解决这个问题? 我用双引号替换单引号,但这也没有帮助。
在下面的代码中,只执行了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();
}
答案 0 :(得分: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();
}
}
请注意,为了插入数据库表,您应该创建传递适当参数的状态。
另一个重要的一点是,在完成后应始终关闭Connection,Statement和ResultSet。关闭Connection时,第二个插入将刷新到数据库表。
答案 1 :(得分:0)
对于第一个问题,您应该使用executeUpdate
来更改数据库,并使用executeQuery
来检索数据库中的数据。
对于第二个,您应该创建多个语句,而不是对您尝试执行的每个查询使用相同的语句。你也应该正确关闭每个语句/连接。