我正在尝试使用 Derby 进行集成测试,我想知道如何使用一些数据和表结构预先填充它?我无法找到它的文档(即使它肯定存在于某处)。我将它与 JPA 一起使用。
问问题
897 次
2 回答
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
;
于 2013-09-15T15:57:58.523 回答
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 以打印值
希望这至少能给你一个开始,祝你好运!
于 2013-09-15T12:34:38.643 回答