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

Java 为什么不创建表并添加数据?,java,android,database,sqlite,android-sqlite,Java,Android,Database,Sqlite,Android 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 { pr

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");
    }
如果我打开数据库,里面就没有表,也没有数据ofc。。因为没有创建表


我会告诉你更多的信息,但我不认为你需要比这个2 java类更多的东西。我复制粘贴并更改了tutorialspoint教程中的一些内容,但似乎出于某种原因它不起作用

即使创建了表,也无法使用
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,因此我建议您在
addData()
方法中进行此更改:

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

即使创建了表,也无法使用
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,因此我建议您在
addData()
方法中进行此更改:

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

除了解决问题根本原因的forpas答案之外,我建议您使用

db.insertOrThrow(表名称,null,contentValues)


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

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

db.insertOrThrow(表名称,null,contentValues)


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

应用程序引发了一些异常?不要认为这些异常与此问题相关:应用程序引发了一些异常?不要认为这些异常与此问题相关: