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

8.1. Điều kiện orderBy
Với queryHelper.addOrderBy(valueTableName + "." + FIELD_EN_VALUE, true);

8.2. Điều kiện limit
Với queryHelper.addLimit("4");

8.3. Điều kiện limit + offset
Với queryHelper.addLimit("10"); queryHelper.addOffset("3");
Full code :
Link phần 1