db-derby-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Thomas Nielsen <Thomas.Niel...@Sun.COM>
Subject Re: Accessing embedded database in JAR file
Date Tue, 07 Aug 2007 07:06:05 GMT
Hi Ryan,

First of all, can you please state what version you are using?

I tested this on the main trunk, and from what I can tell there seems to 
be a slight problem - at least with the documentation regarding the '/' 
and the classpath subsubprotocol.

Using the documented way and a jar'ed small test database called 
MyNullsTest:
--- snip snip ---
ij version 10.4
ij> connect 'jdbc:derby:classpath:/MyNullsTest';
ERROR XJ004: Database 'classpath:/MyNullsTest' not found.
--- snip snip --

Skipping the '/' seems to work though (like you state):
--- snip snip --
ij>  connect 'jdbc:derby:classpath:MyNullsTest';
ij> select * from t;
C1         |C2
-----------------------
1          |1
..
..
--- snip snip ---

Maybe you can use the 'jar' subsubprotocol directly with the version you 
are using as a workaround?

--- snip snip ---
ij> connect 'jdbc:derby:jar:(./MyNullsTest.jar)MyNullsTest';
ij> select * from t;
C1         |C2
-----------------------
1          |1
..
..
--- snip snip ---

Hopefully some of the more experienced Derby people can shed some light 
on the '/' issue, and how it was meant to be...

HTH,
Thomas


Ryan Breidenbach wrote:
> I am trying to create a database that is embedded within a JAR file and 
> so far I am not having any luck. Here is what I have done so far (mostly 
> by the "book" from the Derby docs).
> 
> Obviously, the first step is to create a database, which I did in a 
> temporary directory. I then moved the created database files into my 
> "classes" directory (from which I will build my JAR file) *excluding* 
> the /tmp directory and *.lck files. All of these remaining DB files are 
> jarred up. Executing jar -tf of this file yields this (among other 
> things - this JAR also has a META-INF directory and some classes):
> 
> northwind/
> northwind/log/
> northwind/seg0/
> northwind/log/log.ctrl
> northwind/log/log1.dat
> northwind/log/log2.dat
> northwind/log/logmirror.ctrl
> northwind/seg0/c10.dat
> northwind/seg0/c101.dat
> northwind/seg0/c111.dat
> northwind/seg0/c121.dat
> northwind/seg0/c130.dat
> northwind/seg0/c141.dat
> northwind/seg0/c150.dat
> northwind/seg0/c161.dat
> northwind/seg0/c171.dat
> northwind/seg0/c180.dat
> northwind/seg0/c191.dat
> northwind/seg0/c1a1.dat
> northwind/seg0/c1b1.dat
> northwind/seg0/c1c0.dat
> northwind/seg0/c1d1.dat
> northwind/seg0/c1e0.dat
> northwind/seg0/c1f1.dat
> northwind/seg0/c20.dat
> northwind/seg0/c200.dat
> northwind/seg0/c211.dat
> northwind/seg0/c221.dat
> northwind/seg0/c230.dat
> northwind/seg0/c241.dat
> northwind/seg0/c251.dat
> northwind/seg0/c260.dat
> northwind/seg0/c271.dat
> northwind/seg0/c281.dat
> northwind/seg0/c290.dat
> northwind/seg0/c2a1.dat
> northwind/seg0/c2b1.dat
> northwind/seg0/c2c1.dat
> northwind/seg0/c2d0.dat
> northwind/seg0/c2e1.dat
> northwind/seg0/c2f0.dat
> northwind/seg0/c300.dat
> northwind/seg0/c31.dat
> northwind/seg0/c311.dat
> northwind/seg0/c321.dat
> northwind/seg0/c331.dat
> northwind/seg0/c340.dat
> northwind/seg0/c351.dat
> northwind/seg0/c361.dat
> northwind/seg0/c371.dat
> northwind/seg0/c380.dat
> northwind/seg0/c391.dat
> northwind/seg0/c3a1.dat
> northwind/seg0/c3b1.dat
> northwind/seg0/c3c0.dat
> northwind/seg0/c3d1.dat
> northwind/seg0/c3e0.dat
> northwind/seg0/c3f1.dat
> northwind/seg0/c400.dat
> northwind/seg0/c41.dat
> northwind/seg0/c411.dat
> northwind/seg0/c420.dat
> northwind/seg0/c431.dat
> northwind/seg0/c440.dat
> northwind/seg0/c451.dat
> northwind/seg0/c460.dat
> northwind/seg0/c471.dat
> northwind/seg0/c480.dat
> northwind/seg0/c491.dat
> northwind/seg0/c4a1.dat
> northwind/seg0/c4b0.dat
> northwind/seg0/c4c1.dat
> northwind/seg0/c4d1.dat
> northwind/seg0/c4e1.dat
> northwind/seg0/c4f0.dat
> northwind/seg0/c501.dat
> northwind/seg0/c51.dat
> northwind/seg0/c511.dat
> northwind/seg0/c520.dat
> northwind/seg0/c531.dat
> northwind/seg0/c541.dat
> northwind/seg0/c551.dat
> northwind/seg0/c560.dat
> northwind/seg0/c571.dat
> northwind/seg0/c581.dat
> northwind/seg0/c591.dat
> northwind/seg0/c5a0.dat
> northwind/seg0/c5b1.dat
> northwind/seg0/c5c1.dat
> northwind/seg0/c5d1.dat
> northwind/seg0/c5e1.dat
> northwind/seg0/c5f0.dat
> northwind/seg0/c60.dat
> northwind/seg0/c601.dat
> northwind/seg0/c611.dat
> northwind/seg0/c621.dat
> northwind/seg0/c71.dat
> northwind/seg0/c81.dat
> northwind/seg0/c90.dat
> northwind/seg0/ca1.dat
> northwind/seg0/cb1.dat
> northwind/seg0/cc0.dat
> northwind/seg0/cd1.dat
> northwind/seg0/ce1.dat
> northwind/seg0/cf0.dat
> northwind/service.properties
> 
> So far this is what I think it should look like for a database named 
> 'northwind'. The next step is to include this JAR as a dependency on 
> another project. Once this is done, I attempt to select data from one of 
> the northwind tables. Here is code snippet of that 
> 
> // configure system properties per docs
> System.setProperty("derby.storage.tempDirectory", tempDirectory);
> System.setProperty("derby.stream.error.file",logFile);
> DataSource dataSource = new 
> DriverManagerDataSource(EmbeddedDriver.class.getName(),"jdbc:derby:classpath:northwind",

> "");
> Connection connection = dataSource.getConnection();
> Statement statement = connection.createStatement();
> ResultSet rs = statement.executeQuery("select * from employees");
> 
> And this is where everything goes wrong and I get "Table/View 
> 'EMPLOYEES' does not exist." According to the documentation, this URL 
> should not even work - the database name should begin with a "/" and I 
> should not have to include the "classpath" subprotocol. But if I exclude 
> either of these, I get a "Database /northwind not found" error message. 
> The fact that I am not getting that error message leads me to believe 
> that the embedded database *is* being found - I am just not sure where 
> my tables are.
> 
> Also, if I change the URL to access the the database on the filesystem 
> (from the previous project's build) via the directory subprotocol, 
> everything works. So, I know the database was created correctly at one 
> point in time.
> 
> I have been struggling with this for a day now and I am at a loss. Is 
> there anything obvious I am doing wrong? Did I miss a configuration step 
> to make a embedded JAR database work? Any help would be great.
> 
> Thanks.
> 
> Ryan
> 

-- 
Thomas Nielsen

Mime
View raw message