首页 > 解决方案 > 为什么它不创建表并添加数据?

问题描述

数据库助手.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教程中复制粘贴并更改了一些东西,但似乎由于某种原因它不起作用。

标签: javaandroiddatabasesqliteandroid-sqlite

解决方案


即使您的表已创建,您也无法使用该addData()方法在其中添加数据,因为您没有为该id列提供值。
CREATE语句将列创建idPRIMARY 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 如果有问题,因此我建议您在addData()方法中进行此更改:

int id = db.insert(TABLE_NAME, null, contentValues); 
return (id >= 0);

推荐阅读