0

Please see if the below code is correct. Thanks in advance.

This is done for a User login and management system that i'm currently developing for an in house social media forum. I started using android studio for developing recently.

Below code was typed in a Database class called DBHandler.

I have created as per the below comment from stack over flow,

Sqlite helper class helps us to manage database creation and version management. SQLiteOpenHelper takes care of all database management activities. To use it, 1.Override onCreate(), onUpgrade() methods of SQLiteOpenHelper. Optionally override onOpen() method. 2.Use this subclass to create either a readable or writable database and use the SQLiteDatabase's four API methods insert(), execSQL(), update(), delete() to create, read, update and delete rows of your table.

package Database;

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

import com.example.user.model_paper.User;
import com.example.user.model_paper.UserProfile;

import java.util.ArrayList;
import java.util.List;

public class DBHelper extends SQLiteOpenHelper {

    public static final String DATABASE="user.db";

    public DBHelper(Context context) {
        super(context, DATABASE, null, 1);
    }

    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {
        String query="CREATE TABLE "+ UserProfile.Users.TABLE_NAME +" ( "+
                UserProfile.Users._ID +" INTEGER PRIMARY KEY, "+
                UserProfile.Users.COLUMN_NAME +" TEXT, "+
                UserProfile.Users.COLUMN_PASSWORD +" TEXT, "+
                UserProfile.Users.COLUMN_DOB +" TEXT, "+
                UserProfile.Users.COLUMN_GENDER +" TEXT);";

        sqLiteDatabase.execSQL(query);
    }

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
        sqLiteDatabase.execSQL("DROP TABLE IF EXISTS "+ UserProfile.Users.TABLE_NAME);
        onCreate(sqLiteDatabase);
    }

    public long addInfo(User user){

        SQLiteDatabase db=getWritableDatabase();

        ContentValues values=new ContentValues();
        values.put(UserProfile.Users.COLUMN_NAME,user.getUserName());
        values.put(UserProfile.Users.COLUMN_PASSWORD,user.getPassword());
        values.put(UserProfile.Users.COLUMN_DOB,user.getDob());
        values.put(UserProfile.Users.COLUMN_GENDER,user.getGender());

        long id=db.insert(UserProfile.Users.TABLE_NAME,null,values);

        return id;
    }

    public boolean updateInfo(User user){

        SQLiteDatabase db=getReadableDatabase();

        ContentValues values=new ContentValues();
        values.put(UserProfile.Users.COLUMN_NAME,user.getUserName());
        values.put(UserProfile.Users.COLUMN_PASSWORD,user.getPassword());
        values.put(UserProfile.Users.COLUMN_DOB,user.getDob());
        values.put(UserProfile.Users.COLUMN_GENDER,user.getGender());

        String selection= UserProfile.Users._ID+" = ?";
        String[] selectionArgs={Integer.toString(user.getId())};

        int count=db.update(UserProfile.Users.TABLE_NAME,values,selection,selectionArgs);

        if (count>0)
            return true;
        else
            return false;
    }

    public List<User> readAllInfo(){

        SQLiteDatabase db=getReadableDatabase();

        String[] projection={UserProfile.Users._ID,
                            UserProfile.Users.COLUMN_NAME,
                            UserProfile.Users.COLUMN_PASSWORD,
                            UserProfile.Users.COLUMN_DOB,
                            UserProfile.Users.COLUMN_GENDER};

        String order= UserProfile.Users._ID+" ASC";

        Cursor cursor = db.query(UserProfile.Users.TABLE_NAME,projection,null,null,null,null,order);

        List<User> list = new ArrayList();
        User user=new User();

        while(cursor.moveToNext()){
            user.setId(cursor.getInt(cursor.getColumnIndex(UserProfile.Users._ID)));
            user.setUserName(cursor.getString(cursor.getColumnIndex(UserProfile.Users.COLUMN_NAME)));
            user.setPassword(cursor.getString(cursor.getColumnIndex(UserProfile.Users.COLUMN_PASSWORD)));
            user.setDob(cursor.getString(cursor.getColumnIndex(UserProfile.Users.COLUMN_DOB)));
            user.setGender(cursor.getString(cursor.getColumnIndex(UserProfile.Users.COLUMN_GENDER)));

            list.add(user);
        }

        return list;
    }

    public User readAllInfo(int id){

        SQLiteDatabase db=getReadableDatabase();

        String[] projection={UserProfile.Users._ID,
                UserProfile.Users.COLUMN_NAME,
                UserProfile.Users.COLUMN_PASSWORD,
                UserProfile.Users.COLUMN_DOB,
                UserProfile.Users.COLUMN_GENDER};

        String selection= UserProfile.Users._ID+" = ?";
        String[] selectionArgs={Integer.toString(id)};

        String order= UserProfile.Users._ID+" ASC";

        Cursor cursor = db.query(UserProfile.Users.TABLE_NAME,projection,selection,selectionArgs,null,null,order);

        User user=new User();

        while(cursor.moveToNext()){
            user.setId(cursor.getInt(cursor.getColumnIndex(UserProfile.Users._ID)));
            user.setUserName(cursor.getString(cursor.getColumnIndex(UserProfile.Users.COLUMN_NAME)));
            user.setPassword(cursor.getString(cursor.getColumnIndex(UserProfile.Users.COLUMN_PASSWORD)));
            user.setDob(cursor.getString(cursor.getColumnIndex(UserProfile.Users.COLUMN_DOB)));
            user.setGender(cursor.getString(cursor.getColumnIndex(UserProfile.Users.COLUMN_GENDER)));
        }

        return user;
    }

    public boolean deleteInfo(int id){
        SQLiteDatabase db=getReadableDatabase();

        String selection= UserProfile.Users._ID+" = ?";
        String[] selectionArgs={Integer.toString(id)};

        int count=db.delete(UserProfile.Users.TABLE_NAME,selection,selectionArgs);

        if(count>0)
            return true;
        else
            return false;
    }
}
  • Could you explain what the problem with the code is? – Sami Kuhmonen Oct 15 '18 at 05:32
  • Firstly, you can use fire-fox browser extension for testing your schema. Your question does not show that you have done a lot of research before asking a question, so it may be marked for closing. The query looks OK to me, since it is a copied one. Please ask questions that have serious problem issues to be able to help newbies. – Abhinav Saxena Oct 15 '18 at 05:34
  • Note that this code is mostly taken from: https://stackoverflow.com/a/12015869/168175 without proper attribution. – Flexo Oct 15 '18 at 07:50

1 Answers1

-1

It is correct but SQLiteDatabase call db.close() function after complete the work and use synchronized to avoiding the deadlock