Android sqlite CREATE TABLE SI NO EXISTE
Tener un pequeño problema con la creación de nuevas tablas. Cuando uso el comando CREATE TABLE mis nuevas tablas se forman como deberían, pero cuando salgo de la actividad la aplicación se bloquea y obtengo una TABLE YA EXISTE en el logcat. Si utilizo CREATE TABLE SI NO EXISTE la nueva tabla no se forma, sino que simplemente añade mis nuevas filas de datos a una tabla anterior y no se bloquea. ¿Qué tiene de malo esto? Me gustaría añadir la tabla sin que me da la ya existe y me gustaría añadir sin añadir filas a una tabla diferente.
SqliteHelper Clase:
- Incremento automático de SQLite de Android
- Consulta SQL de Android con dos cláusulas "Where"
- RawQuery Vs. Database.query
- Android sqlLite ON CONFLICT IGNORE se ignora en ICS
- Se ha eliminado una columna no válida al intentar consultar una columna.
public class MySQLiteHelper extends SQLiteOpenHelper { public static final String TABLE_NAME = MainActivity.NameName; public static final String COLUMN_ID = "_id"; public static final String COLUMN_COMMENT = "comment"; public static final String COLUMN_LAT = "lat"; public static final String COLUMN_LONG = "long"; public static final String COLUMN_RADI = "radi"; private static final String DATABASE_NAME = "spraylogs.db"; private static final int DATABASE_VERSION = 1; public static final String NEWTABLE = "CREATE TABLE " + TABLE_COMMENTS + "(" + COLUMN_ID + " integer primary key autoincrement, " + COLUMN_COMMENT + " text not null," + COLUMN_LAT+ "," + COLUMN_LONG + "," + COLUMN_RADI + ");"; public static final String SaveIt = "CREATE TABLE IF NOT EXISTS " + TABLE_COMMENTS + "(" + COLUMN_ID + " integer primary key autoincrement, " + COLUMN_COMMENT + " text not null," + COLUMN_LAT+ "," + COLUMN_LONG + "," + COLUMN_RADI + ");"; MySQLiteHelper(Context context) { super(context, context.getExternalFilesDir(null).getAbsolutePath() + "/" + DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase database) { } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { Log.w(MySQLiteHelper.class.getName(), "Upgrading database from version " + oldVersion + " to " + newVersion + ", which will destroy all old data"); db.execSQL("DROP TABLE IF EXISTS " + NEWTABLE); onCreate(db); } }
- No puedo crear una base de datos SQLite en mi aplicación android
- Carga pesada en el hilo que causa problemas de memoria
- Android: utilice la base de datos SQLite en la tarjeta SD (no utilizando el almacén de datos Android interno)
- Determinar el tipo de datos de una columna en SQLite
- ¿Por qué mi Android SQLite DB ha corrompido de repente?
- Obtener actualizaciones de contar las filas de SQLite en Android mediante una consulta en bruto?
- Sqlite android extraer contactos con número de teléfono
- ListView no se actualiza al agregar a SQLiteDatabase
Así es como se supone que funciona. CREATE TABLE
lanzará una excepción si la tabla ya existe. CREATE TABLE IF NOT EXISTS
creará la tabla si no existe, o ignorará el comando si lo hace. Si desea eliminar la tabla antigua, utilice DELETE TABLE IF EXISTS
antes de CREATE TABLE
. Si desea cambiar el esquema, utilice ALTER TABLE
, no CREATE TABLE
.
Lo uso así:
internal static int checkTable() { DataTable dTable = new DataTable(); try { dbConn = new SQLiteConnection("Data Source=" + dbFileName + ";Version=3;"); dbConn.Open(); sqlCmd.Connection = dbConn; String makeTable = "CREATE TABLE IF NOT EXISTS responde( id INTEGER PRIMARY KEY AUTOINCREMENT, sid TEXT, ans TEXT, answe TEXT, questid TEXT, timestamp TEXT)"; sqlCmd.CommandText = makeTable; sqlCmd.ExecuteNonQuery(); return 1; } catch (SQLiteException) { Console.WriteLine("Error DB 100"); return 0; } catch (IndexOutOfRangeException) { Console.WriteLine("Error DB 101"); return 0; } catch (TypeInitializationException) { Console.WriteLine("Error DB 102"); return 0; } }
- Cómo acceder a un elemento específico de cada elemento de vista de cuadrícula
- Botón predeterminado emoji en el teclado de Google con android 4.4