Java 未创建Android SQLite数据库
未创建SQLite数据库。在过去的几个小时里我一直在玩这个,但现在我累了很多。我在Java 未创建Android SQLite数据库,java,android,database,sqlite,Java,Android,Database,Sqlite,未创建SQLite数据库。在过去的几个小时里我一直在玩这个,但现在我累了很多。我在日志Cat中没有收到任何错误或警告。这是我的代码,到目前为止我已经尝试过了。我们将不胜感激 public class MySQLiteHelper extends SQLiteOpenHelper{ final static String DB_NAME = "citiesdata.db"; final static String TABLE_NAME = "allcities"; fina
日志Cat
中没有收到任何错误或警告。这是我的代码,到目前为止我已经尝试过了。我们将不胜感激
public class MySQLiteHelper extends SQLiteOpenHelper{
final static String DB_NAME = "citiesdata.db";
final static String TABLE_NAME = "allcities";
final static String ID = "_id";
final static String CITY_CODE = "city_code";
final static int DB_VERSION = 1;
private SQLiteDatabase db;
Context cont;
public MySQLiteHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
cont = context;
Toast.makeText(cont, "constructor called", Toast.LENGTH_LONG).show();
}
@Override
public void onCreate(SQLiteDatabase db) {
Toast.makeText(cont, "onCreate method called", Toast.LENGTH_LONG).show();
String createTable = "CREATE TABLE IF NOT EXISTS " + TABLE_NAME + "(" + ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + CITY_CODE + " TEXT);";
db.execSQL(createTable);
// INSERTING RECORDS IN DATABASE
SQLiteDatabase writableDB = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(CITY_CODE, "333");
writableDB.insert(TABLE_NAME, null, values);
writableDB.close();
readCity();
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Toast.makeText(cont, "onUpgrade method called", Toast.LENGTH_LONG).show();
db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
onCreate(db);
}
public void readCity(){
Toast.makeText(cont, "readCity method called", Toast.LENGTH_LONG).show();
String selectQuery = "SELECT * FROM " + TABLE_NAME;
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);
Toast.makeText(cont, cursor.getString(cursor.getColumnIndex(CITY_CODE)), Toast.LENGTH_LONG).show();
db.close();
}
}
在主UI线程中调用构造函数的按钮点击如下
new MySQLiteHelper(MainActivity.this);
public void fillTable(){
db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(CITY_CODE, "333");
db.insert(TABLE_NAME, null, values);
db.close();
readCity();
}
权限是
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE"/>
事先非常感谢。最后,我直接把问题解决了。但是怎么做呢
SQLiteOpenHelper
的逻辑是,它不会仅通过创建对象来调用onCreate
方法
onCreate
方法onUpgrade
方法MySQLiteHelper
类中创建了一个fillTable
方法,通过调用SQLiteOpenHelper
的getwritedatabase
方法,我第一次尝试访问数据库进行编写。fillTable
方法的定义如下所示
new MySQLiteHelper(MainActivity.this);
public void fillTable(){
db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(CITY_CODE, "333");
db.insert(TABLE_NAME, null, values);
db.close();
readCity();
}
在类的新实例上调用fillTable方法:
new MySQLiteHelper(MainActivity.this).fillTable();
感谢所有在评论中帮助我的人
public MySQLiteHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
cont = context;
SQLiteDatabase db = this.getReadableDatabase();
Toast.makeText(cont, "constructor called", Toast.LENGTH_LONG).show();
}
更改构造函数代码,然后它就会工作…请显示更多初始化代码
MySQLiteHelper
确切的问题是什么?readCity()
是否失败?