مشکل INSERT کردن در SQLite (اندروید استودیو 3.0.1)

سلام

مشکل هنگام استفاده از دستور ()db2.insert به وجود میاد.

 SQLiteDatabase db2 = this.getWritableDatabase();
 ContentValues value = new ContentValues();
 value.put("fName","Sina");
 value.put("lName","Ahmadi");
 db2.insert("tb-test",null,value);

خطای زمان اجرا

Error inserting fName=Sina lName=Ahmadi
android.database.sqlite.SQLiteException: near "-": syntax error (code 1): , while compiling: INSERT INTO tb-test(fName,lName) VALUES (?,?)

ظاهرا خطا از خالی بودن fNameوlName خبر میده.

نکته: چنین مشکلی هنگام استفاده از دستور ()execSQL پیش نمیاد.

پاسخ ها

sokanacademy forum
کاربر سکان آکادمی 5 سال پیش

سلام

برای این که بخوای تو دیتابیس درج کنی باید دیتابیس open باشه و پس از درج هم باید close بشه:

public class SqliteInsertClass {
	SQLiteOpenHelper dbHelper;
	SQLiteDatabase database;
	
	public SqliteInsertClass(Context context) {
		dbHelper = new DatabaseAdapter(context);
	}
	
	public void insertRecord(Alarm alarm){ 
		open();
		
		ContentValues values = new ContentValues();
		value.put("fName","Sina");
		value.put("lName","Ahmadi");
		database.insert("tb-test",null,value);
		
		close();
	}
	
	public void open() {
		database = dbHelper.getWritableDatabase();
		Log.i(LOG_TAG, "Database Opened");
	}
	
	public void close() {
		Log.i(LOG_TAG, "Database Closed");
		dbHelper.close();
	}
}

من این کار رو انجام دادم درست شد و جواب هم گرفتم

پیشنهاد من اینه که برای کار با دیتابیس ها توی اندروید از ROOM استفاده کنید - یه ORM بسیار قدرتمند هست

ان شا الله بشه

sokanacademy forum
کاربر سکان آکادمی 5 سال پیش

ممنون از زمانی که گذاشتید اما DatabaseAdapter خطا میگیره و بعدش هم از dbHelper خطای Null Object میده.

شاید مشکل از نسخه اندروید استودیو باشه، مطمعا نیستم دقیقا مشکل چیه، وقتی دستی Query افزودن رو می‌نویسی بدون مشکل اجرا می‌کنه.

sokanacademy forum
کاربر سکان آکادمی 5 سال پیش

شما باید کلاس DatabaseAdapter خودت رو داشته باشی

این جا رو بخونی مشکلت حل میشه

https://stackoverflow.com/questions/15384550/android-sqlite-contentvalues-not-inserting

ارتباطی هم به نسخه اندروید استدیو نداره

sokanacademy forum
کاربر سکان آکادمی 4 سال پیش

شما باید ابتدا اف نیم و ال نیم رو با فاینال استاتیک کردن هاردکد کنید مثله زیر:

Private static final FIRST_NAME="fname"

sokanacademy forum
کاربر سکان آکادمی 4 سال پیش

ممنونم از پاسختون.

online-support-icon