Sqlite usando línea de command

Sqlite es un poco frustrante. Cada vez que ejecuto un command, no puedo usar las flechas hacia arriba y hacia la izquierda para recuperar mis commands previamente tipados. ¿Hay alguna forma de habilitar esto?

Otra pregunta: tengo la siguiente tabla

CREATE TABLE resource ( resourceID INTEGER PRIMARY KEY AUTOINCREMENT, resourceType STRING, userID INTEGER DEFAULT -1 ); 

e inserto de la siguiente manera:

 insert into resource values(null, "razor"); 

pero no me permite hacerlo porque solo he insertado en 2 columnas y no he especificado nada para la columna de ID de usuario. Pero pensé que el objective de DEFAULT era establecer los valores por defecto en -1 si no se insertaba nada. ¿Me estoy perdiendo de algo?

Aquí hay dos respuestas para dos preguntas:

  1. Me parece que al usar el cliente de command-line sqlite3 mis teclas de flecha funcionan sin problemas.

  2. Usted tiene dos errores en su statement INSERT:

    • No debe proporcionar un valor para la columna AUTOINCREMENT.

    • Debe enumerar las columnas y el order en el que se asignan los valores. Esto es obligatorio cuando no tiene la misma cantidad de valores que las columnas, pero es una buena práctica incluso cuando lo hace, ya que los cambios posteriores en la estructura de la tabla pueden cambiar el order o el número de columnas.

    • Además, las comillas simples son más estándar en las bases de datos SQL. SQLite aceptará las comillas dobles, algunos otros progtwigs no lo harán.

      INSERT INTO Resource (ResourceType) VALUES ('razor')

Para que las teclas de flecha funcionen dentro del símbolo del sistema sqlite3, el binary sqlite3 debe estar vinculado a la biblioteca readline. Puedes verificar eso con:

 $ ldd $(which sqlite3) 

En mi caso, descubrí que el command sqlite3 en realidad estaba usando la versión sqlite3 en el SDK de Android instalado, ejecutando:

 $ which sqlite3 /opt/google/android-sdk/tools/sqlite3 

Esa versión no tiene el enlace de la biblioteca de lectura, mientras que la de / usr / bin / sqlite3 sí. Lo que hice fue mover sqlite3 en el SDK de Android fuera del path (todavía quiero poder acceder a mis otras herramientas en ese directory, pero entonces sería mejor hacer enlaces simbólicos desde / usr / local / bin o ~ / bin ), y ejecutar sqlite3 ahora usa el / usr / bin / sqlite3 uno con readline vinculado en el ejecutable, y las teclas de flecha arriba / abajo funcionarán allí.

Tuve el mismo problema en OS X.

Para arreglarlo, necesita comstackr el sqlite3 usted mismo. Los files binarys precomstackdos no pueden suponer que tienes soporte de lectura, así que lo dejaron.

Si descarga la fuente "autoconf" de http://www.sqlite.org/download.html (segundo enlace, actualmente en http://www.sqlite.org/sqlite-autoconf-3071300.tar.gz ):

luego puede comstackrlo a través del terminal (cd al directory al que el tarball extrae):

 $ ./configure $ make $ sudo make install 

y reconocerá automáticamente que OS X tiene compatibilidad con readline y curses y que su nuevo binary sqlite3 responderá como se espera a las flechas, eliminará la key, etc.

Una solución rápida es lanzar SQLite con el soporte ReadLine de la siguiente manera:

 rlwrap sqlite3 database.db 

Si rlwrap no está instalado, puedes hacerlo en Ubuntu usando el command:

 sudo apt-get install rlwrap 

Para otras versiones de Linux, verifique aquí .

rlwrap es un contenedor ReadLine, una pequeña utilidad que utiliza la biblioteca GNU readline para permitir la edición de la input del keyboard para cualquier otro command.

Primer problema: su instrucción de inserción contiene 2 campos pero su tabla tiene 3 campos, por lo que es ambigua. SQLite no puede determinar qué campos desea establecer. El segundo problema es: no establezca su resourceID en nulo si desea usar el autoincrement.

Prueba esto:

 insert into resource(resourceType) values ("razor"); 

Esto establecerá el ID de recurso en el siguiente valor de la autoincrementación y el ID de usuario en el valor pnetworkingeterminado.

Estoy usando Linux Mint y tuve el mismo problema sqlite3, pero lo resolví en parte con las respuestas aquí. Al principio estaba usando el sqlite3 que se encuentra en anaconda, que no tenía soporte de lectura.

Después de renombrar el file sqlite3 en anaconda, reinstalar usando el autoconf como se mencionó anteriormente aún no solucionó el problema. El command ldd no mostró un enlace a readline.so:

 $ ldd $(which sqlite3) linux-vdso.so.1 => (0x00007ffebb3a4000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f8aceb9e000) libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f8ace980000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f8ace5bb000) /lib64/ld-linux-x86-64.so.2 (0x00007f8aceda2000) 

Entonces,

 $ sudo dpkg -r sqlite3 

seguido por una reinstallation hizo el truco.