【发布时间】:2018-05-02 10:52:14
【问题描述】:
- 我安装了一个 Derby DB 并打开了一个名为“MyDbTest”的连接。
-
我通过 SQL 命令为“MyDbTest”连接创建了一个名为 BOOK 的表:
创建表簿(ID INT,DESCRIPTION VARCHAR(20),UNITCOST VARCHAR(20),ISBN VARCHAR(20),NBOFPAGES INT);
我使用以下命令运行了 Derby 服务器:“startNetworkServer.bat”
- 我运行了以下代码(使用 Open JPA):
公共类主{
public static void main(String[] args) throws SQLException, ClassNotFoundException {
System.out.println("\n\n>>> Executing : " + Main.class.toString() + " <<<\n");
persistBook(new Book(new Long(5000), "H2G2", "Best IT Scifi Book", new Float(12.5), "1234-5678-5678",
new Integer(247)));
Book book = findBook(new Long(5000));
System.out.println("# " + book);
}
/**
* Gets a database connection
*/
static {
try {
Class.forName("org.apache.derby.jdbc.ClientDriver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
private static Connection getConnection() throws SQLException {
return DriverManager.getConnection("jdbc:derby://localhost:1527/MyDbTest;create=true", "app", "app");
}
/**
* Persists the book to the database
*/
private static void persistBook(Book book) throws SQLException {
String query = "INSERT INTO BOOK (ID, TITLE, DESCRIPTION, UNITCOST, ISBN, NBOFPAGE) VALUES (?, ?, ?, ?, ?, ?)";
try (PreparedStatement stmt = getConnection().prepareStatement(query)) {
stmt.setLong(1, book.getId().longValue());
stmt.setString(2, book.getTitle());
stmt.setString(3, book.getDescription());
stmt.setFloat(4, book.getUnitCost().longValue());
stmt.setString(5, book.getIsbn());
stmt.setInt(6, book.getNbOfPage().intValue());
stmt.executeUpdate();
}
}
}
我得到一个错误:
线程“主”java.sql.SQLSyntaxErrorException 中的异常: 表/视图“书”不存在。
原因:错误 42X05:表/视图“书”不存在。
我还阅读了这篇文章中提出的解决方案:Is it necessary to create tables each time you connect the derby database?。 不幸的是,他们都没有帮助我。
- 我将“jdbc:derby://localhost:1527/MyDbTest;create=true”更改为“jdbc:derby://localhost:1527/MyDbTest;create=false”
- 我不在 Derby 中使用“内存中”配置。
- 我不认为我以其他用户的身份连接到数据库(我不确定。如何检查?)。
【问题讨论】:
-
您创建表的过程尚不清楚。好难说也许您的程序没有连接到同一个数据库?可能是不同的用户和/或架构?
-
我想过。我在 ij shell 中输入:“显示连接”并得到:CONNECTION0* - jdbc:derby:MyDbTest * = 当前连接
-
另外,代码中没有 JPA。这只是 JDBC。最重要的是,代码不会关闭数据库连接。这应该是固定的。
-
Derby 中“表不存在”的 3 个常见原因:stackoverflow.com/questions/22996818/…