私はhsql dbに接続しようとしていました。 C:\ myhsqlから実行して作成しました。
Java -cp .;C:\hsql\lib\hsqldb.jar org.hsqldb.Server -database.0 file:db\mydb -dbname.0 MYDB
これにより、mydb
というディレクトリにdb
が作成されました。このフォルダーの現在のフォルダーには、mydbという名前の.lck、tmp、script、propertiesファイルと、MYDBという名前の同様のファイルがあります。
Java私が試したコード
Class.forName("org.hsqldb.jdbcDriver");
connection = DriverManager.getConnection("jdbc:hsqldb:file:db/sjdb", "SA", "");
プログラムを実行すると、次のエラーが発生します。
Java.sql.SQLException: Database lock acquisition failure: lockFile: org.hsqldb.persist.LockFile@f3811c1a[file =C:\myhsql\db\mydb.lc
k, exists=true, locked=false, valid=false, ] method: checkHeartbeat read: 2010-10-19 12:46:09 heartbeat - read: -6750 ms.
...
これがスタックトレースです:
Java.sql.SQLException: Database lock acquisition failure: lockFile: org.hsqldb.persist.LockFile@f3811c1a[file =C:\myhsql\db\sjdb.lc
k, exists=true, locked=false, valid=false, ] method: checkHeartbeat read: 2010-10-19 12:46:09 heartbeat - read: -6750 ms.
at org.hsqldb.jdbc.Util.sqlException(Unknown Source)
at org.hsqldb.jdbc.Util.sqlException(Unknown Source)
at org.hsqldb.jdbc.JDBCConnection.<init>(Unknown Source)
at org.hsqldb.jdbc.JDBCDriver.getConnection(Unknown Source)
at org.hsqldb.jdbc.JDBCDriver.connect(Unknown Source)
at Java.sql.DriverManager.getConnection(Unknown Source)
at Java.sql.DriverManager.getConnection(Unknown Source)
at ConnectHSQLDB.main(ConnectHSQLDB.Java:20)
Caused by: org.hsqldb.HsqlException: Database lock acquisition failure: lockFile: org.hsqldb.persist.LockFile@f3811c1a[file =C:\myhsql\db\sjdb.lck, exists=true, locked=false, valid=false, ] method: checkHeartbeat read: 2010-10-19 12:46:09 heartbeat - read: -6750 ms.
at org.hsqldb.error.Error.error(Unknown Source)
at org.hsqldb.persist.LockFile.newLockFileLock(Unknown Source)
at org.hsqldb.persist.Logger.acquireLock(Unknown Source)
at org.hsqldb.persist.Logger.openPersistence(Unknown Source)
at org.hsqldb.Database.reopen(Unknown Source)
at org.hsqldb.Database.open(Unknown Source)
at org.hsqldb.DatabaseManager.getDatabase(Unknown Source)
at org.hsqldb.DatabaseManager.newSession(Unknown Source)
... 6 more
Java.lang.NullPointerException
at ConnectHSQLDB.main(ConnectHSQLDB.Java:32)
誰かが私が間違っていることを教えてもらえますか? SwingDBManagerを使用してdbに接続し、db内のinsert
、delete
、およびselect
レコードを使用できます。 Javaコードを試しましたが、DBManagerを実行していませんでした。それでもロックの問題が発生します。
最初のコマンドはサーバーを起動します。このサーバーはデータベースファイルをロックするので、「他の人」はそれらを変更できません。小文字であるため、「MYDB」の代わりに「-dbname.0 mydb」を使用する必要があります。
データベースに接続するためのJava接続URLが間違っています。接続文字列として「jdbc:hsqldb:hsql:// localhost/mydb」を使用する必要があります。データベースファイルがサーバーの場合、データベースサーバーにはアクセスできますが、file:URLを使用してデータベースを「処理中」にアクセスすることはできません。
サーバーが同じdbを使用しているときに、現在開いているデータベースをIntelliJ database
などの別のクライアントで表示したかったため、このエラーが発生します。
hsql dbを複数のクライアントに接続できるようにするには、
hsqldb.lock_file=false
接続URLは次のようになります
jdbc:hsqldb:file:./db/myDbInFile;hsqldb.lock_file=false
Dbに接続する他のクライアントを実行している場合は、それを閉じる必要があります。
あなたが試みたどの方法も正しいです。
Separate Javaコマンドを使用してHSQLDBサーバーを起動する必要はありません。以下の行は、データベースをロックするため必要ありません。他のプロセスがdbを起動およびロックしないようにしてください。
Java -cp .;C:\hsql\lib\hsqldb.jar org.hsqldb.Server -database.0 file:db\mydb -dbname.0 MYDB
jdbcプログラムを実行するだけ
Java -cp hsqldb.jar HSQLAccess
下の線
jdbc:hsqldb:file:db/sjdb
データベースを起動し、結果を提供します。
この方法では、サーバーを個別に起動する必要はありません。プログラムを実行するだけで、HSQLDBが起動および停止します。
import Java.sql.*;
public class HSQLAccess {
public static void main(String args[]) throws Exception
{
Connection con = null;
try
{
Class.forName("org.hsqldb.jdbcDriver");
con = DriverManager.getConnection("jdbc:hsqldb:file:db/sjdb", "sa","");
Statement st = con.createStatement();
ResultSet rs = st.executeQuery("SELECT * FROM CMDS_WO_MASTER");
while(rs.next())
{
System.out.println(rs.getString(1));
}
con.close();
}
catch(Exception ex )
{
ex.printStackTrace();
}
finally
{
if(con!=null)
{
con.close();
}
}
}
}
windowsで次の接続URLを使用してみてくださいconnection = DriverManager.getConnection( "jdbc:hsqldb:file:/// c:/ hsqldb/mydb"、 "SA"、 "");
NetBeansを閉じ、database.lckを削除して、アプリケーションを再度実行しました。すべてがうまくいきました。
次の方法で、ロックされているHSQLDBデータベースにアクセスできます。
1-更新中my-db-name.properties
ファイルと追加:
hsqldb.lock_file=false
2-または削除my-db-name.lck
ファイル。
3-またはパラメータとしてプロパティを渡すことを使用してデータベースに接続します。
#Without Sqltool:
Java -cp [jar-path]/hsqldb-2.4.0.jar --inlineRc=url=jdbc:hsqldb:file:/[my-db-file-path]/[db-name];readonly=true;hsqldb.lock_file=false,user=sa
#With Sqltool
Java -cp [jar-path]/hsqldb-2.4.0.jar:[jar-path]/sqltool-2.4.0.jar org.hsqldb.cmdline.SqlTool --inlineRc=url=jdbc:hsqldb:file:/[my-db-file-path]/[db-name];readonly=true;hsqldb.lock_file=false,user=sa
他のHSQLDBデータベースパラメータはここにありますが、初回以降は更新できないのでご注意ください。 http://hsqldb.org/doc/2.0/guide/dbproperties-chapt.html
私のMacでは、HTTPのコネクタのポートがserver.xmlの8080から8443に変更されました。そしてそれが私にこのエラーを与えていました:HTTPとHTTPSスキーマの両方が同じポートを使用していました