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)
Bài liên quan
Bạn xem kỹ chỗ tạo table nhé, thiếu thiếu 1 cái gì đó
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
KEY_ID + " Integer primary key,
Bỏ cái dòng insert id vào content values đi
khai báo kiểu String,
tạo bảng là interger
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”