所以我决定使用 h2,这给了我导入 MySQL 的一些问题。答案就在这里:在 MODE=MySQL 中运行 h2 不支持 MySQL 转储
基本上,您必须删除表名周围的引号(尽管如此,它们似乎对字段工作正常)。您可以使用反引号 ( ` ) 或根本不使用任何刻度/引号。导致问题的另一件事是表定义末尾的“AUTO_INCREMENT = 1”。由于 h2 在启动后使用 1 作为默认值,因此无论如何都不需要此命令。
这是一个如何设置嵌入式数据库的示例:
public class InMemoryTest {
@org.testng.annotations.Test // ofc this can be JUnit @Test as well
public void test() throws Exception {
Class.forName("org.h2.Driver");
Connection conn = DriverManager.
getConnection("jdbc:h2:mem:test;MODE=MySQL;IGNORECASE=TRUE;INIT=RUNSCRIPT FROM 'src/test/resources/test.sql'");
Statement stat = conn.createStatement();
stat.execute("INSERT INTO `usr_avatar` (\"usr_avatar_user_id\") VALUES (1)");
}
}
test.sql 将是:
DROP TABLE IF EXISTS usr_avatar;
CREATE TABLE IF NOT EXISTS usr_avatar (
"usr_avatar_id" int(11) NOT NULL AUTO_INCREMENT,
"usr_avatar_user_id" int(11) NOT NULL
)