Sqlite no es un gestor de bases de datos como MySql, Oracle o PostgreSql sino que, es una librería que permite tener una base de datos transaccional en un archivo sin necesidad de un servidor o configuración alguna lo cual puede llegar a ser muy útil para cierto tipo de proyectos que no requieran un servidor dedicado de base de datos.
Para poder utilizar este tipo de bases de datos como nuestra capa de persistencia en java todo lo que necesitamos es la librería (jar) o “driver” que puede ser descargado desde aquí.
Una vez descargada la librería de sqlite para java, podemos agregarlo a nuestro buildpath si es que estamos usando una IDE como eclipse o netbeans o agregarlo al classpath al momento de compilar la aplicación.
Para realizar la conexión únicamente necesitamos agregar las siguientes lineas:
Class.forName("org.sqlite.JDBC");
Connection conn = DriverManager.getConnection("jdbc:sqlite:sqliteFile");
- La primera linea se encarga de cargar la clase de la librería sqlite.
- La segunda linea crea una conexión a la base de datos auto contenida (archivo).
- “sqliteFile” es la ruta completa del archivo (ej. /opt/base1.sqlite) que contiene o contendrá la base de datos, si el archivo no existe sera creado eh inicializado y si ya existe sera usado.
Una vez creada la conexión podemos usarla para acceder a la base de datos.
PreparedStatement ps = null;
ps = conn.prepareStatement("insert into tabla1 values (?);");
ps.setInt(1,10);
ps.execute();
ps.close();
Hay que tomar en cuenta que por el carácter de este tipo de bases de datos no se puede escribir cuando se tiene un flujo de lectura abierto o leer cuando se tiene un flujo de escritura abierto, es decir, al realizar una transacción en la base de datos esta se bloquea hasta que la transacción se cierra por lo que es muy importante cerrar dicha transacción tan pronto como sea posible.
Se recomienda hacer uso de los prepared statements y de los batch y realizar todas las transacciones de una sola vez.
PreparedStatement ps = null;
ps = conn.prepareStatement("insert into tabla1 values (?);");
for(int i=0; i < 20 ; i++){
ps.setInt(1,i);
ps.addBatch();
}
conn.setAutoCommit(false);
ps.executeBatch();
conn.commit()
ps.close();
Tambien hay que recordar cerrar los ResultSet en cuanto se terminen de usar.
PreparedStatement ps = conn.prepareStatement("SELECT * FROM tabla1");
ResultSet rs = ps.executeQuery();
while(rs.next()){
System.out.println(rs.getString(1));
}
rs.close();
Para finalizar dejare el codigo de un ejemplo completo:
/** @author cool2k
* fecha 05/JUN/2009
*
* Ejemplo para crear una base de datos con la libreria sqlite y crear algunas entradas.
*
*/
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class sqlite {
private sqlite(){}
/**
*
* @param args
* @throws ClassNotFoundException
* @throws SQLException
*/
public static void main(String[] args)
throws ClassNotFoundException, SQLException{
Class.forName("org.sqlite.JDBC");
Connection conn = DriverManager.getConnection("jdbc:sqlite:/tmp/db1.sqlite");
PreparedStatement ps = null;
conn.prepareStatement("create table tabla1(id,nombre,apellido,telefono)").execute();
conn.prepareStatement("create table tabla2(id,usuario,password,email)").execute();
conn.setAutoCommit(false);
ps = conn.prepareStatement("insert into tabla1 values(?,?,?,?)");
ps.setInt(1, 1);
ps.setString(2, "Juan");
ps.setString(3, "Perez");
ps.setString(4, "55123456");
ps.addBatch();
ps.setInt(1, 2);
ps.setString(2, "José");
ps.setString(3, "Peres");
ps.setString(4, "55345612");
ps.addBatch();
ps.setInt(1, 3);
ps.setString(2, "Ana");
ps.setString(3, "Perez");
ps.setString(4, "55561234");
ps.addBatch();
ps.executeBatch();
conn.commit();
ps.close();
ps = conn.prepareStatement("insert into tabla2 values(?,?,?,?)");
ps.setInt(1, 1);
ps.setString(2, "jperez");
ps.setString(3, "mypass");
ps.setString(4, "j.perez@correo.com");
ps.addBatch();
ps.setInt(1, 2);
ps.setString(2, "joperes");
ps.setString(3, "mypass2");
ps.setString(4, "jose.peres@correo.com");
ps.addBatch();
ps.setInt(1, 3);
ps.setString(2, "aperez");
ps.setString(3, "mypass3");
ps.setString(4, "ana@correo.com");
ps.addBatch();
ps.executeBatch();
conn.commit();
ps.close();
conn.close();
}
}
Espero que esta entrada les sea de ayuda.
Saludos !!
Junio 18, 2009 a las 2:06 pm |
Gracias =) aclaro mis dudas la explicación
Saludos….
Junio 18, 2009 a las 8:11 pm |
Que bien, no hay de que, se contribulle en lo que se puede
. Saludos !
Julio 28, 2009 a las 2:06 pm |
Saludos, buscando fragmentos de código para optimizar el acceso a la base. Me sirve mucho tu exlicación
Gracias.
Julio 28, 2009 a las 10:14 pm |
No hay de que amigo, me alegro de haber podido ayudar.
Noviembre 20, 2009 a las 11:33 am |
Hola, hoy me dió por probar SQLite y me gustó mucho su sencillez y portabilidad, sin embargo, tengo una consulta…
Connection conn = DriverManager.getConnection(“jdbc:sqlite:sqliteFile”)
Estoy trabajando con NetBeans, supongamos que mi base de datos es “prueba.db” y la tengo ubicada en el directorio src de mi proyecto, es decir, el directorio en donde tengo mis packages y clases.java, como podría especificar la ruta de la bd?
había probado con jdbc:sqlite:prueba.db pero al parecer no está conectando.
Agradecería mucho tu respuesta
Noviembre 21, 2009 a las 12:38 am |
Que tal Mendi.
Lo que necesitas es obtener el directorio en donde se esta ejecutando tu programa, probablemente lo puedas conseguir con:
System.out.println ( new File (“.”).getCanonicalPath() );
Esta linea debería darte la ruta completa del directorio que necesitas o al menos algo muy cercano.
Espero que te sea de ayuda.
Saludos !!