【问题标题】:Issue with storing data with SQLite (android)使用 SQLite (android) 存储数据的问题
【发布时间】:2016-11-18 01:44:25
【问题描述】:

我一直在网上发疯,寻找答案。

目前,我正在构建一个使用 SQLite DB 的 android 应用程序。 一切都设置好了,注册工作,登录工作,我连接了相机并可以拍照,这些照片会保存到我当地的画廊。但是,以下内容不起作用:

  • 模拟器不工作。在我的手机上进行测试。
  • DDMS 未显示我的数据库。
  • CPU 不支持所需的功能 VT-x 或 SVM。

但是,重点是,我一直在到处寻找 SQLiteDB。 android studio 在哪里存储 SQLiteDB 的数据库?

另外,我尝试将数据写入手机的本地存储中,但也没有用:

public class DBUtil {

//Because of the fact that laptop refuses to let me use an emulator, data gets saved to my phone directory, folder DataAndroid
final static String FOLDER_EXTERNAL_DIRECTORY = Environment.getExternalStorageDirectory()+ "/DataAndroid";

//saving the data in my local data folder
public static void  copyDatabaseToExtStg(Context context){

    //external storage file
    File externalDirectory = new File(FOLDER_EXTERNAL_DIRECTORY);

    if(!externalDirectory.exists())
        externalDirectory.mkdirs();
    File toFile = new File(externalDirectory, DBHelper.DATABASE_NAME);
    //internal storage file
    File fromFile = context.getDatabasePath(DBHelper.DATABASE_NAME);
    if (fromFile.exists())
        copy(fromFile, toFile);
}

//copy from making the file to 'writing' the file
static void copy(File fromFile, File toFile) {
    try {
        FileInputStream is = new FileInputStream(fromFile);
        FileChannel src = is.getChannel();
        FileOutputStream os = new FileOutputStream(toFile);
        FileChannel dst = os.getChannel();
        dst.transferFrom(src, 0, src.size());
        src.close();    is.close();
        dst.close();    os.close();
    } catch (Exception e) {
    }

} }

我的 DBHelper 类如下所示:

public class DBHelper extends SQLiteOpenHelper {

//db attr.
SQLiteDatabase DataBase;

//confirm password doesn't need to be stored, it is just a small check up
private static final int DATABASE_VERSION = 1;
public static final String DATABASE_NAME = "contacts.db";
private static final String TABLE_NAME = "contacts";
private static final String COLUMN_ID = "id";
private static final String COLUMN_NAME = "name";
private static final String COLUMN_SURNAME = "surname";
private static final String COLUMN_EMAIL = "email";
private static final String COLUMN_USERNAME = "username";
private static final String COLUMN_PASSWORD = "password";
//constructor
public DBHelper(Context context) {
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
}

//create table +TABLE_NAME
private static final String TABLE_CREATE = "create table contacts(id integer primary key not null , " +
        "name text not null, surname text not null, email text not null, username text not null, password text not null);";

@Override
public void onCreate(SQLiteDatabase DataBase) {
    DataBase.execSQL(TABLE_CREATE);
    this.DataBase = DataBase;
}

public void insertContact(Contact contact){

    //To be able to insert anything in DB, it should be writeable.
    //Because of the fact that password.equals(confirmpassword), COLUMN_CONFPASS. is missing in list below
    DataBase = this.getWritableDatabase();
    ContentValues values = new ContentValues();

    String query = "SELECT * FROM contacts";
    Cursor cursor = DataBase.rawQuery(query, null);
    int count = cursor.getCount();

    //To make sure that the count increments, istead of assigning same number to different numbers.
    values.put(COLUMN_ID, count);
    values.put(COLUMN_NAME, contact.getName());
    values.put(COLUMN_SURNAME, contact.getSurname());
    values.put(COLUMN_EMAIL, contact.getEmail());
    values.put(COLUMN_USERNAME, contact.getUsername());
    values.put(COLUMN_PASSWORD, contact.getPassword());

    //Insert contact object into DB
    DataBase.insert(TABLE_NAME, null, values);
    DataBase.close();
}

//Keeping DB up to date
@Override
public void onUpgrade(SQLiteDatabase DataBase, int CurrentVersionOld, int NewVersion) {
    String query = "DROP TABLE IF EXISTS "+TABLE_NAME;
    DataBase.execSQL(query);
    this.onConfigure(DataBase);

}

//Read the DB
public String searchPassword(String username) {

    DataBase = this.getReadableDatabase();
    String query = "SELECT username, password FROM " + TABLE_NAME;
    Cursor cursor = DataBase.rawQuery(query, null);
    String uname, pw;


    //If the password is not found, then print:
    pw = "not found";

    if (cursor.moveToFirst()) {

        do {
            //assign index to username(0) and password (1)
            uname = cursor.getString(0);
            pw = cursor.getString(1);

            if (uname.equals(username)) {
                pw = cursor.getString(1);
                break;
            }
        } while (cursor.moveToNext());

    } return pw;
}

}

有人可以帮帮我吗? 我的编码不是很好。请多多包涵 :) (新手)

【问题讨论】:

    标签: java android sqlite emulation


    【解决方案1】:

    android studio 在哪里存储 SQLiteDB 的数据库?

    如果您在模拟器中运行,此链接可能会对您有所帮助

    https://stackoverflow.com/a/28339178/5156075

    如果您使用手机,可以从 google play store 下载SQLite Manager

    这里是链接https://play.google.com/store/apps/details?id=com.xuecs.sqlitemanager&hl=en

    【讨论】:

    • 谢谢!将使用 SQLite 管理器。对此有什么建议吗?我是否必须重定向,或者当我在手机上运行应用程序时它会连接?
    • 它会与您的手机连接,因为您已经下载并安装在您的手机中。
    • 很高兴知道这一点!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-30
    • 2017-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-22
    相关资源
    最近更新 更多