hsqldb - jak połączyć się z bazą danych

0

Witam,
mam takie pytanie czy ktoś może wie jak załadować bazę hsqlbd do pamięci operacyjnej albo do pliku żeby można było z niej normalnie pod javą korzystać bo ja z moją znajomości angielskiego nie <ort>doSZEDŁem </ort>do tego z dokumentacji na stronie http://hsqldb.org/ i nie wiem jak się z tym uporać
Pozdrawiam
Paweł

// znajomość polskiego też szwankuje. na przyszłość pisz bardziej opisowe tematy wątków - Ł

0

Co rozumiesz przez załadować? Z bazą danych możesz cię co najwyżej połączyć a następnie pobierać i modyfikować dane chociażby za pomocą zapytań SQL. Przykładowa klasa do testowania połączenia i wykonania prostych zapytań znajduje się tutaj: http://hsqldb.org/web/hsqlDocsFrame.html

0
qba7878 napisał(a)

Co rozumiesz przez załadować? Z bazą danych możesz cię co najwyżej połączyć a następnie pobierać i modyfikować dane chociażby za pomocą zapytań SQL.

Bazę danych HSQLDB można uruchomić wewnątrz własnej aplikacji i wtedy połączenie z nią jest czysto abstrakcyjne. Jest to wręcz główne zastosowanie tej bazy, wiec na przyszłość kolego radziłbym nie ort! o rzeczach, o których wydaje ci się że coś wiesz.

Co do załadowania/uruchomiania HSQLDB wewnątrz aplikacji to masz dwa sposoby:

  • dane bazy w plikach:
    Connection c = DriverManager.getConnection("jdbcfile:/opt/db/testdb", "sa", "");
  • wszystko w pamięci:
    Connection c = DriverManager.getConnection("jdbcmem:aname", "sa", "");

Reszta standardowo jak to w Javie. Oczywiście hsqldb.jar musisz mieć przy sobie.

Mała rada na przyszłość: bez angielskiego ani rusz w tej branży :P

0

Dziękuję za odpowiedzi ale mam jeszcze jedno pytanie dlaczego gdy wykonuje zapytanie

st = conn.createStatement(); // statements

		int i = st.executeUpdate("INSERT INTO KURSANCI VALUES(NULL,'Pawel','waw',313)"); 

dane które wstawie są ze pliku (db_file.script) gdy tworzę połaczenie nie sa aktualizowane

CREATE SCHEMA PUBLIC AUTHORIZATION DBA
CREATE MEMORY TABLE KURSANCI(ID INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 0) NOT NULL PRIMARY KEY,IMIE VARCHAR(30),NAZWISKO VARCHAR(50),LICZBA INTEGER)
ALTER TABLE KURSANCI ALTER COLUMN ID RESTART WITH 7
CREATE USER SA PASSWORD ""
GRANT DBA TO SA
SET WRITE_DELAY 20
SET SCHEMA PUBLIC
INSERT INTO KURSANCI VALUES(0,'Ford','Ania',500)
INSERT INTO KURSANCI VALUES(1,'Ford','pawel',200)
INSERT INTO KURSANCI VALUES(2,'Ford','ola',300)
INSERT INTO KURSANCI VALUES(3,'zycie','Ania',100)
INSERT INTO KURSANCI VALUES(4,'mam','Ania',55)
INSERT INTO KURSANCI VALUES(5,'tata','Ania',22)
INSERT INTO KURSANCI VALUES(6,'Goja','Ania',1000)

tzn dlaczego na końcu tego pliku nie polawia się
INSERT INTO KURSANCI VALUES(7,'Pawel','waw',313)
i po następnym uruchominiu nie mam już 8 elementów w bazie tylko mam ich 7
Proszę o jakąś radę bo na razie nie wiem jak sobie z tym poradzić
Z góry dziękuję
Pozdrawiam
Paweł

0

może dlatego że nie dajesz commit'a na końcu?
Zajrzyj do dokumentacji na jakieś przykłady.

0

może dlatego że nie dajesz commit'a na końcu?
Zajrzyj do dokumentacji na jakieś przykłady.

0

sprobuj dac st.executeQuery() po lini z executeUpdate().

0

No niestety ani commit ani dodanie executeQuery nie pomaga ale dziękuję za propozycje rozwiązań
Pozdrawiam
Paweł

0

Witam wszystkich bo piszę po raz pierwszy na tym forum.

Ja również mam problem z połączeniem się z baza HSQLDB.

Korzystam JBOSS 4.2.2. W czasie instalacji „wybrałem” tą bazę. Serwer aplikacji podłączyłem do eclipse. Zrobiłem „New Connection Profile” dla bazy. Jestem wstanie z poziomu eclipse połączyć się z bazą i wykonać dowolny kod SQL.

Pisze servlet i łącze się z baza w sposób następujący

try {
Class.forName("org.hsqldb.jdbcDriver" );
} catch (Exception e) {
System.out.println("ERROR: failed to load HSQLDB JDBC driver.");
e.printStackTrace();
return;
}

    try {
		Connection c = DriverManager.getConnection("jdbc:hsqldb:hsql://localhost/xdb", "sa", "");
	} catch (SQLException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}

co skutkuje :

ERROR [STDERR] java.sql.SQLException: socket creation error
ERROR [STDERR] at org.hsqldb.jdbc.Util.sqlException(Unknown Source)
ERROR [STDERR] at org.hsqldb.jdbc.jdbcConnection.<init>(Unknown Source)
ERROR [STDERR] at org.hsqldb.jdbcDriver.getConnection(Unknown Source)
ERROR [STDERR] at org.hsqldb.jdbcDriver.connect(Unknown Source)
ERROR [STDERR] at java.sql.DriverManager.getConnection(Unknown Source)
ERROR [STDERR] at java.sql.DriverManager.getConnection(Unknown Source)
ERROR [STDERR] at pl.s2943.Projekt1.init(Projekt1.java:46)
ERROR [STDERR] at javax.servlet.GenericServlet.init(GenericServlet.java:212)
ERROR [STDERR] at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1161)
ERROR [STDERR] at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:806)
ERROR [STDERR] at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:129)
ERROR [STDERR] at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
ERROR [STDERR] at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:179)
ERROR [STDERR] at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)
ERROR [STDERR] at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
ERROR [STDERR] at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
ERROR [STDERR] at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157)
ERROR [STDERR] at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
ERROR [STDERR] at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262)
ERROR [STDERR] at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
ERROR [STDERR] at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
ERROR [STDERR] at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446)
ERROR [STDERR] at java.lang.Thread.run(Unknown Source)

Ktoś wie co jest grane ??

0

Do Pawel.W , dodaj do url-a połączenia ciąg: ;shutdown=true

0

Jednak powyższe rozwiązanie może spowolnić bazę danych, alternatywnie można też wywołać komendę SQL SHUTDOWN aby HSQLDB zamknął połączenie i zapisał tabele z pamięci do pliku.

1 użytkowników online, w tym zalogowanych: 0, gości: 1