2016-08-24 15 views
1

こんにちは私はHSQLDBを使用しており、表EMPLOYEEを属性IDで飼いました。デシベルは、スタンドアロンデシベルであり、ここでそれ用のスクリプトファイルです:エラー:特権がないか、オブジェクトが見つかりませんHSQLDB

SET DATABASE UNIQUE NAME HSQLDB56BCF1778F 
SET DATABASE GC 0 
SET DATABASE DEFAULT RESULT MEMORY ROWS 0 
SET DATABASE EVENT LOG LEVEL 0 
SET DATABASE TRANSACTION CONTROL LOCKS 
SET DATABASE DEFAULT ISOLATION LEVEL READ COMMITTED 
SET DATABASE TRANSACTION ROLLBACK ON CONFLICT TRUE 
SET DATABASE TEXT TABLE DEFAULTS '' 
SET DATABASE SQL NAMES FALSE 
SET DATABASE SQL REFERENCES FALSE 
SET DATABASE SQL SIZE TRUE 
SET DATABASE SQL TYPES FALSE 
SET DATABASE SQL TDC DELETE TRUE 
SET DATABASE SQL TDC UPDATE TRUE 
SET DATABASE SQL TRANSLATE TTI TYPES TRUE 
SET DATABASE SQL TRANSLATE TTI TYPES TRUE 
SET DATABASE SQL CONCAT NULLS TRUE 
SET DATABASE SQL UNIQUE NULLS TRUE 
SET DATABASE SQL CONVERT TRUNCATE TRUE 
SET DATABASE SQL AVG SCALE 0 
SET DATABASE SQL DOUBLE NAN TRUE 
SET FILES WRITE DELAY 500 MILLIS 
SET FILES BACKUP INCREMENT TRUE 
SET FILES CACHE SIZE 10000 
SET FILES CACHE ROWS 50000 
SET FILES SCALE 32 
SET FILES LOB SCALE 32 
SET FILES DEFRAG 0 
SET FILES NIO TRUE 
SET FILES NIO SIZE 256 
SET FILES LOG TRUE 
SET FILES LOG SIZE 50 
CREATE USER "Chris" PASSWORD DIGEST '4a7d1ed414474e4033ac29ccb8653d9b' 
ALTER USER "Chris" SET LOCAL TRUE 
CREATE SCHEMA PUBLIC AUTHORIZATION DBA 
SET SCHEMA PUBLIC 
CREATE MEMORY TABLE PUBLIC.EMPLOYEE(ID VARCHAR(20)) 
ALTER SEQUENCE SYSTEM_LOBS.LOB_ID RESTART WITH 1 
SET DATABASE DEFAULT INITIAL SCHEMA PUBLIC 
GRANT USAGE ON DOMAIN INFORMATION_SCHEMA.SQL_IDENTIFIER TO PUBLIC 
GRANT USAGE ON DOMAIN INFORMATION_SCHEMA.YES_OR_NO TO PUBLIC 
GRANT USAGE ON DOMAIN INFORMATION_SCHEMA.TIME_STAMP TO PUBLIC 
GRANT USAGE ON DOMAIN INFORMATION_SCHEMA.CARDINAL_NUMBER TO PUBLIC 
GRANT USAGE ON DOMAIN INFORMATION_SCHEMA.CHARACTER_DATA TO PUBLIC 
GRANT DBA TO "Chris" 
SET SCHEMA SYSTEM_LOBS 
INSERT INTO BLOCKS VALUES(0,2147483647,0) 
SET SCHEMA PUBLIC 
INSERT INTO EMPLOYEE VALUES('CHRIS') 

私はデシベルにアクセスするには、このJavaクラスを使用します。

package jdbc; 

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import java.sql.Statement; 

/** 
* Dies Klasse liefert eine JDBC Connection zurück 
* @author Christian 
* 
*/ 
public class JDBCConnector { 

    private Connection connection; 

