好的,情况就是这样。我重用了一个来自不同项目的代码,我检查了某个sqlite db文件中是否存在某个表。如果没有,它将创建表。
然后代码工作了,我没有对文件添加重大更改,所以我很困惑没有数据写入文件。
在我运行代码之前,我必须创建一个空的数据库文件,我把src / main / resources命名为example.db
public class DBStuff{
protected Connection c = null;
private final String fileName;
public DBStuff(String fileName) {
this.fileName = fileName;
checkDB();
}
protected void startConnection() {
try {
Class.forName("org.sqlite.JDBC");
c = DriverManager.getConnection("jdbc:sqlite::resource:" + fileName);
c.setAutoCommit(false);
} catch (SQLException | ClassNotFoundException ex) {
Logger.getLogger(DBStuff.class.getName()).log(Level.SEVERE, null, ex);
}
}
protected void closeConnection() {
try {
c.close();
} catch (SQLException ex) {
Logger.getLogger(DBStuff.class.getName()).log(Level.SEVERE, null, ex);
}
}
private void checkDB() {
startConnection();
checkTable("firsttable", "CREATE TABLE firsttable"
+ "(id TEXT PRIMARY KEY NOT NULL, "
+ " stuff TEXT NOT NULL)";
checkTable("secondtable", "CREATE TABLE secondtable "
+ "(id TEXT NOT NULL, "
+ " stuffId TEXT NOT NULL, "
+ " specificStuff TEXT NOT NULL, "
+ " CONSTRAINT pk_idstuffId PRIMARY KEY (id,stuffId),"
+ " CONSTRAINT fk_id FOREIGN KEY (id) REFERENCES firsttable(id))");
closeConnection();
}
private void checkTable(String dbName, String sql) {
try {
ResultSet rs;
boolean exists = false;
DatabaseMetaData md = c.getMetaData();
rs = md.getTables(null, null, "%", null);
while (rs.next()) {
if (rs.getString(3).equals(dbName)) {
exists = true;
break;
}
}
if (!exists) {
Statement stmt;
stmt = c.createStatement();
stmt.executeUpdate(sql);
stmt.close();
c.commit();
}
} catch (SQLException ex) {
Logger.getLogger(DBStuff.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
我使用
创建了一个DBStuff对象DBStuff dbstuff = new DBStuff("example.db");
我已经使用print语句验证了在第二次运行checkDB时找到的表(通过打印出rs.getString(3)
)。
然而,当我查看数据库文件时(在src/main/resources/example.db
,target/classes/example.db
和WEB-INF/classes/example.db
中的warfile内部,我想到的所有可能位置),文件都不会更新。在所有这些位置,它仍然是0字节大小。
我做错了什么?为什么表没有写入这些文件?
我在我的pom文件中使用和不使用此代码运行代码
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
答案 0 :(得分:0)
我发现该文件实际上位于target/ProjectName-x.x.x/WEB-INF/classes/example.db
下次给我提示:在我的文件浏览器中使用搜索功能。它找到了你可能永远找不到的东西。