如何使用表格和一些数据预先在内存中填充Derby?

时间:2013-09-15 12:03:38

标签: java java-ee jpa derby

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

2 个答案:

答案 0 :(得分:2)

与您相同,我无法找到任何种类的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中。完成后,您可以遍历该ResultSet以打印值

希望这至少可以给你一点开始, 祝你好运!

答案 1 :(得分:2)

对于创建表和插入值这样的简单内容,您可以使用ant sql任务和包含SQL命令的文件。

蚂蚁:

    <sql driver="org.apache.derby.jdbc.EmbeddedDriver" 
         url="jdbc:derby:${dbpath};create=true"
         src="${dbdir}/${name}.sql"
         keepformat="true"
         password="" userid="">
      <classpath>
         <pathelement location="${env.DERBY_INSTALL}/lib/derby.jar"/>
         <pathelement location="${env.DERBY_INSTALL}/lib/derbytools.jar"/>
      </classpath>
    </sql>

SQL文件:

CREATE TABLE Cabs
 (Path VARCHAR(256) NOT NULL PRIMARY KEY,
  Description VARCHAR(64) NOT NULL,
  EngineType SMALLINT NOT NULL);

INSERT INTO Cabs
 VALUES
  .... values to insert
  ;