Inserimento di valori nella tabella SQLite in Android

Sono nuovo nello sviluppo di app Android. Ho provato ad inserire valori nel database SQLite attraverso il codice sottostante;

public class cashbook extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); SQLiteDatabase db; db = openOrCreateDatabase( "cashbookdata.db" , SQLiteDatabase.CREATE_IF_NECESSARY , null ); final String Create_CashBook = "CREATE TABLE CashData (" + "id INTEGER PRIMARY KEY AUTOINCREMENT," + "Description TEXT," + "Amount REAL," + "Trans INTEGER," + "EntryDate TEXT);"; db.execSQL(Create_CashBook); final String Insert_Data="INSERT INTO CashData VALUES(2,'Electricity',500,1,'04/06/2011')"; db.execSQL(Insert_Data); 

Mostra errore sull’emulatore – L’applicazione CashBook si è arrestata in modo imprevisto.

Il database e la tabella creati, ma l’inserimento del valore non funziona. Per favore aiutami a risolvere questo problema. Grazie.

ok, questo codice è completamente funzionante, modificalo come richiesto

 public class TestProjectActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); SQLiteDatabase db; db = openOrCreateDatabase( "Temp.db" , SQLiteDatabase.CREATE_IF_NECESSARY , null ); try { final String CREATE_TABLE_CONTAIN = "CREATE TABLE IF NOT EXISTS tbl_Contain (" + "ID INTEGER primary key AUTOINCREMENT," + "DESCRIPTION TEXT," + "expirydate DATETIME," + "AMOUNT TEXT," + "TRNS TEXT," + "isdefault TEXT);"; db.execSQL(CREATE_TABLE_CONTAIN); Toast.makeText(TestProjectActivity.this, "table created ", Toast.LENGTH_LONG).show(); String sql = "INSERT or replace INTO tbl_Contain (DESCRIPTION, expirydate, AMOUNT, TRNS,isdefault) VALUES('this is','03/04/2005','5000','tran','y')" ; db.execSQL(sql); } catch (Exception e) { Toast.makeText(TestProjectActivity.this, "ERROR "+e.toString(), Toast.LENGTH_LONG).show(); }}} 

Spero che questo sia utile per te ..
non usare TEXT per il campo data potrebbe essere il problema con il boss che ha ancora problemi fammi sapere:) Pragna

Sembra strano inserire un valore in un campo a incremento automatico.

Inoltre, hai provato il metodo insert () invece di execSQL?

 ContentValues insertValues = new ContentValues(); insertValues.put("Description", "Electricity"); insertValues.put("Amount", 500); insertValues.put("Trans", 1); insertValues.put("EntryDate", "04/06/2011"); db.insert("CashData", null, insertValues); 

Gli errori di debugging sono molto più semplici se si rilevano errori generati dalla chiamata execSQL. per esempio:

  try { db.execSQL(Create_CashBook); } catch (Exception e) { Log.e("ERROR", e.toString()); } 
 public class TestingData extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); SQLiteDatabase db; db = openOrCreateDatabase( "TestingData.db" , SQLiteDatabase.CREATE_IF_NECESSARY , null ); } 

}

quindi vedi questo link link

okkk hai preso ID INTEGER PRIMARY KEY AUTOINCREMENT e ancora il tuo valore di passaggio … questo è il problema 🙂 per maggiori dettagli vedi questo problema con il codice postale e il logcat

Dato che sei nuovo nello sviluppo di Android, potresti non conoscere i Content Provider, che sono astrazioni di database. Potrebbe non essere la cosa giusta per il tuo progetto, ma dovresti controllarli: http://developer.android.com/guide/topics/providers/content-providers.html

Vedo che è un thread vecchio ma ho avuto lo stesso errore.

Ho trovato la spiegazione qui: http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html

void execSQL(String sql)
Esegui una singola istruzione SQL che NON è SELECT o qualsiasi altra istruzione SQL che restituisce dati.

void execSQL(String sql, Object[] bindArgs)
Esegui una singola istruzione SQL che NON è SELECT / INSERT / UPDATE / DELETE.

Consiglio di creare un metodo solo per l’inserimento e l’utilizzo di ContentValues. Per ulteriori informazioni https://www.tutorialspoint.com/android/android_sqlite_database.htm

 public boolean insertToTable(String DESCRIPTION, String AMOUNT, String TRNS){ SQLiteDatabase db = this.getWritableDatabase(); ContentValues contentValues = new ContentValues(); contentValues.put("this is",DESCRIPTION); contentValues.put("5000",AMOUNT); contentValues.put("TRAN",TRNS); db.insert("Your table name",null,contentValues); return true; }