1

我整天都在搜索有关此类似问题的文档,但似乎找不到答案。我很容易在服务器客户端模式下找到了一个数据库(org.apache.derby.jdbc.ClientDriver),但是我对嵌入式模式下的结果数据库感到困惑(org.apache.derby.jdbc.EmbeddedDriver)。

一切似乎都很好,与数据库的连接是成功的,但它总是给我这个错误:

java.sql.SQLSyntaxErrorException:表/视图“APP.TABELJEMBATAN”不存在。

http://i1263.photobucket.com/albums/ii633/lindafitriani/javadb4.jpg

我的数据库存在,见下文:

http://i1263.photobucket.com/albums/ii633/lindafitriani/javadb1.jpg
http://i1263.photobucket.com/albums/ii633/lindafitriani/javadb2.jpg

这是我的 derby.log 文件的内容:

2012-06-30 18:08:34.170 GMT:引导 Derby 版本 Apache 软件基金会 - Apache Derby - 10.5.3.0 - (802917):数据库目录 C:\Users\Linda 上的实例 a816c00e-0138-3e94-78a3-000000b35a08 Fitriani\Documents\NetBeansProjects\Jembatan\Jembatan2

数据库类加载器已启动 - derby.database.classpath=''

http://i1263.photobucket.com/albums/ii633/lindafitriani/javadb3.jpg

数据库位置是正确的(在我的工作目录上),但 derby.database.classpath 是空的......有人知道如何解决这个问题吗?

这是我的代码:

package jembatan;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
/**
 *
 * @author Linda Fitriani
 */
public class DBConnect {
        private static Connection conn;
    private static String url = "jdbc:derby:Jembatan2;create=true;";
    private static String user = "APP";
    private static String pass = "linda";

    public static Connection connect() throws SQLException{
        try{
            Class.forName("org.apache.derby.jdbc.EmbeddedDriver").newInstance();
        }catch(ClassNotFoundException cnfe){
            System.err.println("Error: ClassNotFoundException"+cnfe.getMessage());
        }catch(InstantiationException ie){
            System.err.println("Error:InstantiationException"+ie.getMessage());
        }catch(IllegalAccessException iae){
            System.err.println("Error:IllegalAccessException"+iae.getMessage());
        }

        conn = DriverManager.getConnection(url,user,pass);
        return conn;
    }
    public static Connection getConnection() throws SQLException, ClassNotFoundException{
        if(conn !=null && !conn.isClosed())
            return conn;
        connect();
        return conn;

    }
}


private void buildData(){

          Connection c ;
          data = FXCollections.observableArrayList();
          try{
              c = DBConnect.connect();
            //SQL FOR SELECTING ALL OF APP.TABELJEMBATAN
            String SQL = "select * from APP.TABELJEMBATAN";
            //ResultSet
            ResultSet rs = c.createStatement().executeQuery(SQL);

            /**********************************
             * TABLE COLUMN ADDED DYNAMICALLY *
             **********************************/

            for(int i=0 ; i<rs.getMetaData().getColumnCount(); i++){
                //We are using non property style for making dynamic table
                final int j = i;                
                TableColumn col = new TableColumn(rs.getMetaData().getColumnName(i+1));
                col.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<ObservableList,String>,ObservableValue<String>>(){                    
                    public ObservableValue<String> call(TableColumn.CellDataFeatures<ObservableList, String> param) {                                                                                              
                        return new SimpleStringProperty(param.getValue().get(j).toString());                        
                    }                    
                });

                tableview.getColumns().addAll(col); 
                col.setMinWidth(200);
                System.out.println("Column ["+i+"] ");
            }

            /********************************
             * Data added to ObservableList *
             ********************************/
            while(rs.next()){
                //Iterate Row
                ObservableList<String> row = FXCollections.observableArrayList();
                for(int i=1 ; i<=rs.getMetaData().getColumnCount(); i++){
                    //Iterate Column
                    row.add(rs.getString(i));
                }
                System.out.println("Row [1] added "+row );
                data.add(row);

            }

            //FINALLY ADDED TO TableView
            tableview.setItems(data);
          }catch(Exception e){
              e.printStackTrace();
              System.out.println("Error on Building Data");             
          }

      }
4

3 回答 3

2

我找到了解决方案...

嵌入式模式在neatbeans安装目录上创建数据库..所以,我只是指向

"jdbc:derby:C:/Users/Linda Fitriani/.netbeans/7.1/derby/databaseJembatan;create=false;"

这就是应用程序找不到数据库的原因,数据库位于 netbeans 安装目录中。

于 2012-07-01T05:56:07.800 回答
1

只需确保在数据库连接 URL 中添加 create=true 并确保 url 引用 db 所在的目录 指定 Derby 在数据库中搜索 jar 文件时应使用的类路径 确保将 DerbyClient.jar 添加到你的项目库

下次运行该应用程序时,您会注意到您不应再次启动服务器,并且当您将 jar 文件复制到另一个位置时,请确保 (lib) 目录与它

我希望这会有所帮助

于 2014-12-10T22:22:40.847 回答
0

我也遇到了另一个问题(无法在 hive 中显示表),但在安装 hive 和 derby 后出现相同的日志消息

我终于意识到所有权问题(hduser 应该被授予作为配置单元文件夹的所有者......).e

于 2018-07-09T15:09:58.113 回答