2008-09-30 6 views
28

Actuellement, nous utilisons HSQLDB comme base de données intégrée, mais nous recherchons une base de données avec moins d'espace mémoire lorsque le volume de données augmente.Incorporation par programme de la base de données Java h2

Derby/JavaDB n'est pas une option pour l'instant car il stocke globalement les propriétés dans les propriétés du système. Nous avons donc pensé à h2.

Alors que nous utilisions HSQLDB, nous avons créé un objet-serveur, défini les paramètres et l'avons démarré. Ceci est décrit here (et donné comme exemple dans la classe org.hsqldb.test.TestBase).

La question est: est-ce que cela peut être fait aussi avec la base de données h2? Avez-vous des exemples de code pour cela? En scannant la page h2, je n'ai pas trouvé d'exemple.

Répondre

24

du téléchargement, je vois que le fichier tutorial.html a cette

import org.h2.tools.Server; 
... 
// start the TCP Server 
Server server = Server.createTcpServer(args).start(); 
... 
// stop the TCP Server 
server.stop(); 
63

Oui, vous pouvez exécuter H2 en mode intégré. Vous utilisez simplement le pilote JDBC et se connecter à une URL intégrée comme celui-ci (leur exemple):

Cette base de données peut être utilisé en mode intégré ou en mode serveur. Pour l'utiliser en mode intégré, vous devez:

* Add h2.jar to the classpath 
* Use the JDBC driver class: org.h2.Driver 
* The database URL jdbc:h2:~/test opens the database 'test' in your user home directory 

Exemple de connexion JDBC à une base de données H2 intégré (adapté de http://www.h2database.com/javadoc/org/h2/jdbcx/JdbcDataSource.html):

import org.h2.jdbcx.JdbcDataSource; 
// ... 
JdbcDataSource ds = new JdbcDataSource(); 
ds.setURL("jdbc:h2:˜/test"); 
ds.setUser("sa"); 
ds.setPassword("sa"); 
Connection conn = ds.getConnection(); 

Si vous cherchez à utilisez H2 dans un mode purement en mémoire/intégré, vous pouvez le faire aussi. Voir ce lien pour plus:

Vous avez juste besoin d'utiliser une URL particulière dans le code JDBC normal comme "jdbc: h2: mem: DB1".

+0

Je dois définir les "propriétés" pour dire: Je dois - au moins - définir le répertoire dans lequel réside la base de données. C'est la raison pour laquelle nous ne pouvons pas utiliser Derby/JavaDB dans la question. – Georgi

+0

L'exécution sur le port 8082, qui par défaut pour h2 n'est pas une option non plus. – Georgi

+0

Je ne comprends pas ce que vous dites. Rien ici n'utilise les propriétés du système. Vous spécifiez un emplacement pour stocker les fichiers. C'est à votre application de décider où faire cela. Vous pouvez utiliser java.io.tmpdir pour cela si vous le souhaitez. Il ne fonctionne pas sur un port en mode intégré. –

Questions connexes