【问题标题】:SQLite file opener Android StudioSQLite 文件打开器 Android Studio
【发布时间】:2020-03-27 02:56:05
【问题描述】:

我刚刚开始了一个 Android 工作室项目,我已经编写了一些代码来在 SQLite 中创建一个表。

数据库没有简单的 UI,所以我尝试安装插件 DB Navigator。这需要我将导航器链接到我的数据库,但找不到文件的创建位置。

很多答案都被视为转到 /data/data/ 但我在我的目录中找不到这些文件夹。

知道如何确定我的 SQLite 数据库吗? 任何帮助是极大的赞赏。

SQLiteController.java

  package com.example.apexstrength;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

import static java.sql.Types.NULL;

public  class SQLiteController extends SQLiteOpenHelper { //abstract to prevent creating/dropping tables

    private static final int DATABASE_VERSION=1;
    private static final String DATABASE_NAME="ApexStrength";
    private static final String TABLE_USER="user";

    private static final String KEY_userName="userName",KEY_password="password", KEY_firstName="firstName",KEY_surname="surname", KEY_EMAIL="email";

    public SQLiteController(Context context)
    {
        super(context,DATABASE_NAME,null,DATABASE_VERSION);
    }

    public void addUser( String userName, String password, String firstName, String surname, String email)
    {
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put(KEY_userName, userName);
        values.put(KEY_password, password);
        values.put(KEY_firstName, firstName);
        values.put(KEY_surname, surname);
        values.put(KEY_EMAIL, email);


        //inserting rows
        db.insert(TABLE_USER, null, values);
        db.close();
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE TABLE IF NOT EXISTS user (username VARCHAR, password VARCHAR, firstName VARCHAR, surname VARCHAR, email VARCHAR)"); //Create table is not there.
//        db.execSQL("CREATE TABLE IF NOT EXISTS exercise (username VARCHAR, password VARCHAR, firstName VARCHAR, surname VARCHAR, email VARCHAR)");
//        db.execSQL("CREATE TABLE IF NOT EXISTS workout (username VARCHAR, password VARCHAR, firstName VARCHAR, surname VARCHAR, email VARCHAR)");
//        db.execSQL("CREATE TABLE IF NOT EXISTS sets (username VARCHAR, password VARCHAR, firstName VARCHAR, surname VARCHAR, email VARCHAR)");
    }

    public boolean logIn(String username, String password) {
        SQLiteDatabase db = this.getReadableDatabase();
        Cursor c = db.rawQuery("select * from user where username=? and password=?", new String[]{username,password});
        if(c.getCount()>0)
        {
            return true;
        }
        return false;
    }

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

    }
}

signUp.java

package com.example.apexstrength;

import androidx.appcompat.app.AppCompatActivity;

import android.app.DownloadManager;
import android.content.Intent;
import android.app.Fragment;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class signUp extends AppCompatActivity {
    private SQLiteController db;

    public void register(View view) {
        EditText user = (EditText) findViewById(R.id.passwordReg);
        EditText pass = (EditText) findViewById(R.id.userReg);
        EditText first = (EditText) findViewById(R.id.firstNameReg);
        EditText sur = (EditText) findViewById(R.id.surnameReg);
        EditText email = (EditText) findViewById(R.id.emailReg);

        String username = user.getText().toString();
        String password = pass.getText().toString();
        String firstname = first.getText().toString();
        String surname = sur.getText().toString();
        String emailAddress = email.getText().toString();

        if (!username.isEmpty() && !password.isEmpty() && !firstname.isEmpty() && !surname.isEmpty() && !emailAddress.isEmpty()) {
            db.addUser(username, password, firstname, surname, emailAddress);
            Toast.makeText(getApplicationContext(), emailAddress+ " has been registered!", Toast.LENGTH_LONG).show();
            Intent i = new Intent(getApplicationContext(), MainActivity.class);
            startActivity(i);
        } else {
            Toast.makeText(getApplicationContext(), "Please enter your details", Toast.LENGTH_LONG).show();
        }
    }

    public boolean onCreateOptionsMenu(Menu menu)                            //Creating options menu
    {
        MenuInflater menuInflater = getMenuInflater();
        menuInflater.inflate(R.menu.main_menu, menu);

        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        super.onOptionsItemSelected(item);

        switch (item.getItemId()) {
            //Selected items, log selected
            case R.id.home:
                Log.i("Menu item selected", "Home");
                Intent intent = new Intent(this, MainActivity.class);
                startActivity(intent);
                return true;
            case R.id.settings:
                Log.i("Menu item selected", "Settings");
                return true;
            case R.id.help:
                Log.i("Menu item selected", "Help");
                return true;
            case R.id.weightConversion:
                Log.i("Menu item selected", "Weight Conversion");
                intent = new Intent(this, weightConversion.class);
                startActivity(intent);
                return true;
            default:
                return false;

        }
    }



    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_sign_up);
        db= new SQLiteController(getApplicationContext());
    }}

【问题讨论】:

    标签: java sqlite android-studio android-sqlite


    【解决方案1】:

    在 Android 中,您可以使用设备资源管理器(默认情况下或通过查看/工具窗口/设备资源管理器右下角)

    然后是类似的东西:-

    然后您可以右键单击数据库并使用另存为复制路径

    • 请注意,如果有 -wal 文件且它不为空,则应将 -wal 和 -shm 文件与数据库文件一起复制。

    【讨论】:

    • 您好,我已按照您的步骤进行操作,一旦我进入 /data/data ,就会有大量 com.android 文件夹,似乎没有一个指向数据库。
    • @DJones 您必须选择适当的目录,这将是与您的应用程序包对应的目录,即 com.example.apexstrength(向下滚动列表)
    • 太好了,谢谢!当我复制路径并粘贴到 DB Navigator 连接时,它显示“数据库文件”/data/data/com.example.apexstrength/databases/ApexStrength“不存在。你想创建它吗?”即使它在设备文件资源管理器中?
    • @DJones 问题已得到解答,您已确定数据库,您应该勾选答案。我个人复制数据库而不是尝试通过路径访问它(如果有 -wal 和 -shm 文件也复制它们)并使用工具打开它(我使用 Navicat),否则您需要阅读 DB 手册导航器。
    猜你喜欢
    • 2017-09-11
    • 1970-01-01
    • 2018-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-16
    • 1970-01-01
    • 2011-05-06
    相关资源
    最近更新 更多