Java 未创建SQLite数据库文件
未在Android设备监视器>DBMS>文件浏览>数据中创建SQLite数据库文件(.db)。此目录中未显示.db文件。我发现自己无法理解为什么不创建数据库文件。 这是我的档案 MainActivity.javaJava 未创建SQLite数据库文件,java,android,sqlite,Java,Android,Sqlite,未在Android设备监视器>DBMS>文件浏览>数据中创建SQLite数据库文件(.db)。此目录中未显示.db文件。我发现自己无法理解为什么不创建数据库文件。 这是我的档案 MainActivity.java package com.example.zohaib.database; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import an
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();
}
}
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);
}
}
DBConnection.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();
}
}
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);
}
}
您在一个创建表脚本中使用了两个表名 改变
String query ="CREATE TABLE test_1 " + TABLE_PRODUCTS + " (" +
COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
COLUMN_PRODUCTNAME + " TEXT " +
")";
到
更新:
只需从正在测试的设备上删除/卸载应用程序,并修复查询,即在末尾添加分号“;”。重新构建应用程序
或
可以使用onUpgrade()通过增加版本来重新创建数据库表。另外,由您直接调用生命周期方法也是不好的
工作示例代码(不完美):
这里是数据库文件
但数据库仍能正常工作吗?你还能读写吗?另外,请在adb外壳中发布你正在使用的命令,以检查文件的位置。@DougStevenson我使用我的移动设备作为模拟器。我从Android studio的工具栏打开Android设备监视器。从这里,我点击我正在运行的设备,然后点击DBMS>File explore>data。单击数据文件夹没有显示任何文件您是否收到“创建数据库”日志消息?如果您使用真实设备作为仿真器,则无法在
数据->数据
目录中获取.db
文件。尝试使用内置emulator获取.db
文件。MainActivity。只有在内部类中编写代码时,才需要此
。在sqLiteOpenHelper=newdbconnection(MainActivity.this)中
,这个
很好。为什么建议在onCreate()中插入数据?这似乎不合适。活动包含上下文,因此不需要使用new-DBConnection(MainActivity.This)
,new-DBConnection(This)
就可以了。@abcdef12 IMO,MainActivity。这会造成混乱。这不是一种标准做法。至于添加示例数据,这当然应该进行测试,但我认为onCreate()
不适合这样做。它也没有解决实际问题:数据库似乎一开始就没有创建。这意味着,如果OP要查看,则最有可能的情况是logcat中已经存在错误。建议对键使用“\u id”
绝对是好的。这仅是Android API的某些部分所要求的,但在一般情况下是一种良好的做法,即使您不使用这些类和/或方法。