Je suis nouveau dans le développement d'applications Android. J'ai essayé d'insérer des valeurs dans la base de données SQLite via le code ci-dessous;
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);
Il montre une erreur sur l'émulateur - L'application CashBook s'est arrêtée de manière inattendue.
La base de données et la table ont été créées, mais l'insertion de valeur ne fonctionne pas . S'il vous plaît, aidez-moi à résoudre ce problème . Merci.
okk ce code est totalement fonctionnel, éditez-le selon vos besoins
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();
}}}
J'espère que cela vous sera utile ..
Ne pas utiliser TEXT pour le champ de date peut-être que le problème de casing a toujours un problème, laissez-moi savoir
Cela semble étrange d'insérer une valeur dans un champ à incrémentation automatique.
Aussi, avez-vous essayé la méthode insert () au lieu de 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);
Vous constaterez que les erreurs de débogage de ce type sont beaucoup plus faciles si vous interceptez les erreurs générées par l'appel execSQL. par exemple:
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
);
}
}
puis voir ce lien link
Puisque vous êtes nouveau dans le développement Android, vous ne connaissez peut-être pas les fournisseurs de contenu, qui sont des abstractions de base de données. Ils peuvent ne pas convenir à votre projet, mais vous devriez les vérifier: http://developer.Android.com/guide/topics/providers/content-providers.html
Je recommande de créer une méthode juste pour insérer et utiliser ContentValues . Pour plus d'informations 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;
}
okkk vous devez prendre id INTEGER PRIMARY KEY AUTOINCREMENT et toujours votre valeur de passage .... c'est le problème:) pour plus de détails voir ceci code postal et logcat