Hola.
Pues si la idea es crear y administrar una base de datos local, podrías utilizar una base de datos embebida. La solución podría ser Apache Derby (http://db.apache.org/derby/ ), que es un DBM creado absolutamente en Java y que puede agregarse a tu programa como librería externa.
El siguiente es un ejercicio que hice hace varios años. Te dejo el código de la clase que manejaba la base de datos, para que tengas una idea de cómo se crea la base de datos, se realiza una conexión a ella, etc.
La clase está a nivel de estudiante, pero funciona... :)
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
import java.io.File;
/**
*
* @author Mauricio
*/
public class SparkyBD {
public String driver = "org.apache.derby.jdbc.EmbeddedDriver";
public String protocolo = "jdbc:derby:";
private Connection conexión;
private Statement elStatement;
private ResultSet resultados;
private Properties propiedades;
private Object[][] datos, dataBuffer;
private int contador;
private void cargarDriver() throws ClassNotFoundException, InstantiationException, IllegalAccessException {
Class.forName(driver).newInstance();
}
protected SparkyBD() {
conexión = null;
elStatement = null;
resultados = null;
propiedades = new Properties();
propiedades.put("user", "usuario");
propiedades.put("password", "administrador");
dataBuffer = new Object[200][5];
}
protected void crearBD() throws ClassNotFoundException, InstantiationException, IllegalAccessException, SQLException {
cargarDriver();
conexión = DriverManager.getConnection(protocolo + "SBD;create = true", propiedades);
elStatement = conexión.createStatement();
elStatement.execute(
"CREATE TABLE Clientes (" +
"Nombre VARCHAR(25)," +
"Apellido VARCHAR(25)," +
"Direccion VARCHAR(45)," +
"Horas VARCHAR(5)," +
"Fecha DATE," +
"PRIMARY KEY (Nombre,Apellido))");
}
protected void conectarBD() throws ClassNotFoundException, InstantiationException, IllegalAccessException, SQLException {
cargarDriver();
conexión = DriverManager.getConnection(protocolo + "SBD", propiedades);
conexión.setAutoCommit(false);
elStatement = conexión.createStatement(
ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
}
protected Object[][] getDatosBD() {
return datos;
}
protected int getRowCount() {
return contador;
}
protected void cerrarCesión() throws SQLException {
cerrarResultset();
cerrarStatement();
cerrarconexión();
}
protected void cerrarResultset() throws SQLException {
if (resultados != null) {
resultados.close();
resultados = null;
}
}
protected void cerrarconexión() throws SQLException {
if (conexión != null) {
conexión.commit();
conexión.close();
conexión = null;
}
}
protected void cerrarStatement() throws SQLException {
if (elStatement != null) {
elStatement.close();
elStatement = null;
}
}
protected boolean estáBDCerrada() throws SQLException {
return conexión.isClosed();
}
protected void ingresarConsulta(String q) throws SQLException {
datos = dataBuffer;
resultados = elStatement.executeQuery(q);
contador = 0;
while (resultados.next()) {
int j;
for (j = 0; j <= 3; j++) {
datos[contador][j] = resultados.getString(j + 1);
}
datos[contador][4] = resultados.getDate(5);
++contador;
}
}
protected void ponerQueryIngreso(String q) throws SQLException {
elStatement.execute(q);
}
protected boolean hayRegistros() throws SQLException {
boolean r = false;
r = resultados.first();
return r;
}
public static boolean existeBD() {
return new File(System.getProperty("user.dir") + File.separator + "SBD").exists();
}
protected int actualizarBD(String q) throws SQLException {
int estado = elStatement.executeUpdate(q);
return estado;
}
protected void confirmarCambiosBD() throws SQLException {
conexión.commit();
}
protected void deshacerCambiosBD() throws SQLException {
conexión.rollback();
}
}