1

I have been going crazy on the internet, looking for an answer.

Currently, I am building an android application, which uses the SQLite DB. Everything is set up, sign up works, login works, I connected the camera and can take pictures, which get saved to my local gallery. However, what doesn't work is the following:

  • Emulator is not working. Testing on my phone.
  • DDMS is not displaying my DB.
  • CPU is not supporting the required features VT-x or SVM.

However, main point is, I have been searching everywhere for the SQLiteDB. Where does android studio store the databases for SQLiteDB?

Also, I tried to write the data on my local storage of my phone, which also didn't work:

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) {
    }

} }

My DBHelper class looks as follows:

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;
}

}

Can someone help me please? My coding is not very good. Please bear with me :) (new to this)

1 Answer 1

1

Where does android studio store the databases for SQLiteDB?

If you are running in emulator, this link may help you

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

If you are using phone, you can download SQLite Manager from google play store.

Here the link https://play.google.com/store/apps/details?id=com.xuecs.sqlitemanager&hl=en

Sign up to request clarification or add additional context in comments.

3 Comments

Thank you! Will use the SQLite Manager. Any tips for this? Do I have to redirect, or will it connect when I run the application on my phone?
It will connect with your phone since you already download it and install in your phone.
Great to know that !

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.