hi,
i'm fairly new to derby and experience a problem absolutely not clear to
me.
programming an java-application (rcp-based, if it matters) i create a
database programmatically with two tables, reading and writing works well.
i restart my application, try to access the db with
_exactly_the_same_code_ ... and get the error mentioned in the subject!
-------- Derby Information --------
JRE - JDBC: J2SE 5.0 - JDBC 3.0
[/home/arne/Eclipse/.plugins/eclipse/plugins/org.apache.derby.core_10.1.1/derby.jar]
10.1.1.0 - (208786)
[/home/arne/Eclipse/.plugins/eclipse/plugins/org.apache.derby.core_10.1.1/derbyclient.jar]
10.1.1.0 - (208786)
[/home/arne/Eclipse/.plugins/eclipse/plugins/org.apache.derby.core_10.1.1/derbytools.jar]
10.1.1.0 - (208786)
[/home/arne/Eclipse/.plugins/eclipse/plugins/org.apache.derby.core_10.1.1/derbynet.jar]
10.1.1.0 - (208786)
------------------------------------------------------
it works well, if i create and access the db in a single session. if try
to access the db in another session later on,
Connection conn = DriverManager.getConnection("jdbc:derby:/tmp/TestDB",
prop); yields
SQL Exception: Connection refused : Invalid authentication.
at org.apache.derby.impl.jdbc.Util.newEmbedSQLException(Unknown
Source)
at org.apache.derby.impl.jdbc.Util.newEmbedSQLException(Unknown
Source)
at org.apache.derby.impl.jdbc.Util.generateCsSQLException(Unknown
Source)
at
org.apache.derby.impl.jdbc.EmbedConnection.newSQLException(Unknown Source)
at
org.apache.derby.impl.jdbc.EmbedConnection.checkUserCredentials(Unknown
Source)
at org.apache.derby.impl.jdbc.EmbedConnection.<init>(Unknown
Source)
at org.apache.derby.impl.jdbc.EmbedConnection30.<init>(Unknown
Source)
at org.apache.derby.jdbc.Driver30.getNewEmbedConnection(Unknown
Source)
at org.apache.derby.jdbc.InternalDriver.connect(Unknown Source)
at java.sql.DriverManager.getConnection(DriverManager.java:525)
at java.sql.DriverManager.getConnection(DriverManager.java:140)
at
de.itcputbus.marinasw.main.dblocal.LocalDBStuff.readEmbedded(LocalDBStuff.java:181)
...
code to create and access (if you find a typo -- the code i use is
syntactically correct, i probabyl introduced it here)
public static void initEmbedded() {
try{
//prop is a java.utils.Properties instance
prop.setProperty("derby.user.username", "password");
prop.setProperty("derby.system.home",
dbpath.removeLastSegments(1).toOSString());
prop.setProperty("derby.connection.requireAuthentication",
"true");
prop.setProperty("derby.database.fullAccessUsers",
"dba,username");
prop.setProperty("derby.authentication.provider",
"BUILTIN");
System.setProperty("derby.system.home",
dbpath.removeLastSegments(1).toOSString());
Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
}catch(Exception e){
e.printStackTrace();
}
}
}
public static void createEmbedded(){
try{
Connection conn =
DriverManager.getConnection("jdbc:derby:/tmp/TestDB;create=true", prop);
Statement s = conn.createStatement();
s.addBatch("CALL
SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY('derby.connection.requireAuthentication','true')");
s.addBatch("CALL
SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY('derby.user.username','password')");
s.addBatch("CALL
SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY('derby.database.fullAccessUsers',
'dba,username')");
s.addBatch("CALL
SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY('derby.authentication.provider',
'BUILTIN')");
s.executeBatch();
try{//derby does not know "drop table if exists" but yields an
error if the table to drop not exists -- so we need a workaround ...
s.execute("drop table custs");
s.execute("drop table orders");
}catch(SQLException e) {}
s.addBatch("create table custs (id char(5) not null, name
char(40) not null, primary key(id))");
s.addBatch("create table orders (id char(8) not null, custid
char(5) not null, total integer, primary key(id, custid))");
s.executeBatch();
s.addBatch("insert into custs values('1', 'John Milton')");
s.addBatch("insert into custs values('2', 'Duns Scotus')");
s.executeBatch();
s.addBatch("insert into orders values('0001', '1', 12345)");
s.addBatch("insert into orders values('0002', '2', 145)");
s.executeBatch();
conn.close();
}catch(Exception e){
e.printStackTrace();
}
}
public static void readEmbedded(){
try{
Connection conn =
DriverManager.getConnection("jdbc:derby:/tmp/TestDB", prop);
ResultSet rs=conn.createStatement().executeQuery("select *
from custs, orders");
while(rs.next()) {
System.out.println("-: "+rs.getString(1)+" |
"+rs.getString(2)+" | "+rs.getString(3)+" | "+rs.getString(4)+" |
"+rs.getString(5));
}
conn.close();
}catch(Exception e){
e.printStackTrace();
}
}
--
Schon vor dem comeback von Modern Talking wusste ich:
Dieter Bohlen ist der Preis der Freiheit!
Heinz Rudolf Kunze