jdbc 在 javafx 应用程序中使用嵌入式 derby:Table/View 'TABLE NAME' 不存在异常
jdbc with embedded derby in javafx application: Table/View 'TABLE NAME' does not exist exception
我正在创建一个 JavaFX 独立应用程序并使用嵌入式 derby 数据库并通过 JDBC 连接到它。问题是每当我尝试与数据库 tables 交互时,我得到 "java.sql.SQLSyntaxErrorException: Table/View 'BUILDINGS' does not exist."。
我找了很多,还是解决不了。我查了这三个原因here, but I'm still getting the same error. This post 听起来和我的情况很相似,但我不知道他是如何解决的。我已经从连接元数据和 netbeans 服务选项卡检查了数据库 URL,结果是一样的。
以下是与问题相关的代码片段:
public class DataBaseUtility {
public Connection derbyDBConnection(String url){
Connection con = null;
String driver = "org.apache.derby.jdbc.EmbeddedDriver";
try {
Class.forName(driver).newInstance();
con = DriverManager.getConnection(url, "", "");
con.setSchema("APP");
} catch (ClassNotFoundException | SQLException |
InstantiationException | IllegalAccessException ex) {
Logger.getLogger(DataBaseUtility.class.getName())
.log(Level.SEVERE, null, ex);
}
return con;
}
public ResultSet databaseQuerying(Connection con, String query){
ResultSet resultSet = null;
try {
PreparedStatement preStmt = con.prepareStatement(query);
resultSet = preStmt.executeQuery();
} catch (SQLException ex) {
Logger.getLogger(DataBaseUtility.class.getName()).log(Level.SEVERE, null, ex);
}
return resultSet;
}}
和
public class MainApp extends Application {
public static DataBaseUtility dbUtility ;
public static Connection con;
@Override
public void init(){
dbUtility = new DataBaseUtility();
con = dbUtility.derbyDBConnection("jdbc:derby:elsarhEmbedded");
try {
DatabaseMetaData dbmd = con.getMetaData();
System.out.println("\n----------------------------------------------------") ;
System.out.println("Database Name = " + dbmd.getDatabaseProductName()) ;
System.out.println("Database User Name= " + dbmd.getUserName()) ;
System.out.println("Database Version = " + dbmd.getDatabaseProductVersion()) ;
System.out.println("Driver Name = " + dbmd.getDriverName()) ;
System.out.println("Driver Version = " + dbmd.getDriverVersion()) ;
System.out.println("Database URL = " + dbmd.getURL()) ;
System.out.println("----------------------------------------------------") ;
/*
-------------the result from the above ----------
Database Name = Apache Derby
Database User Name= APP
Database Version = 10.14.1.0 - (1808820)
Driver Name = Apache Derby Embedded JDBC Driver
Driver Version = 10.14.1.0 - (1808820)
Database URL = jdbc:derby:elsarhEmbedded
*/
} catch (SQLException ex) {
Logger.getLogger(MainApp.class.getName()).log(Level.SEVERE, null, ex);
}
}
我尝试从 netbeans 向数据库执行命令并将数据插入同一个 table 并且它有效。
正如@Mark Rotteveel 所说,这都是关于相对路径和目录的,@BlueRat 在 this question
的回答中对此进行了很好的解释
我正在创建一个 JavaFX 独立应用程序并使用嵌入式 derby 数据库并通过 JDBC 连接到它。问题是每当我尝试与数据库 tables 交互时,我得到 "java.sql.SQLSyntaxErrorException: Table/View 'BUILDINGS' does not exist."。
我找了很多,还是解决不了。我查了这三个原因here, but I'm still getting the same error. This post 听起来和我的情况很相似,但我不知道他是如何解决的。我已经从连接元数据和 netbeans 服务选项卡检查了数据库 URL,结果是一样的。
以下是与问题相关的代码片段:
public class DataBaseUtility {
public Connection derbyDBConnection(String url){
Connection con = null;
String driver = "org.apache.derby.jdbc.EmbeddedDriver";
try {
Class.forName(driver).newInstance();
con = DriverManager.getConnection(url, "", "");
con.setSchema("APP");
} catch (ClassNotFoundException | SQLException |
InstantiationException | IllegalAccessException ex) {
Logger.getLogger(DataBaseUtility.class.getName())
.log(Level.SEVERE, null, ex);
}
return con;
}
public ResultSet databaseQuerying(Connection con, String query){
ResultSet resultSet = null;
try {
PreparedStatement preStmt = con.prepareStatement(query);
resultSet = preStmt.executeQuery();
} catch (SQLException ex) {
Logger.getLogger(DataBaseUtility.class.getName()).log(Level.SEVERE, null, ex);
}
return resultSet;
}}
和
public class MainApp extends Application {
public static DataBaseUtility dbUtility ;
public static Connection con;
@Override
public void init(){
dbUtility = new DataBaseUtility();
con = dbUtility.derbyDBConnection("jdbc:derby:elsarhEmbedded");
try {
DatabaseMetaData dbmd = con.getMetaData();
System.out.println("\n----------------------------------------------------") ;
System.out.println("Database Name = " + dbmd.getDatabaseProductName()) ;
System.out.println("Database User Name= " + dbmd.getUserName()) ;
System.out.println("Database Version = " + dbmd.getDatabaseProductVersion()) ;
System.out.println("Driver Name = " + dbmd.getDriverName()) ;
System.out.println("Driver Version = " + dbmd.getDriverVersion()) ;
System.out.println("Database URL = " + dbmd.getURL()) ;
System.out.println("----------------------------------------------------") ;
/*
-------------the result from the above ----------
Database Name = Apache Derby
Database User Name= APP
Database Version = 10.14.1.0 - (1808820)
Driver Name = Apache Derby Embedded JDBC Driver
Driver Version = 10.14.1.0 - (1808820)
Database URL = jdbc:derby:elsarhEmbedded
*/
} catch (SQLException ex) {
Logger.getLogger(MainApp.class.getName()).log(Level.SEVERE, null, ex);
}
}
我尝试从 netbeans 向数据库执行命令并将数据插入同一个 table 并且它有效。
正如@Mark Rotteveel 所说,这都是关于相对路径和目录的,@BlueRat 在 this question
的回答中对此进行了很好的解释