java - 如何用表和一些数据在内存中预填充 Derby?

标签 java jakarta-ee jpa derby

我正在尝试使用 Derby 进行集成测试,我想知道如何用一些数据和表结构预先填充它?我找不到它的文档(即使它肯定存在于某处)。我将它与 JPA 一起使用。

最佳答案

与您一样,我无法找到任何类型的 API,但能够将来自各种示例的以下代码片段放在一起。我希望你觉得它有用。

我与 Derby 交互的主要方式是通过 String SQL 查询,如下例所示:

String create = "CREATE TABLE Pathways (" +
"ID_NUMBER VARCHAR(10) NOT NULL," +
"PATH VARCHAR(50))";
Statement st = conn.createStatement();
st.executeUpdate(create);
st.close(); 

这会在数据库中创建表 Pathways,并添加两列:ID_NUMBER 和 PATH

DatabaseMetaData dmd = conn.getMetaData();
ResultSet columns = dmd.getColumns(null, null, "PATHWAYS", bob);
while(columns.next()){
System.out.println(columns.getString("COLUMN_NAME"));
}
String bob = NameOfColumnIWantToReturnOrNull

这将允许您查看刚刚创建的表格中的所有列。

Statement st = conn.createStatement();
st.executeUpdate("INSERT INTO PATHWAYS VALUES('Test path', 'C:\\' )");
st.close();

这应该允许您在路径表的每一列中插入一个值

st.executeUpdate("ALTER TABLE PATHWAYS ADD COLUMN ID_NUMBER VARCHAR(10)");

这个向 Pathways 表添加了一个新列

st.executeUpdate("ALTER TABLE PATHWAYS DROP COLUMN ID_NUMBER"); 

这条语句从表中删除一列

ArrayList<String> listTables = new ArrayList<>();
ResultSet tables = conn.getMetaData().getTables(null, null, null, null);
while(tables.next()){
String check = tables.getString("TABLE_NAME");
if(check.length() < 3 || !check.substring(0, 3).equals("SYS")) {
listTables.add(check);
    }
}
tables.close();

此查询将列出数据库中的所有表并将它们放入 ArrayList listTables,一旦进入,您可以通过遍历列表来列出它们。缺少标记为“SYS”的原因是因为它们已经存在存在于数据库中,我相信 Derby 出于自己的目的使用它,因此最好不要管它。

Statement st=conn.createStatement();
String tableRemove = "DROP TABLE ";
for(String i : listTables){
tableRemove += i;
st.executeUpdate(tableRemove);
}

结合上面的代码,您可以通过遍历列表并选择要删除的表来删除或“删除”您想要的表,在这种情况下,我将遍历所有表并将它们全部删除。

ResultSet rs=st.executeQuery("SELECT * FROM USERS");
    while (rs.next()) {
        String first=rs.getString("FIRST_NAME");
        String last=rs.getString("LAST_NAME");
        System.out.println("Name: " + first + " " + last);
    }
    rs.close();

这个从名为 USERS 的表中选择所有条目并将它们放入结果集中。完成后,您可以迭代该 ResultSet 以打印值

希望这至少能给你一个开始, 祝你好运!

关于java - 如何用表和一些数据在内存中预填充 Derby?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18812156/

相关文章:

java - 如何使用 eclipse IDE 从 java 程序运行 sudo 命令?

java - Micronaut 和 Java Mail API

java - 在 Java 中以编程方式添加 <p> 标签

java - 带缓存的 EJB 服务定位器

java - 基本 SpringMvC Controller 不工作

java - 如何正确向jpa onetomany join表添加记录

java - NoClassDefFounderror 当类肯定存在时

java - 实时更新值?

java - 如何将单个实体类动态映射到多个表?

java - Hibernate:按列名设置字段