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)

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

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

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

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?

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

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

khai báo kiểu String,

public final static String KEY_ID = "id";

tạo bảng là interger :smiley:

 String sql = "create table " + TABLE_NAME + " ( " + KEY_ID + " Integer primary key, " + KEY_NAME + " TEXT, " + KEY_PHONE + " TEXT" + ")";

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

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

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?