The original connection, using the classpath subprotocol, was supposed to open the DATABASE (not the connection) as read-only, according to the Developer's Guide section titled "Database connection examples". However, I am able to write to this database in another connection which opens the database using the default, file-based protocol.
At a minimum, the documentation is wrong. But the documentation may be trying to impose a consistent, easily described model on the behavior of our subprotocols. It may be that the behavior of our subprotocols cannot be described by a simple set of rules that users can grasp easily.
To show this problem, I created a database and then moved it into a directory on my classpath (in this case, trunk/classes). Here is a script which shows this behavior:
connect 'jdbc:derby:classpath:derby10.6' as conn1;
– fails because a database which is opened on the classpath is supposed to be marked as read-only
insert into t( a ) values 1;
connect 'jdbc:derby:trunk/classes/derby10.6' as conn2;
– this succeeds even though the database is supposed to be read-only
– according to the Developer's Guide section "Database connection examples"
insert into t( a ) values 2;
select * from t;
delete from t;