【问题标题】:Why it does not create the table and add data?为什么它不创建表并添加数据?
【发布时间】:2018-10-30 13:14:31
【问题描述】:

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

【问题讨论】:

标签: java android database sqlite android-sqlite


【解决方案1】:

即使您的表已创建,您也无法使用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()

Edit2insert()方法,如果成功则返回新添加行的id,如果有问题则返回-1,所以我建议你在addData()方法中做这个改动:

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

【讨论】:

    【解决方案2】:

    添加到解决问题根本原因的forpas答案,我建议您使用

    db.insertOrThrow(TABLE_NAME, null, contentValues);

    而不是db.insert(TABLE_NAME, null, contentValues);,这样您就可以了解问题可能是什么。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-05
      • 2015-08-09
      • 2017-03-27
      • 1970-01-01
      • 2021-08-18
      • 1970-01-01
      相关资源
      最近更新 更多