Вставка значений в таблицу SQLite на Android
Я новичок в разработке приложений для Android. Я попытался вставить значения в базу данных SQLite с помощью кода ниже:
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);
Показывает ошибку на эмуляторе - приложение CashBook неожиданно остановилось.
Создана база данных и таблица, но вставка значений не работает.
Пожалуйста, помогите мне решить эту проблему.
Спасибо.
Ответы
Ответ 1
okk это полностью рабочий код, отредактируйте его согласно вашему требованию
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();
}}}
Надеюсь, это полезно для вас.
не использовать TEXT для поля даты может быть проблема с корпусом, все еще возникающая проблема, дайте мне знать:) Pragna
Ответ 2
Кажется нечетным вставлять значение в автоматически увеличивающееся поле.
Также вы попробовали метод insert() вместо 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);
Ответ 3
Вы найдете такие отладочные ошибки, как это намного проще, если вы поймаете любые ошибки, вызванные вызовом execSQL. например:
try
{
db.execSQL(Create_CashBook);
}
catch (Exception e)
{
Log.e("ERROR", e.toString());
}
Ответ 4
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
);
}
}
то см. ссылку ссылка
Ответ 5
okkk у вас есть идентификатор INTEGER PRIMARY KEY AUTOINCREMENT и все еще значение r...
это проблема:)
более подробно
см. это
все еще возникают проблемы, а затем почтовый код и logcat
Ответ 6
Поскольку вы новичок в разработке Android, вы можете не знать о Content Providers, которые являются абстракциями базы данных. Возможно, они не подходят для вашего проекта, но вы должны проверить их: http://developer.android.com/guide/topics/providers/content-providers.html
Ответ 7
Я вижу, что это старый поток, но у меня была такая же ошибка.
Я нашел объяснение здесь:
http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html
void execSQL(String sql)
Выполните один оператор SQL, который НЕ является SELECT или каким-либо другим оператором SQL, который возвращает данные.
void execSQL(String sql, Object[] bindArgs)
Выполните один оператор SQL, который НЕ является SELECT/INSERT/UPDATE/DELETE.