Java 未创建SQLite数据库文件

Java 未创建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

未在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();

    }
}
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的某些部分所要求的,但在一般情况下是一种良好的做法,即使您不使用这些类和/或方法。