30/09/2018, 18:04

Lỗi thêm dữ liệu thất bại vào bảng trong SQLite

Mình đang tìm hiểu về SQLite trên android và có viết đoạn code theo đúng hướng dẫn trên mạng, nhưng khi thêm dữ liệu thì nói là thất bại, Xin mọi người giúp đỡ

- MainActivity:

public class MainActivity extends ActionBarActivity {
	private EditText et1, et2, et3;
	private Button bt1;
	SQLiteDatabase db;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		db = new SQLiteDatabase(this);
		et1 = (EditText) findViewById(R.id.editText1);
		et2 = (EditText) findViewById(R.id.editText2);
		et3 = (EditText) findViewById(R.id.editText3);
		bt1 = (Button) findViewById(R.id.button1);
		bt1.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				LienHe lh = new LienHe();
				lh.setId(Integer.parseInt(et1.getText().toString()));
				lh.setTen(et2.getText().toString());
				lh.setSdt(et3.getText().toString());
				db.ThemLienHe(lh);
			}
		});
	}
}

- SQLiteDatabase

public class SQLiteDatabase extends SQLiteOpenHelper {
	public final static String DATABASE_NAME = "ThongTin";
	public final static int DATABASE_VERSION = 1;

	public final static String TABLE_NAME = "SinhVien";
	public final static String KEY_ID = "id";
	public final static String KEY_NAME = "hoTen";
	public final static String KEY_PHONE = "sdt";
	Context context;

	public SQLiteDatabase(Context context) {
		super(context, DATABASE_NAME, null, DATABASE_VERSION);
		this.context = context;
	}

	public void ThemLienHe(LienHe lh) {
		android.database.sqlite.SQLiteDatabase db = this.getWritableDatabase();
		ContentValues values = new ContentValues();
		values.put(KEY_ID, lh.getId());
		values.put(KEY_NAME, lh.getTen());
		values.put(KEY_PHONE, lh.getSdt());
		String msg = "";
		if (db.insert(TABLE_NAME, null, values) == -1) {
			msg = "Lưu thất bại";
			Toast.makeText(context, msg, Toast.LENGTH_SHORT).show();
		} else {
			msg = "Lưu thành công";
			Toast.makeText(context, msg, Toast.LENGTH_SHORT).show();
		}
	}

	@Override
	public void onCreate(android.database.sqlite.SQLiteDatabase db) {
		String sql = "create table " + TABLE_NAME + " ( " + KEY_ID + " Integer primary key, " + KEY_NAME + " TEXT, "
				+ KEY_PHONE + " TEXT" + ")";
		db.execSQL(sql);
	}

	@Override
	public void onUpgrade(android.database.sqlite.SQLiteDatabase db, int oldVersion, int newVersion) {
		db.execSQL("drop table if exits " + TABLE_NAME);
		onCreate(db);

	}

}

- Logcat:

09-05 23:07:14.024: E/SQLiteLog(1344): (1) table SinhVien has no column named id
09-05 23:07:14.024: E/SQLiteDatabase(1344): Error inserting id=1 hoTen=lequanghung sdt=01652419113
09-05 23:07:14.024: E/SQLiteDatabase(1344): android.database.sqlite.SQLiteException: table SinhVien has no column named id (code 1): , while compiling: INSERT INTO SinhVien(id,hoTen,sdt) VALUES (?,?,?)
09-05 23:07:14.024: E/SQLiteDatabase(1344): 	at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
09-05 23:07:14.024: E/SQLiteDatabase(1344): 	at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889)
09-05 23:07:14.024: E/SQLiteDatabase(1344): 	at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500)
09-05 23:07:14.024: E/SQLiteDatabase(1344): 	at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
09-05 23:07:14.024: E/SQLiteDatabase(1344): 	at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
09-05 23:07:14.024: E/SQLiteDatabase(1344): 	at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
09-05 23:07:14.024: E/SQLiteDatabase(1344): 	at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1467)
09-05 23:07:14.024: E/SQLiteDatabase(1344): 	at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1339)
09-05 23:07:14.024: E/SQLiteDatabase(1344): 	at com.example.study.SQLiteDatabase.ThemLienHe(SQLiteDatabase.java:31)
09-05 23:07:14.024: E/SQLiteDatabase(1344): 	at com.example.study.MainActivity$1.onClick(MainActivity.java:42)
09-05 23:07:14.024: E/SQLiteDatabase(1344): 	at android.view.View.performClick(View.java:4438)
09-05 23:07:14.024: E/SQLiteDatabase(1344): 	at android.view.View$PerformClick.run(View.java:18422)
09-05 23:07:14.024: E/SQLiteDatabase(1344): 	at android.os.Handler.handleCallback(Handler.java:733)
09-05 23:07:14.024: E/SQLiteDatabase(1344): 	at android.os.Handler.dispatchMessage(Handler.java:95)
09-05 23:07:14.024: E/SQLiteDatabase(1344): 	at android.os.Looper.loop(Looper.java:136)
09-05 23:07:14.024: E/SQLiteDatabase(1344): 	at android.app.ActivityThread.main(ActivityThread.java:5001)
09-05 23:07:14.024: E/SQLiteDatabase(1344): 	at java.lang.reflect.Method.invokeNative(Native Method)
09-05 23:07:14.024: E/SQLiteDatabase(1344): 	at java.lang.reflect.Method.invoke(Method.java:515)
09-05 23:07:14.024: E/SQLiteDatabase(1344): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
09-05 23:07:14.024: E/SQLiteDatabase(1344): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
09-05 23:07:14.024: E/SQLiteDatabase(1344): 	at dalvik.system.NativeStart.main(Native Method)
X viết 20:06 ngày 30/09/2018

Bạn xem kỹ chỗ tạo table nhé, thiếu thiếu 1 cái gì đó

Hỉnh Lê viết 20:11 ngày 30/09/2018

Thiếu là thiếu làm sao bạn?

Hỉnh Lê viết 20:11 ngày 30/09/2018

Chỉ mình cách fix dc ko?

X viết 20:05 ngày 30/09/2018

Câu lệnh tạo table thiếu dấu ;

Hỉnh Lê viết 20:05 ngày 30/09/2018

Câu lệnh tạo table thiếu dấu ;

Mình thêm vào sau dấu “)” rồi vẫn không được, bạn có biết fix lỗi table SinhVien has no column name id không vậy?

Hỉnh Lê viết 20:09 ngày 30/09/2018

Có ai biết cách fix ko, chỉ mình với

Thanh Thịnh Đới viết 20:14 ngày 30/09/2018

KEY_ID + " Integer primary key,

KEY_ID + " Integer primary key,
Bỏ cái dòng insert id vào content values đi

tungtk viết 20:18 ngày 30/09/2018

khai báo kiểu String,

public final static String KEY_ID = "id";

tạo bảng là interger

 String sql = "create table " + TABLE_NAME + " ( " + KEY_ID + " Integer primary key, " + KEY_NAME + " TEXT, " + KEY_PHONE + " TEXT" + ")";
vũ xuân quân viết 20:11 ngày 30/09/2018

bạn nên học thêm sql rồi mới làm tiếp cái này.
mình nghĩ bạn chưa có kiến thức về sql.
link tham khảo để học
http://www.w3schools.com/sql/default.asp

linhpt viết 20:08 ngày 30/09/2018

chỗ DATABASE_NAME phải có .db nữa, KEY_ID = “_id”

Bài liên quan
0