Hi Leute
ich habe hier recht viel gutes über H2 gehört und wollte es mal nutzen..
Sinn der Sache ist es, das ich nicht extra eine Datenbank installieren muss, wenn ich das Programm an einen Freund weitergeben möchte. Also wollte ich sie "embedded" nutzen.
Dafür bin ich folgende Schritte durch:
1. Jar file runtergeladen
2. neues Projekt mit Eclipse -> neues Lib erstellt und jar file in dieses Lib eingebunden
3. dann das übliche Gui und so weiter
4. eine Datenbankklasse erstellt
nur zum testen..
Was mache ich verkehrt?
beim Ausführen kommt folgender Fehler:
org.h2.jdbc.JdbcSQLException: Datenbank wird wahrscheinlich bereits benutzt: "Locked by another process". Mögliche Lösungen: alle Verbindungen schliessen; Server Modus verwenden
Database may be already in use: "Locked by another process". Possible solutions: close all other connection(s); use the server mode [90020-152]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:327)
at org.h2.message.DbException.get(DbException.java:167)
at org.h2.message.DbException.get(DbException.java:144)
at org.h2.store.FileLock.getExceptionAlreadyInUse(FileLock.java:443)
at org.h2.store.FileLock.lockFile(FileLock.java:338)
at org.h2.store.FileLock.lock(FileLock.java:134)
at org.h2.engine.Database.open(Database.java:535)
at org.h2.engine.Database.openDatabase(Database.java:218)
at org.h2.engine.Database.<init>(Database.java:213)
at org.h2.engine.Engine.openSession(Engine.java:56)
at org.h2.engine.Engine.openSession(Engine.java:159)
at org.h2.engine.Engine.createSessionAndValidate(Engine.java:138)
at org.h2.engine.Engine.createSession(Engine.java:121)
at org.h2.engine.Engine.createSession(Engine.java:28)
at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:285)
at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:114)
at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:98)
at org.h2.Driver.connect(Driver.java:72)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at DB_Connect.<init>(DB_Connect.java:12)
at MyFrame.<init>(MyFrame.java:21)
at Main$1.run(Main.java:16)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
ich habe hier recht viel gutes über H2 gehört und wollte es mal nutzen..
Sinn der Sache ist es, das ich nicht extra eine Datenbank installieren muss, wenn ich das Programm an einen Freund weitergeben möchte. Also wollte ich sie "embedded" nutzen.
Dafür bin ich folgende Schritte durch:
1. Jar file runtergeladen
2. neues Projekt mit Eclipse -> neues Lib erstellt und jar file in dieses Lib eingebunden
3. dann das übliche Gui und so weiter
4. eine Datenbankklasse erstellt
Java:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class DB_Connect {
public DB_Connect() {
try {
Class.forName("org.h2.Driver");
Connection conn = DriverManager.getConnection("jdbc:h2:~/test", "root", "meinpasswort");
Statement stmt = conn.createStatement();
String order = "TEST DROP TABLE IF EXISTS TEST; CREATE TABLE TEST(ID INT PRIMARY KEY, NAME VARCHAR(255));";
ResultSet rs = stmt.executeQuery(order);
while(rs.next()){
//System.out.println(rs.getInt(0)+" : "+rs.getString(1));
}
conn.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Was mache ich verkehrt?
beim Ausführen kommt folgender Fehler:
org.h2.jdbc.JdbcSQLException: Datenbank wird wahrscheinlich bereits benutzt: "Locked by another process". Mögliche Lösungen: alle Verbindungen schliessen; Server Modus verwenden
Database may be already in use: "Locked by another process". Possible solutions: close all other connection(s); use the server mode [90020-152]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:327)
at org.h2.message.DbException.get(DbException.java:167)
at org.h2.message.DbException.get(DbException.java:144)
at org.h2.store.FileLock.getExceptionAlreadyInUse(FileLock.java:443)
at org.h2.store.FileLock.lockFile(FileLock.java:338)
at org.h2.store.FileLock.lock(FileLock.java:134)
at org.h2.engine.Database.open(Database.java:535)
at org.h2.engine.Database.openDatabase(Database.java:218)
at org.h2.engine.Database.<init>(Database.java:213)
at org.h2.engine.Engine.openSession(Engine.java:56)
at org.h2.engine.Engine.openSession(Engine.java:159)
at org.h2.engine.Engine.createSessionAndValidate(Engine.java:138)
at org.h2.engine.Engine.createSession(Engine.java:121)
at org.h2.engine.Engine.createSession(Engine.java:28)
at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:285)
at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:114)
at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:98)
at org.h2.Driver.connect(Driver.java:72)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at DB_Connect.<init>(DB_Connect.java:12)
at MyFrame.<init>(MyFrame.java:21)
at Main$1.run(Main.java:16)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Zuletzt bearbeitet von einem Moderator: