2010-04-05 20 views
9

Estamos usando sqlite056.jar en nuestro código. Al insertar en la base de datos en lote, recibimos una excepción en línea cuando nos comprometemos.java.sql.SQLException: base de datos bloqueada

líneas de código

<object of Connection>.commit(); 
<object of Connection>.setAutoCommit(true); 

excepción

java.sql.SQLException: database locked 

Respuesta

2

Parece que más de un proceso está tratando de modificar la base de datos. Puede tener solo una conexión abierta en cualquier momento. Más antecedentes sobre el problema pueden ayudarnos a brindarle una respuesta más concreta.

+0

podemos trabajar con varias tablas de la base de datos en el mismo tiempo con el mismo objeto de conexión de la base de datos Supongamos que tengo insertada valor en la tabla 1, y al mismo tiempo valor también se inserta en el cuadro 2 de la base de datos con un mismo objeto de datos conexión de base. – rajkumari

+0

o se produjo una excepción bloqueada en la base de datos debido a obj Connection.commit() línea – rajkumari

7

La lectura de una base de datos SQLite establece el estado de bloqueo en Compartido. Múltiples lectores pueden estar activos al mismo tiempo.

Escribir en una base de datos SQLite establece el estado de bloqueo en Exclusivo. Ningún otro proceso puede estar activo en ese momento.

puede encontrar una explicación detallada sobre http://www.sqlite.org/lockingv3.html

+0

Tuve el mismo error al ejecutar un applet (que accedió a un sqlite db) con appletviewer. Pero solo cuando se ejecuta bajo un jvm de 64 bits. Cambiar a un jvm de 32 bits funcionó bien (Windows). Probablemente el controlador de 64 bits no se compiló en el contenedor. – dgorissen

9

conexión necesita ser cerrado después de cada consulta. Si alguna de las conexiones aún persiste. Tenía el mismo error en las aplicaciones de escritorio de Java, ahora resuelto.

0

En mi caso, olvidé agregar la cláusula WHERE en mi consulta de ACTUALIZACIÓN, y eso da como resultado el error "base de datos bloqueado".

Mire cuidadosamente sus consultas.

Editar: Se me olvidó indicar que he utilizado un tipo de actualización consulta de donde voy a cambiar varios atributos:

ACTUALIZACIÓN Los usuarios establecen peso = 160, desiredWeight = 145 donde id = 1;

+1

** Una pregunta muy antigua ** - pero gracias por intentar responderla. En este caso específico, no tenía idea de cómo era la declaración 'SQL' en cuestión, y sugirió que la consulta era' UPDATE' con un 'WHERE' que faltaba como adivinación. Lo que hubiera sido más apropiado en este caso fue preguntar (en un comentario) qué aspecto tenía la consulta 'SQL', dando a entender que la causa podría ser algo similar a una cláusula' WHERE' faltante. – ishmaelMakitla

+0

He agregado editar a mi publicación. Creo que no importa cuánto tiempo la pregunta es, la gente busca este problema, como yo. ¡Saludos! –

+0

Buen punto. Con respecto a la declaración SQL, quise decir que la pregunta en sí misma no incluía la declaración SQL, por lo que no habría sabido (sin preguntar) cómo se veía. Pero es un buen punto para responder viejas preguntas: buen punto. – ishmaelMakitla

Cuestiones relacionadas