web-dev-qa-db-fra.com

Comment exécuter la base de données H2 en mode serveur?

Comment démarrer la base de données H2 en mode serveur. J'ai besoin de le démarrer depuis mon application. J'ai essayé le code suivant:

server = Server.createTcpServer().start();

Voici les propriétés pour la connexion:

javabase.jdbc.url = jdbc:h2:tcp://localhost:9092/nio:~/source/db/database/db;AUTO_SERVER=TRUE
javabase.jdbc.driver = org.h2.Driver
javabase.jdbc.username = sa
javabase.jdbc.password =

Lorsque j'ai lancé le programme, j'ai eu l'erreur suivante:

client.db.exception.DAOException: org.h2.jdbc.JdbcSQLException: Database may be already in use: "Locked by another process". Possible solutions: close all other connection(s); use the server mode [90020-164]
    at org.h2.message.DbException.getJdbcSQLException(DbException.Java:329)
    at org.h2.message.DbException.get(DbException.Java:169)
    at org.h2.message.DbException.get(DbException.Java:146)
    at org.h2.store.FileLock.getExceptionAlreadyInUse(FileLock.Java:439)
    at org.h2.store.FileLock.lockFile(FileLock.Java:336)
    at org.h2.store.FileLock.lock(FileLock.Java:128)
    at org.h2.engine.Database.open(Database.Java:542)
    at org.h2.engine.Database.openDatabase(Database.Java:222)
    at org.h2.engine.Database.<init>(Database.Java:217)
    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.server.TcpServerThread.run(TcpServerThread.Java:133)
    at Java.lang.Thread.run(Thread.Java:680)

Merci,

24
Feras Odeh

Comme le message d'exception l'indique, "La base de données est peut-être déjà utilisée". Vous devez fermer toutes les autres connexions pour vous assurer que la base de données n'est pas ouverte simultanément dans un autre processus.

En passant, n'utilisez pas AUTO_SERVER = TRUE et le mode serveur en même temps. Voir la documentation pour le mode mixte automatique . Utilisez l'un ou l'autre. 

Je suppose que vous êtes un peu confus au sujet des différents modes de connexion. Je suggère de lire la documentation sur les modes de connexion , pour vous assurer de bien la comprendre.

26
Thomas Mueller

En ligne de commande,

Java -jar h2-1.3.160.jar -webAllowOthers -tcpAllowOthers

cela lancera une base de données h2 en mode serveur:

Serveur Web Console s'exécutant à http: //A.B.C.D: 8082 (les autres peuvent se connecter) Impossible de démarrer un navigateur pour ouvrir l’URL http: //A.B.C.D: 8082 : Browser La détection a échoué et la propriété système h2.browser n'a pas défini le serveur TCP exécutant à l'adresse tcp: //A.B.C.D: 9092 (d'autres personnes peuvent se connecter). Serveur PG exécuté à pg: //A.B.C.D: 5435 (connexions locales uniquement)

ouvrir un navigateur pour avoir une interface graphique d'administration

17
ERNESTO ARROYO RON

Vous pouvez utiliser le code suivant pour exécuter H2 en mode serveur.

<bean id="dataSource" class="org.Apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="org.h2.Driver" />
<property name="url" value="jdbc:h2:target/h2/ps;AUTO_SERVER=TRUE" />
<property name="username" value="sa" />
<property name="password" value="" />
</bean>

Vous pouvez utiliser le client SQL SQuirrel ( http://squirrel-sql.sourceforge.net/ ) pour vous connecter à votre base de données H2 et consulter les tables.

  1. Créer une nouvelle connexion.
  2. Sélectionnez H2 dans le menu déroulant du pilote.
  3. Définissez l'URL sur le dossier H2 du dossier cible de votre projet (jdbc: h2: C:\projets\espace de travail\TestProject\cible/h2/ps; AUTO_SERVER = true)
  4. Entrez le nom d'utilisateur ("sa")
  5. Entrer le mot de passe ("")
12
yousafsajjad

Fermez toutes les applications utilisant H2 (console Web, etc.) Ajoutez ensuite AUTO_SERVER = TRUE à la fin de l'emplacement dans la console h2 et dans le programme Java (ce que vous avez déjà fait).

2
Nimesha Kalinga

J'avais cette erreur en essayant de démarrer H2.
.__ Voir aussi http://h2database.com/javadoc/org/h2/tools/Server.html

Exception dans le fil "principal" org.h2.jdbc.JdbcSQLException: Feature not pris en charge: "- ~ webAllowOthers" [50100-197]

J'ai donc suivi ces étapes: 

  1. make dir mkdir h2db ce répertoire aura vos fichiers db.
  2. Hit cette commande: Java -cp bin/h2-1.4.197.jar org.h2.tools.Server -web -webAllowOthers -tcp -tcpAllowOthers -baseDir /home/manoj/dev/h2/h2db_6.0
    cette commande va commencer h2 
  3. Si vous voulez exécuter h2 dans le backend, ouvrez vi h2.sh et collez cette commande dans ceci: Nohup Java -cp bin/h2-1.4.197.jar org.h2.tools.Server -web -webAllowOthers -tcp -tcpAllowOthers -baseDir /home/manoj/dev/h2/h2db_6.0/ &
  4. Maintenant, lancez ./bin.h2.sh.
0
Manoj Kumar Mali