Here are some quick code snippets to help you get started with embedded Apache Derby.
1. If you use Maven, add the Derby dependency.
<dependency> <groupId>org.apache.derby</groupId> <artifactId>derby</artifactId> <version>10.8.1.2</version> </dependency>
2. Connecting to Derby works the same way as other databases. You need the JDBC driver and the database connection URL. Notice create=true in the database URL, which tells Derby to create the database if it does not exist.
private final static String DB_DRIVER = "org.apache.derby.jdbc.EmbeddedDriver"; private final static String DB_NAME = "sampleDb"; private final static String DB_URL = String.format("jdbc:derby:%s;create=true", DB_NAME);
3. Calling Class.forName(DB_URL).newInstance(); will start Derby. To shutdown Derby, run the following function.
private static void shutdownDerby() { try { DriverManager.getConnection("jdbc:derby:;shutdown=true"); } catch (SQLException e) { if (((e.getErrorCode() == 50000) && ("XJ015".equals(e.getSQLState())))) { // normal shutdown } else { LOGGER.log(Level.WARNING, e.getMessage(), e); } } }
According to the Apache Derby documentation:
A clean shutdown performs a checkpoint and releases resources. If an embedded application doesn’t shut down Derby, a checkpoint won’t be performed. Nothing bad will happen; it just means that the next connection will be slower because Derby will run its recovery code.
4. To check if a Derby table exists, use DatabaseMetaData.
public static boolean tableExists(Connection conn, String tableName) { boolean tableExists = false; ResultSet rs = null; try { DatabaseMetaData meta = conn.getMetaData(); rs = meta.getTables(null, null, null, new String[] { "TABLE" }); while (rs.next()) { String currentTableName = rs.getString("TABLE_NAME"); if (currentTableName.equalsIgnoreCase(tableName)) { tableExists = true; } } } catch (SQLException e) { LOGGER.log(Level.SEVERE, e.getMessage(), e); } finally { DbUtils.closeQuietly(rs); // Apache Commons DbUtils } return tableExists; }