ugrás a tartalomhoz

relatív HSQLDB útvonal

whiteman0524 · 2010. Dec. 5. (V), 17.02
Sziasztok !

Egy nagyon egyszerű problémával fordulok hozzátok, mint ahogy az a címből is kiderül. Bizonyos Java project-hez HSQLDB-t használok, és nem tudom hogy hogyan lehetne az adatbázis fájlok helyét relatívan megadni. Tehát hogy mindig az aktuális project mappán belül valahova hozza létre az adatbázist és onnan is szedje a dolgokat. Az a probléma, hogy mindig vagy az Eclipse mappájába (igen azzal fejlesztek), vagy a gyökérhez képest ( Linuxon /, Windowson C: ) abszolút útvonalat lehet megadni. Én pedig jobb szeretném mindig a project mappán belül tudni a dolgokat.

A neten már voltam, tehát kerestem a megoldást de sajnos még nem találtam meg. Annyi biztos, hogy a "DriverManager.getConnection(...), és a Sajatszerver.setDatabasePath(...) metódusoknak kéne jó paramétereket adni, csak azt nem tudom hogy hogy.


A segítséget előre is köszönöm.
 
1

csak azt nem tudom hogy

Crystal · 2010. Dec. 5. (V), 17.08
csak azt nem tudom hogy hogy.


mivel próbálkoztál eddig?
2

Máris mutatom...

whiteman0524 · 2010. Dec. 5. (V), 17.19
Például van az alábbi egyszerű osztályom, amitől le lehet kérni a kapcsolatot, illetve be lehet vele zárni. Továbbá a hibaüzenetet is le lehet kérni ha éppen arra kerülne a sor, de ez most nem lényeges. Nem is az osztály a lényeges, mert biztos szebben is meglehetne csinálni, de hirtelenjében ilyet dobtam össze :
package database;

import java.sql.*;
import org.hsqldb.Server;

public class DBConnection {
	
	static Connection connection = null;
	static Server hsqlServer = null;
	static String exceptionMessage = null;
	
	public static Connection getConnection(){   
        try {  	
            hsqlServer = new Server();  
            hsqlServer.setLogWriter(null);
            hsqlServer.setSilent(true);
            hsqlServer.setDatabaseName(0, "database");
            hsqlServer.setDatabasePath(0, "file:/adatbazis_mappaja/");         
            hsqlServer.start();       
            try {         	
                Class.forName("org.hsqldb.jdbcDriver");            
                connection = DriverManager.getConnection(
                    "jdbc:hsqldb:hsql://localhost/database", "sa", "");      
            } catch(Exception e) {
               connection = null;
               exceptionMessage = e.getMessage();
            }
        } catch(Exception e) {  
        	connection = null;
            exceptionMessage = e.getMessage();
        } 
        return connection;	
	}
	
	public static String getExceptionMessage(){
		return exceptionMessage;
	}
	
	public static void closeConnection() throws SQLException{
		if(connection != null){
			connection.close();
		}
		if(hsqlServer != null){
			hsqlServer.stop();
		}
	}
	
}
Na szóval ami engem különösképp érdekel az a

hsqlServer.setDatabasePath(0, "file:/adatbazis_mappaja/");

sor. Ez mondja meg, ha jól tudom, hogy hol keresse az adatbázist stb. Namost a file: után lehet megadni az útvonalat, de ezzel az a baj hogy abszolút. Azt szeretném megoldani, hogy mindig project mappán belülre mutasson, tehát ha a project mappám mondjuk a C:\mappa1\mappa2\mappa3 -ban van, és fogom azt átviszem egy másik gépre, és ott bemásolom mondjuk az U:\mappa4\mappa5 alá akkor úgy is működjön a dolog.

Nem tudom hogy ez megoldható-e ?
3

Szerintem illetlenséget

kuka · 2010. Dec. 5. (V), 19.27
Szerintem illetlenséget művelsz. Ahol adnak a biztonságra ott általában mezei felhasználó nem írhat abba a könyvtárba ahol a futtathatók tanyáznak. Javaslom, hogy inkább tedd állíthatóvá. Például egy .properties állományban legyen egy db.konyvtar=/ide/koll/a/db sor, annak hiányában aztán nyugodt lelkiismerettel teheted az adatbázist a .class állományok mellé:

hsqlServer.setDatabasePath(0, "file:"+allitas.getProperty("db.konyvtar",getClass().getResource(".")));
4

Köszi szépen a segítséget

whiteman0524 · 2010. Dec. 12. (V), 02.07
Igazság szerint ez meg se fordult a fejemben, hogy az adatbázisnak nem illene a classok között lennie. De ha már HSQLBD-ről van szó, akkor szerintem többnyire a portolhatóság a lényeg, tehát ide-oda cipelni a projectet stb. Ilyen esetben pedig talán jobb ha egy csomag alatt van minden hogy ne kelljen annyit bajlódni. De egy általad javasolt .properties állmonyánnyal éles(ebb) környezetben valóban könnyen átállítható a forrás, a kód turkálása nélkül is.

Köszi szépen.