在 Android 上找不到 SQLite db 文件

Posted

技术标签:

【中文标题】在 Android 上找不到 SQLite db 文件【英文标题】:SQLite db file not found on Android 【发布时间】:2019-07-30 12:08:38 【问题描述】:

我无法找到创建数据库适配器的数据库文件和表。但我可以看到数据正在保存,但我无法在我的目录中找到我的 db 文件。 但我可以保存条目并在我的屏幕上查看。 这是我正在创建数据库的 DBAdapter 类。

public class DBAdapter 

    private static final String DB_NAME = "clientList.db";
    private static final int DB_VERSION = 1;
    private static final String TABLE_CLIENT = "CLIENT";
    private static final String COLUMN_CLIENT_ID = "CLIENT_ID";
    private static final String  COLUMN_CLIENT_NAME = "CLIENT_NAME";


    private static final String query = "create table test_1 " + " (COLUMN_CLIENT_ID integer primary key, COLUMN_CLIENT_NAME text)";


    private Context context;
    private SQLiteDatabase sqliteDatabase;
    private static DBAdapater dbAdapaterInstance;


    private DBAdapater(Context context)
        this.context = context;
        sqliteDatabase = new DatabaseHelper(this.context,DB_NAME,null,DB_VERSION).getWritableDatabase();
    

    public static DBAdapater getDbAdapaterInstance(Context context)
        if(dbAdapaterInstance == null)
            dbAdapaterInstance = new DBAdapater(context);
        
        return dbAdapaterInstance;
    


    public boolean insert(int clientId , String name )
        ContentValues contentValues = new ContentValues();
        contentValues.put(COLUMN_CLIENT_ID,clientId);
        contentValues.put(COLUMN_CLIENT_NAME,name);
        return sqliteDatabase.insert(TABLE_CLIENT,null,contentValues)>0;
    

    public boolean delete(int ClientID)
        return sqliteDatabase.delete(TABLE_CLIENT, COLUMN_CLIENT_ID + "=" + ClientID,null)>0;
    

    public boolean modify(int ClientID , String newClient)
    ContentValues contentValues = new ContentValues();
    contentValues.put(COLUMN_CLIENT_NAME,newClient);
    return sqliteDatabase.update(TABLE_CLIENT,contentValues,COLUMN_CLIENT_ID + "=" + ClientID,null)>0;

    

    public List<DataBean> getClient()
        List<DataBean> clientInfo = new ArrayList<DataBean>();
        Cursor cursor = sqliteDatabase.query(TABLE_CLIENT , new String[]COLUMN_CLIENT_ID,COLUMN_CLIENT_NAME,null,null,null,null,null,null);
        if(cursor != null && cursor.getCount()>0)
            while (cursor.moveToNext()) 
                DataBean clientBean = new DataBean(cursor.getLong(0), cursor.getString(1));
                clientInfo.add(clientBean);
            
        
        return clientInfo;
    

    //purpose of this class is to help outer class
    public class DatabaseHelper extends SQLiteOpenHelper


        public DatabaseHelper(Context context , String databaseName , SQLiteDatabase.CursorFactory factory , int dbVersion)
            super(context, databaseName , factory , dbVersion);
        



        @Override
        public void onCreate(SQLiteDatabase db) 

            db.execSQL(query);

        

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 

        
    


这是我的 bean 类

public class DataBean 

    private long id;
    private String clientName;
    private String address;


    public DataBean()
        super();
    

    public DataBean(long id , String clientName)
        this.id = id;
        this.clientName = clientName;
    

    public long getId() 
        return id;
    

    public void setId(long id) 
        this.id = id;
    

    public String getClientName() 
        return clientName;
    

    public void setClientName(String clientName) 
        this.clientName = clientName;
    

【问题讨论】:

欢迎来到 Stack Overflow!请阅读Under what circumstances may I add “urgent” or other similar phrases to my question, in order to obtain faster answers?。 【参考方案1】:

如果您不指定任何路径,它将存储在您的应用程序目录的databases 文件夹中。

【讨论】:

它没有存储在任何地方。我现在可以注意到,如果我删除包含 CREATE TABLE 的字符串,它仍然可以工作。请让我知道如何解决此问题 正如您提到的,您可以保存和检索数据,这与CREATE TABLE 无关。您必须在databases 文件夹中找到它。 我同意你的观点,但我什至找不到那个数据库文件夹。在你第一次发表评论后,我什至检查过一次。我什至检查了主目录中的文件名。那里不存在。如果你能提供你的电子邮件地址,我可以详细说明我发现了什么问题 main directory 是什么意思?尝试在终端中运行adb pull /data/data/com.yourpackage/databases/clientList.db 命令。您将把数据库放到您的本地环境中。 adb 服务器版本 (40) 与此客户端 (36) 不匹配;杀死... * 守护进程成功启动 * adb: 错误: 连接失败: 未找到设备/模拟器 .....尝试该命令后出现此错误

以上是关于在 Android 上找不到 SQLite db 文件的主要内容,如果未能解决你的问题,请参考以下文章

Android SQLite:更新语句

Azure上找不到MongoDB?不妨试试Azure Cosmos DB

Azure上找不到MongoDB?不妨试试Azure Cosmos DB

Android ClassNotFoundException:在路径上找不到类

Android ClassNotFoundException:在路径上找不到类

科尔多瓦 android 构建失败,在 Windows 上找不到符号