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