lilienfa lilienfa - 19 days ago 5
Java Question

Issue with storing data with SQLite (android)

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)

Answer

Where does android studio store the databases for SQLiteDB?

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

http://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