未在Android设备监视器> DBMS>文件浏览>数据中创建SQLite数据库文件(.db)。此目录中显示没有.db文件。我发现自己无法弄清楚为什么没有创建数据库文件。 这是我的档案。
MainActivity.java
package com.example.zohaib.database;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
public class MainActivity extends AppCompatActivity {
SQLiteOpenHelper sqLiteOpenHelper;
SQLiteDatabase sqLiteDatabase;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
sqLiteOpenHelper = new DBConnection(this);
sqLiteDatabase = sqLiteOpenHelper.getWritableDatabase();
}
}
DBConnection.java
package com.example.zohaib.database;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
import android.widget.Toast;
public class DBConnection extends SQLiteOpenHelper {
private static final int DATABASE_VERSION = 1;
private static final String DATABASE_NAME = "products.db";
private static final String TABLE_PRODUCTS = "products";
private static final String COLUMN_ID = "id";
private static final String COLUMN_PRODUCTNAME = "productName";
public DBConnection(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
String query ="CREATE TABLE " + TABLE_PRODUCTS + " (" +
COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
COLUMN_PRODUCTNAME + " TEXT " +
")";
db.execSQL(query);
Log.d("Create Database:", "Successful");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + TABLE_PRODUCTS);
onCreate(db);
}
}
答案 0 :(得分:2)
您在一个创建表脚本中使用了两个表名。
更改
String query ="CREATE TABLE test_1 " + TABLE_PRODUCTS + " (" +
COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
COLUMN_PRODUCTNAME + " TEXT " +
")";
到
String query ="CREATE TABLE " + TABLE_PRODUCTS + " (" +
COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
COLUMN_PRODUCTNAME + " TEXT " +
");";
答案 1 :(得分:1)
更新: 只需从您正在测试的设备上删除/卸载该应用并修复查询,即添加分号";"在末尾。重新构建应用程序。
或
您可以使用onUpgrade()通过递增版本来重新创建数据库表。你直接调用生命周期方法也不好。
工作示例代码(不完美):
package com.example.zohaib.database;
import android.content.ContentValues;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
public class DBConnection extends SQLiteOpenHelper {
// change version with change in schema or db changes
private static final int DATABASE_VERSION = 2;
private static final String DATABASE_NAME = "products.db";
private static final String TABLE_PRODUCTS = "products";
private static final String COLUMN_ID = "_id";
private static final String COLUMN_PRODUCTNAME = "productName";
public DBConnection(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
createTable(db);
Log.d("From onCreate : ", " successfully created.");
}
private void createTable(SQLiteDatabase db) {
String query ="CREATE TABLE " + TABLE_PRODUCTS + " (" +
COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
COLUMN_PRODUCTNAME + " TEXT " +
");";
db.execSQL(query);
Log.d("Create Database:", "Successful");
ContentValues contentValues = new ContentValues();
contentValues.put(COLUMN_PRODUCTNAME, "Sample Data");
db.insert(TABLE_PRODUCTS, null, contentValues);
Log.d("Insert Row:", "Insert Row Successful");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + TABLE_PRODUCTS);
createTable(db);
Log.d("From onUpgrade : ", " successfully upgraded.");
}
@Override
public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + TABLE_PRODUCTS);
createTable(db);
Log.d("From onDowngrade : ", " successfully Downgraded.");
}
}
这里是数据库文件。