为什么它不创建表并添加数据?

时间:2018-10-30 13:14:31

标签: android database sqlite

DatabaseHelper.java:

import android.content.ContentValues;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class DatabaseHelper extends SQLiteOpenHelper {

    private static final String TAG = "DatabaseHelper";
    public static final String DATABASE_NAME = "daysDATABASE.db";
    public static final String TABLE_NAME = "daysDATABASE";
    private static final String COL1 = "datez";
    private static final String COL2 = "json";

    public DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, 1);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE TABLE " + TABLE_NAME + " (id INTEGER PRIMARY KEY, datez TEXT, json TEXT)");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
        onCreate(db);
    }

    public boolean addData(String date, String json) {
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues contentValues = new ContentValues();
        contentValues.put("datez", date);
        contentValues.put("json", json);
        db.insert(TABLE_NAME, null, contentValues);
        return true;
    }

MainActivity.java:

public class MainActivity extends AppCompatActivity {
DatabaseHelper mydb;

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_diary);

        mydb = new DatabaseHelper(this);
        mydb.addData("02164987", "adsdsadsadsadsadsadsa");
    }

如果我打开数据库,则其中没有表,也没有数据..因为未创建表。

............................................... ................................................... ................................................... .......

我会讲更多的信息,但我认为您不需要比这2个Java类更多的信息。我复制了粘贴内容,并从tutorialspoint教程中更改了一些内容,但是由于某种原因,它似乎不起作用。

2 个答案:

答案 0 :(得分:3)

即使创建了表,也无法使用addData()方法向其中添加数据,因为您没有为id列提供值。
CREATE语句将列id创建为PRIMARY KEY而不是AUTOINCREMENT,因此您必须提供其值。但是我不认为这就是您想要的。
因此,将CREATE语句更改为此:

db.execSQL("CREATE TABLE " + TABLE_NAME + " (id INTEGER PRIMARY KEY AUTOINCREMENT, datez TEXT, json TEXT)");

然后从仿真器/设备上卸载应用程序,以便删除数据库并再次运行。
这样,将执行onCreate()方法并创建表。
Edit1 :完成操作后,请记住关闭数据库对象:

mydb.close()

Edit2 insert()方法,如果成功,则返回新添加的行的ID,如果有问题,则返回-1,所以我建议您在{{ 1}}方法:

addData()

答案 1 :(得分:0)

在forpas答案中可以解决问题的根本原因,我建议您使用

db.insertOrThrow(TABLE_NAME, null, contentValues);

而不是db.insert(TABLE_NAME, null, contentValues);,因此您可以了解问题的根源。