Error de base de datos SQLite de SQL cuando intenta insertar en la tabla

En mi proyecto, agregue una función para insertar elementos en la base de datos en una clase public class DBHelper extends SQLiteOpenHelper . La función se da a continuación.

 public void insertIntoDatabase(String field_one,String field_two){ String sql = "INSERT INTO UserTable.NAME (COL_USERNAME, COL_PASSWORD) " + "VALUES (" + field_one + ", " + field_two + ")"; db.execSQL(sql); 

En la actividad principal lea el nombre y la contraseña y llame a la función insert en la base de datos

 DBHelper dbhelper; dbhelper.insertIntoDatabase(rdname.getText().toString(), rdpwrd.getText().toString()); 

Pero hubo un error.

Recomiendo bastante que utilice el método API de SQLiteDatabase db.insert() que está directamente designado para insertar nuevas filas a la tabla. Esta solución es más limpia.

 public void insertIntoDatabase(String field_one, String field_two){ ContentValues data = new ContentValues(); data.put("COL_USERNAME", field_one); data.put("COL_PASSWORD", field_two); if (db == null) { // make sure that your db is properly initialised } db.insert("tablename", "nullColumnHack", data); } 

Explicación de nullColumnHack:

Si los valores proporcionados están vacíos, no se conocen nombres de columnas y no se puede insertar una fila vacía. Si no se establece en null, el parámetro nullColumnHack proporciona el nombre del nombre de columna anulable para insertar explícitamente un NULL en el caso en que sus valores estén vacíos.

Esto significa que en Android SQLite tiene que especificar una columna que se asignará NULL a en el caso de que pase vacío ContentValues.

Si desea utilizar su enfoque le recomiendo un uso de marcadores de posición.

 String sql = "INSERT INTO UserTable.NAME (COL_USERNAME, COL_PASSWORD) " + "VALUES (?, ?)"; db.execSQL(sql, new String[] {field_one, field_two}); 

Nota: Probablemente no funcionó porque no utilizó comillas simples .

 VALUES ("' + field_one + '", "' + field_two + '")" 

Y también asegúrese de que el nombre de tabla dado es correcto. Recomiendo crear variables estáticas que contengan nombre tablename y nombres de columna.

 public static final String TABLE_NAME = "Table"; String query = "insert into " + ClassName.TABLE_NAME + " values(?, ?)" 

Su cadena de SQL no separa sus variables estáticas del resto de su sentencia de SQL. Esto debería arreglarlo:

 String sql = "INSERT INTO " + UserTable.NAME + "(" + COL_USERNAME + "," + COL_PASSWORD ") VALUES (" + ... 

Sólo asegúrese de que UserTable.NAME es el nombre de la tabla y que tiene campos con el mismo nombre que los valores de COL_USERNAME y COL_PASSWORD.

 String sql = "INSERT INTO UserTable.NAME (COL_USERNAME, COL_PASSWORD) " + "VALUES ("+'" + field_one + "', '" + field_two + "'+")"; 

Los valores de la columna deben estar en '' cadena de comillas simples.

  • ¿Cómo puedo hacer un contexto de base de datos SQLite nulo en OnDestroy () en Android?
  • Varios Table SQLite DB Adapter (s) en Android?
  • Android ContentProvider llama ráfagas de setNotificationUri () a CursorAdapter cuando se insertan muchas filas con una operación por lotes
  • Cómo eliminar todos los elementos de SQLite en Android
  • Cómo implementar herencia de tabla en GreenDao
  • SQLiteStatement por qué ningún método para la instrucción SELECT - cualquier solución y por qué no hilo seguro
  • Cómo buscar una fila usando id sqlite?
  • Android - Almacenamiento de datos confidenciales en la base de datos sqlite
  • Aplicación de Android con base de datos constantemente "inicio / espera de un bloqueo gc alloc"
  • Android SQLite ORDER BY no funciona
  • ¿Cómo almacena una colección de cadenas en SQLite en Android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.