【发布时间】:2015-08-03 23:09:06
【问题描述】:
最近我从 HSQLDB 更改为 H2,更改了一些代码,我的查询停止执行。
我用 RazorSQL 测试我的 SQL 代码,我尝试从中访问我的数据库,令我惊讶的是没有创建表,没有抛出错误没有空指针,有效的 sql,db 文件创建 - 一切似乎都运行正常数据库中没有任何内容。
这是我的数据库访问/创建的关键部分。
我使用连接器类创建连接到数据库
public class H2DatabaseConnector {
private Connection connection;
private Statement statement;
private ResultSet resultSet;
public static final String[] PREP_STATEMENTS = new String[]{};
public static final String DB_FILE_NAME = File.separator + "dboc";
public static final String DB_DIR = Info.OC_DIR + "oc_database\\";
static {
try {
Class.forName("org.h2.Driver");
} catch (ClassNotFoundException ex) {
ex.printStackTrace();
}
}
public H2DatabaseConnector(String username, String password) {
try {
openConnection(username, password);
} catch (SQLException ex) {
ex.printStackTrace();
}
}
.....
//data credentials are correct
private void openConnection(String username, String password) throws SQLException {
connection = DriverManager.getConnection("jdbc:h2:file:" + DB_DIR + DB_FILE_NAME+";DATABASE_TO_UPPER=false", username, password);
statement = connection.createStatement();
}
public void execute() {
}
}
以及我执行 sql 命令的实用程序类
public class DbUtil {
public static final void createUsersTable(){
new H2DatabaseConnector(Info.Db.DB_MAIN_USERNAME,Info.Db.DB_MAIN_PASSWORD) {
@Override
public void execute() {
try {
getStatement().execute("CREATE TABLE users(name VARCHAR(255) NOT NULL,password VARCHAR(255) NOT NULL,email VARCHAR(255));");
System.out.println("Table Created users");
getStatement().executeUpdate("INSERT INTO users VALUES ('sa','sa',NULL);");
closeConnection();
} catch (SQLException ex) {
ex.printStackTrace();
}
}
}.execute();
}
}
按预期执行,但未创建表。 为什么会这样?没有显示错误,并且 sql 语法是正确的,因为当我在 **RazorSQL 中打开数据库并创建/插入表时,一切正常。**
有什么想法吗?我真的坚持了一整天。
【问题讨论】:
-
您是否尝试过先提交事务?我不确定
executeUpdate应该与create table一起使用... -
@MadProgrammer 先提交事务是什么意思? --btw--我使用了 execute(query) -edited now /
-
Connection#commit或将autoCommit设置为true...? -
@MadProgrammer 将尝试 --- 不工作(错误:未找到表“USERS”;SQL 语句:) 在尝试从应用程序外部访问它之后。- 没有创建与以前相同的表
-
您可以尝试从您的 SQL 文字中删除分号 (
;),即getStatement().execute("CREATE TABLE users(name VARCHAR(255) NOT NULL,password VARCHAR(255) NOT NULL,email VARCHAR(255))");吗?