    public JDBCConnector(String url, String user, String password){ 
     try{ 
      Class.forName("org.hsqldb.jdbcDriver"); 
      connection = DriverManager.getConnection(url, user, password); 
      if(connection != null){ 
       System.out.println("Verbindung hergestellt"); 
      } 
     }catch (ClassNotFoundException e){ 
      System.err.println("Der Datenbanktreiber konnte nicht geladen werden"); 
      e.printStackTrace(); 
     } catch (SQLException e) { 
      System.err.println("Beim Erstellen der Verbindung ist ein Feheler aufgetreten.\n" 
        + "Bitte überprüfen Sie die URL, sowie Usernamen und Passwort"); 
     } 
    } 

    public Connection getConnection() throws Exception{ 
     if(connection != null){ 
      return connection; 
     }else{ 
      throw new Exception("Connection == null"); 
     } 
    } 

    public String getFirstEntry(){ 
     try { 
      Statement stmt; 
      ResultSet rs = null; 
      stmt = connection.createStatement(); 
      rs = stmt.executeQuery("SELECT * FROM EMPLOYEE;"); 
      rs.next(); 
      String s = rs.getString(1); 
      connection.close(); 
      return s; 
     } catch (SQLException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     return ""; 
    } 


} 

それはとてもだけテストクラスです....

<% JDBCConnector connector = new JDBCConnector("jdbc:hsqldb:file:/Gefaehrdungsbeurteilung_Full/WebContent/gefaehrdungsbeurteilung_full/server/db/DB2;shutdown=true", "Chris", "0000"); 
out.append(connector.getFirstEntry()); 
%> 

だから、いくつかの一つの解を得た:

そして、ここでは、私はJSPファイルから関数を呼び出しますか?私はshutdown=trueを忘れてしまったので、過去にこのエラーが発生しましたが、今度はわかりません。テーブル名は100%正しいです。

+0

しかし:あなたは** ** JSPページ内のJDBC接続を開始べきではありません。コンテナに適切な接続プールを使用し、データベースをサーブレットで処理します。 –

答えて

0

相対(ベース)パスを使用してデータベースに接続しています。このパスは、JSPなどのさまざまな実行コンテキストで異なる場所に解決されます。

開発中は、新しいデータベースの作成と接続を避けるために、接続プロパティーifexists=trueを使用してください。パスが指す既存のデータベースを実行コンテキストに置きます。

<% JDBCConnector connector = new JDBCConnector("jdbc:hsqldb:file:/Gefaehrdungsbeurteilung_Full/WebContent/gefaehrdungsbeurteilung_full/server/db/DB2;shutdown=true;ifexists=true", "Chris", "0000"); 
out.append(connector.getFirstEntry()); 
%> 

shutdown=trueプロパティは、テストに役立ちます。接続が長時間続く場合は、プロダクションでも問題ありません。しかし、定期的に接続を閉じると、データベースを繰り返しシャットダウンします。この場合、別の方法として、hsqldb.write_delay=falseを検討することができます。ガイドを参照してください:

http://hsqldb.org/doc/2.0/guide/dbproperties-chapt.html#dpc_connection_props

http://hsqldb.org/doc/2.0/guide/management-chapt.html#mtc_cache_persistence

無関係
+0

よろしくお願いいたします。しかし、私はまだ同じエラーがあります。私は、Webappでスタンドアロンのデータベースを使用したいので、私は思う...同じクラスのinnを通常のJavaプロジェクトにすると、すべてうまく動作するからです。 – Chris

+0

スタンドアロンのデータベースは、Webアプリケーションで使用できます。絶対ファイルパスまたはデータベースを保持するWebサーバーファイルディレクトリのルートを指す変数を使用する必要があります。 http://hsqldb.org/doc/2.0/guide/dbproperties-chapt.html#dpc_variables_urlを参照してください – fredt

+0

パスは正しいと思います。 "http:// localhost:8080/Test_Full/Test_full/server/db/db.script"というリンクを貼ると、私はcorrektエントリを持つHSQLDBのスクリプトを見ています。だから、現時点では、私はこの問題に本当に答えがありません:/ – Chris

関連する問題