Apakah ada cara untuk menelusuri konten database dalam memori H2 atau HSQLDB untuk dilihat? Misalnya, selama sesi debugging dengan Hibernate untuk memeriksa kapan flush dijalankan; atau untuk memastikan skrip yang membuat contoh DB memberikan hasil yang diharapkan.
Apakah ada addon atau pustaka yang dapat Anda sematkan dengan kode Anda untuk mengizinkannya?
Harap sebutkan mana yang Anda bicarakan (H2 atau HSQLDB) jika Anda memiliki jawaban khusus untuk salah satunya.
hsqldb
h2
in-memory-database
jplandrain.dll
sumber
sumber
Jawaban:
Anda dapat menjalankan server web H2 dalam aplikasi Anda yang akan mengakses database dalam memori yang sama. Anda juga dapat mengakses H2 yang berjalan dalam mode server menggunakan klien JDBC generik seperti SquirrelSQL .
MEMPERBARUI:
Server webServer = Server.createWebServer("-web,-webAllowOthers,true,-webPort,8082").start(); Server server = Server.createTcpServer("-tcp,-tcpAllowOthers,true,-tcpPort,9092").start();
Sekarang Anda dapat terhubung ke database Anda melalui
jdbc:h2:mem:foo_db
URL dalam proses yang sama atau menelusurifoo_db
database menggunakanlocalhost:8082
. Ingatlah untuk menutup kedua server. Lihat juga: Database H2 dalam mode memori tidak dapat diakses oleh Konsol .Anda juga bisa menggunakan Spring:
<bean id="h2Server" class="org.h2.tools.Server" factory-method="createTcpServer" init-method="start" destroy-method="stop" depends-on="h2WebServer"> <constructor-arg value="-tcp,-tcpAllowOthers,true,-tcpPort,9092"/> </bean> <bean id="h2WebServer" class="org.h2.tools.Server" factory-method="createWebServer" init-method="start" destroy-method="stop"> <constructor-arg value="-web,-webAllowOthers,true,-webPort,8082"/> </bean> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close" depends-on="h2Server"> <property name="driverClass" value="org.h2.Driver"/> <property name="jdbcUrl" value="jdbc:h2:mem:foo_db"/> </bean>
BTW Anda hanya harus bergantung pada pernyataan dan bukan pada manual mengintip isi database. Gunakan ini hanya untuk pemecahan masalah.
NB jika Anda menggunakan kerangka pengujian Spring, Anda tidak akan melihat perubahan yang dibuat oleh transaksi yang sedang berjalan dan transaksi ini akan dibatalkan segera setelah pengujian.
sumber
<constructor-arg value="-web,-webAllowOthers,-webPort,8082"/>
Server.createTcpServer("-tcpPort" ,"9092", "-tcpAllowOthers")
Server.createWebServer("-webPort", "8082", "-tcpAllowOthers")
Server.createWebServer("-web", "-webAllowOthers", "-webPort", "8082").start();
Untuk H2, Anda dapat memulai server web dalam kode Anda selama sesi debugging jika Anda memiliki objek koneksi database. Anda dapat menambahkan baris ini ke kode Anda, atau sebagai 'ekspresi jam tangan' (secara dinamis):
Alat server akan memulai browser web secara lokal yang memungkinkan Anda mengakses database.
sumber
DataSource
instans secara otomatis ke kasus pengujian saya dan menambahkan metode dengan bodyorg.h2.tools.Server.startWebServer(dataSource.getConnection());
. Sekarang mengevaluasi metode itu membuka browser. Perhatikan bahwa ini menyebabkan eksekusi tertidur sampai Anda memutuskan sambungan (ikon kiri atas di browser)!Di H2, yang berhasil untuk saya adalah:
Saya membuat kode, memulai server seperti:
Itu memulai server pada
localhost
port 9092.Kemudian, dalam kode, buat koneksi DB di URL JDBC berikut:
Saat men-debug, sebagai klien untuk memeriksa DB, saya menggunakan yang disediakan oleh H2, yang cukup baik, untuk meluncurkannya Anda hanya perlu meluncurkan java utama berikut secara terpisah
Ini akan memulai server web dengan aplikasi di 8082, mengaktifkan browser
localhost:8082
Dan kemudian Anda dapat memasukkan URL sebelumnya untuk melihat DB
sumber
Dengan HSQLDB, Anda memiliki beberapa opsi bawaan.
Ada dua manajer basis data GUI dan antarmuka baris perintah ke basis data. Kelas untuk ini adalah:
Anda dapat memulai salah satu hal di atas dari aplikasi Anda dan mengakses database dalam memori.
Contoh dengan JBoss diberikan di sini:
http://docs.jboss.org/jbpm/v3.2/userguide/html/ch07s03.html
Anda juga dapat memulai server dengan aplikasi Anda, mengarahkannya ke database dalam memori.
sumber
Anda dapat mengeksposnya sebagai fitur JMX, yang dapat dimulai melalui JConsole:
Konteks XML:
sumber
Ini adalah pengontrol Play 2 untuk menginisialisasi H2 TCP dan server Web:
package controllers; import org.h2.tools.Server; import play.mvc.Controller; import play.mvc.Result; import java.sql.SQLException; /** * Play 2 controller to initialize H2 TCP Server and H2 Web Console Server. * * Once it's initialized, you can connect with a JDBC client with * the URL `jdbc:h2:tcp://127.0.1.1:9092/mem:DBNAME`, * or can be accessed with the web console at `http://localhost:8082`, * and the URL JDBC `jdbc:h2:mem:DBNAME`. * * @author Mariano Ruiz <[email protected]> */ public class H2ServerController extends Controller { private static Server h2Server = null; private static Server h2WebServer = null; public static synchronized Result debugH2() throws SQLException { if (h2Server == null) { h2Server = Server.createTcpServer("-tcp", "-tcpAllowOthers", "-tcpPort", "9092"); h2Server.start(); h2WebServer = Server.createWebServer("-web","-webAllowOthers","-webPort","8082"); h2WebServer.start(); return ok("H2 TCP/Web servers initialized"); } else { return ok("H2 TCP/Web servers already initialized"); } } }
sumber
Untuk HSQLDB, Yang berikut berhasil untuk saya:
Dan ini memunculkan GUI dengan tabel dan data saya setelah saya mengarahkannya ke database in-mem yang bernama kanan.
Ini pada dasarnya setara dengan newing up
DatabaseManager
(non Swing), yang meminta detail koneksi, dan diatur ke--noexit
)Saya juga mencoba versi Swing, tetapi hanya punya
main
, dan saya tidak yakin argumen yang harus dilewati. Jika ada yang tahu, silahkan posting disini.Hanya karena saya mencari berjam-jam untuk nama database yang benar: Nama database adalah nama sumber data Anda. Jadi coba dengan URL jdbc: hsqldb: mem: dataSource jika Anda memiliki data source bean dengan id = dataSource. Jika ini tidak berhasil, coba testdb yang merupakan default.
sumber
Saya memiliki masalah dengan H2 versi 1.4.190 koneksi jarak jauh ke inMemory (dan juga dalam file) dengan
Connection is broken: "unexpected status 16843008"
sampai jangan downgrade ke 1.3.176. Lihat Grails mengakses server H2 TCP macetsumber
Ini lebih merupakan komentar untuk posting Thomas Mueller sebelumnya daripada sebuah jawaban, tetapi belum memiliki reputasi yang cukup untuk itu. Cara lain untuk mendapatkan koneksi jika Anda adalah Template Spring JDBC menggunakan yang berikut ini:
Jadi pada mode debug jika Anda menambahkan ke tampilan "Ekspresi" di Eclipse, browser akan terbuka yang menampilkan Konsol H2:
Tampilan Ekspresi Eclipse
Konsol H2
sumber
Saya tidak tahu mengapa ini berfungsi dengan baik di mesin Anda, tetapi saya harus menghabiskan satu hari untuk membuatnya berfungsi.
Server bekerja dengan Intellij Idea U melalui url "jdbc: h2: tcp: // localhost: 9092 / ~ / default".
"localhost: 8082" di browser juga berfungsi dengan baik.
Saya menambahkan ini ke dalam mvc-dispatcher-servlet.xml
sumber
Bagaimana dengan nyaman melihat (dan juga mengedit) konten melalui ODBC & MS-Access, Excel? Versi perangkat lunak ::
Server H2:
Konfigurasi Sumber Data ODBC Windows10 yang dapat digunakan oleh klien ODBC mana pun: Di bidang Data, nama yang diberikan dalam parameter '-key' harus digunakan.
sumber