12/08/2018, 14:59

Xây dựng 1 thư viện nhỏ hỗ trợ tạo query SQLite (Phần 2 - Hướng dẫn cách sử dụng)

Như phần 1 mình đã giới thiệu chung về cấu trúc của class QueryHelper, hôm nay mình sẽ hướng dẫn tiếp các bạn cách sử dụng nó vào thực tế Xử lý: - queryHelper.getSqlQuery() để lấy câu lệnh query - queryHelper.getSelectionArgs() để lấy mảng giá trị cần check public Cursor query(QueryHelper ...

Như phần 1 mình đã giới thiệu chung về cấu trúc của class QueryHelper, hôm nay mình sẽ hướng dẫn tiếp các bạn cách sử dụng nó vào thực tế

Xử lý:
- queryHelper.getSqlQuery() để lấy câu lệnh query
- queryHelper.getSelectionArgs() để lấy mảng giá trị cần check
 public Cursor query(QueryHelper queryHelper) {
        SQLiteDatabase db = getReadableDatabase();
        return db.rawQuery(queryHelper.getSqlQuery(), queryHelper.getSelectionArgs());
    }

để thực hiện truy xuất dữ liệu

package com.example.tuananh.databasehelper.database;

import android.content.Context;
import android.database.Cursor;

import com.example.tuananh.databasehelper.enums.TypeSearch;
import com.example.tuananh.databasehelper.model.ItemSearch;
import com.tuananh.databasehelper.queryhelper.QueryHelper;

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

import static com.example.tuananh.databasehelper.database.DBConstant.FIELD_EN_VALUE;
import static com.example.tuananh.databasehelper.database.DBConstant.FIELD_ID;
import static com.example.tuananh.databasehelper.database.DBConstant.FIELD_JA_VALUE;
import static com.example.tuananh.databasehelper.database.DBConstant.FIELD_KEY;
import static com.example.tuananh.databasehelper.database.DBConstant.TABLE_DEGREE;
import static com.example.tuananh.databasehelper.database.DBConstant.TABLE_M_DEGREE;

/**
 * Created by framgia on 26/02/2017.
 */
public class DatabaseManager implements DatabaseInterface {
    private static DatabaseManager sInstance;
    private Context mContext;

    private DatabaseManager(Context context) {
        mContext = context;
    }

    public static synchronized DatabaseManager getInstance(Context context) {
        if (sInstance == null) {
            sInstance = new DatabaseManager(context.getApplicationContext());
        }
        return sInstance;
    }

    @Override
    public List<ItemSearch> getItemSearch(TypeSearch typeSearch) {
        QueryHelper queryHelper = new QueryHelper();
        String masterTableName, valueTableName, columnMasterTableName, columnValueTableName;
        switch (typeSearch) {
            case DEGREES:
                masterTableName = TABLE_M_DEGREE;
                valueTableName = TABLE_DEGREE;
                break;
            default:
                return null;
        }
        columnMasterTableName = masterTableName + "." + FIELD_KEY;
        columnValueTableName = valueTableName + "." + FIELD_KEY;
        queryHelper.addColumn(masterTableName + "." + FIELD_ID);
        queryHelper.addColumn(valueTableName + "." + FIELD_EN_VALUE);
        queryHelper.addColumn(valueTableName + "." + FIELD_JA_VALUE);
        queryHelper.addOrderBy(FIELD_EN_VALUE);
        queryHelper.setJoinTable(masterTableName, valueTableName,
            columnMasterTableName,
            columnValueTableName);
        return getItemSearchList(queryHelper);
    }

    public List<ItemSearch> getItemSearchList(QueryHelper queryHelper) {
        List<ItemSearch> itemSearchList = new ArrayList<>();
        Cursor cursor = DBHelper.getInstance(mContext).query(queryHelper);
        if (cursor != null && cursor.moveToFirst()) {
            do {
                try {
                    int id = cursor.getInt(cursor.getColumnIndex(FIELD_ID));
                    String enValues = cursor.getString(cursor.getColumnIndex(FIELD_EN_VALUE));
                    String jaValues = cursor.getString(cursor.getColumnIndex(FIELD_JA_VALUE));
                    ItemSearch itemSearch = new ItemSearch(id, enValues, jaValues);
                    itemSearchList.add(itemSearch);
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
            }
            while (cursor.moveToNext());
        }
        return itemSearchList;
    }
}

  • Trong đó function getItemSearchList thực hiện try catch để lấy dữ liệu ra

  • Cursor cursor = DBHelper.getInstance(mContext).query(queryHelper); từ queryHelper tạo từ getItemSearch chúng ta lấy ra cursor

  • Trong function getItemSearch thực hiện việc add các điều kiện để tạo ra câu lệnh query : Các cột được lấy ra : queryHelper.addColumn(masterTableName + "." + FIELD_ID); queryHelper.addColumn(valueTableName + "." + FIELD_EN_VALUE); queryHelper.addColumn(valueTableName + "." + FIELD_JA_VALUE);

    Order by : queryHelper.addOrderBy(FIELD_EN_VALUE);

    Nối 2 bảng :
    queryHelper.setJoinTable(masterTableName, valueTableName, columnMasterTableName, columnValueTableName);

    Limit : queryHelper.addLimit("10");

    Điều kiện : queryHelper.addCondition(valueTableName + "." + FIELD_ID, 5);

để chứa các phương thức truy xuất dữ liệu (nên chia theo chức năng có thể tạo nhiều interface)

package com.example.tuananh.databasehelper.database;

import com.example.tuananh.databasehelper.enums.TypeSearch;
import com.example.tuananh.databasehelper.model.ItemSearch;

import java.util.List;
import java.util.Map;

/**
 * Created by framgia on 26/02/2017.
 */
public interface DatabaseInterface {
    List<ItemSearch> getItemSearch(TypeSearch typeSearch);
}

  • chứa các field trong database
  • chứa tên của các bảng trong database
package com.example.tuananh.databasehelper.database;

/**
 * Created by framgia on 26/02/2017.
 */
public class DBConstant {
    public static final String FIELD_KEY = "key";
    public static final String FIELD_ID = "id";
    public static final String FIELD_EN_VALUE = "enValue";
    public static final String FIELD_JA_VALUE = "jaValue";
    public static final String TABLE_M_DEGREE = "m_degrees";
    public static final String TABLE_DEGREE = "degrees";
}

Chứa 3 thông tin sẽ hiển thị trên reyclerview

package com.example.tuananh.databasehelper.model;

import com.google.gson.annotations.SerializedName;

/**
 * Created by framgia on 26/02/2017.
 */
public class ItemSearch {
    @SerializedName("id")
    private int mId;
    @SerializedName("enValue")
    private String mEnValue;
    @SerializedName("jaValue")
    private String mJaValue;

    public ItemSearch(int id, String enValue, String jaValue) {
        mId = id;
        mEnValue = enValue;
        mJaValue = jaValue;
    }

    public int getId() {
        return mId;
    }

    public String getEnValue() {
        return mEnValue;
    }

    public String getJaValue() {
        return mJaValue;
    }
}

Adapter của recyclerview -> Mình viết theo kiểu truyền thống nhất

package com.example.tuananh.databasehelper.adapter;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import com.example.tuananh.databasehelper.R;
import com.example.tuananh.databasehelper.model.ItemSearch;

import java.util.List;

/**
* Created by framgia on 26/02/2017.
*/
public class SearchRecyclerAdapter
   extends RecyclerView.Adapter<SearchRecyclerAdapter.SearchViewHolder> {
   private List<ItemSearch> mItemSearchList;
   private LayoutInflater mLayoutInflater;

   public SearchRecyclerAdapter(Context context, List<ItemSearch> itemSearchList) {
       mItemSearchList = itemSearchList;
       mLayoutInflater = LayoutInflater.from(context);
   }

   @Override
   public SearchViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
       View itemView = mLayoutInflater.inflate(R.layout.item_search, parent, false);
       return new SearchViewHolder(itemView);
   }

   @Override
   public void onBindViewHolder(SearchViewHolder holder, int position) {
       ItemSearch itemSearch = mItemSearchList.get(position);
       holder.mTextViewId.setText(String.valueOf(itemSearch.getId()));
       holder.mTextViewValueEn.setText(itemSearch.getEnValue());
       holder.mTextViewValueJa.setText(itemSearch.getJaValue());
   }

   @Override
   public int getItemCount() {
       return mItemSearchList != null ? mItemSearchList.size() : 0;
   }

   public static class SearchViewHolder extends RecyclerView.ViewHolder {
       private TextView mTextViewId, mTextViewValueEn, mTextViewValueJa;

       public SearchViewHolder(View itemView) {
           super(itemView);
           mTextViewId = (TextView) itemView.findViewById(R.id.text_id);
           mTextViewValueEn = (TextView) itemView.findViewById(R.id.text_value_en);
           mTextViewValueJa = (TextView) itemView.findViewById(R.id.text_value_ja);
       }
   }
}

Function loadData() sẽ thực hiện gọi đến DatabaseManager.getInstance(this).getItemSearch(typeSearch); để load dữ liệu từ database addAll vào list

package com.example.tuananh.databasehelper;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.TextView;

import com.example.tuananh.databasehelper.adapter.SearchRecyclerAdapter;
import com.example.tuananh.databasehelper.database.DatabaseManager;
import com.example.tuananh.databasehelper.enums.TypeSearch;
import com.example.tuananh.databasehelper.model.ItemSearch;

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

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
   private SearchRecyclerAdapter mSearchRecyclerAdapter;
   private List<ItemSearch> mItemSearchList = new ArrayList<>();
   private TextView mTextViewTitleSearch;

   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
       initViews();
       loadData(TypeSearch.DEGREES);
   }

   private void loadData(TypeSearch typeSearch) {
       mItemSearchList.clear();
       List<ItemSearch> itemSearchList =
           DatabaseManager.getInstance(this).getItemSearch(typeSearch);
       if (itemSearchList != null) {
           mItemSearchList.addAll(itemSearchList);
       }
       mSearchRecyclerAdapter.notifyDataSetChanged();
   }

   private void initViews() {
       mTextViewTitleSearch = (TextView) findViewById(R.id.text_title_search);
       mSearchRecyclerAdapter = new SearchRecyclerAdapter(this, mItemSearchList);
       RecyclerView recyclerViewSearch = (RecyclerView) findViewById(R.id.recycler_view_search);
       recyclerViewSearch.setAdapter(mSearchRecyclerAdapter);
       recyclerViewSearch.setLayoutManager(new LinearLayoutManager(this));
       mTextViewTitleSearch.setText(R.string.text_test_title_degree);
       findViewById(R.id.button_next).setOnClickListener(this);
   }

   @Override
   public void onClick(View view) {
       switch (view.getId()) {
           case R.id.button_next:
               break;
       }
   }
}

8.1. Full

Ảnh 1

8.1. Điều kiện orderBy

Với queryHelper.addOrderBy(valueTableName + "." + FIELD_EN_VALUE, true);

Ảnh 2

8.2. Điều kiện limit

 Với queryHelper.addLimit("4");

Ảnh 3

8.3. Điều kiện limit + offset

  Với  queryHelper.addLimit("10");  queryHelper.addOffset("3");

Ảnh 4 Full code : Link phần 1

0