關於ormlite增刪改查操作,在這裏以一個查詢歷史記錄和根據歷史記錄或當前記錄查詢相關信息進行講解
增刪改查有很多方法,在這我還是先把工具類代碼粘上,就不作多的解釋啦
public class DataBasehelper extends OrmLiteSqliteOpenHelper {
private static DataBasehelper db;
public DataBasehelper(Context context) {
super(context, "fwsssssss", null, 8);
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource) {
try {
TableUtils.createTable(connectionSource , Om_Em.class);
} catch (SQLException e) {
e.printStackTrace();
}
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource, int i, int i1) {
try {
TableUtils.dropTable(connectionSource , Om_Em.class , true);
onCreate(sqLiteDatabase , connectionSource);
} catch (SQLException e) {
e.printStackTrace();
}
}
public static synchronized DataBasehelper getInstance(Context context){
if(db == null){
db = new DataBasehelper(context);
}
return db;
}
}
然後就是實體類
@DatabaseTable(tableName = "Luck")
public class Om_Em {
@DatabaseField(generatedId = true)
int id;
@DatabaseField
String name;
@DatabaseField
int count;
@DatabaseField
int scort;
@DatabaseField
int money;
public Om_Em(String name, int count, int scort, int money) {
this.name = name;
this.count = count;
this.scort = scort;
this.money = money;
}
public Om_Em() {
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
public int getScort() {
return scort;
}
public void setScort(int scort) {
this.scort = scort;
}
public int getMoney() {
return money;
}
public void setMoney(int money) {
this.money = money;
}
}
然後就是Dao模式了
public class Om_Daos {
Context context;
public Om_Daos(Context context) {
this.context = context;
}
public DataBasehelper getHelper(){
return DataBasehelper.getInstance(context);
}
public Dao<Om_Em , Integer> getDao() throws SQLException {
return getHelper().getDao(Om_Em.class);
}
public Dao.CreateOrUpdateStatus Update(Om_Em om_em) throws SQLException {
return getDao().createOrUpdate(om_em);
}
}
佈局XML代碼如下
<include
android:id="@+id/list_tab_toolbar"
layout="@layout/toolbar_main"/>
<TextView
android:id="@+id/textView5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginStart="196dp"
android:layout_marginLeft="196dp"
android:layout_marginTop="139dp"
android:text="車輛違章居民身份信息查詢"
android:textColor="#000"
android:textSize="30dp" />
<TextView
android:id="@+id/textView6"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginStart="228dp"
android:layout_marginLeft="228dp"
android:layout_marginTop="222dp"
android:text="車牌號"
android:textSize="20dp" />
<EditText
android:id="@+id/sm_4_edit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginStart="326dp"
android:layout_marginLeft="326dp"
android:layout_marginTop="212dp"
android:digits="ABCDabcd0123456789"
android:ems="10"
android:inputType="text" />
<Button
android:id="@+id/sm_4_seach"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_marginTop="209dp"
android:layout_marginEnd="286dp"
android:layout_marginRight="286dp"
android:text="查詢" />
這裏是編輯框的判斷邏輯,很簡單,就不多說了
public class Smart4 extends BaseActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
InitView();
}
private void InitView() {
initToolBar(findViewById(R.id.toolbar), true, getString(R.string.item1));
daos = new Om_Daos(getApplicationContext());
requestQueue = Volley.newRequestQueue(getApplicationContext());
sm_4_seach = findViewById(R.id.sm_4_seach);
sm_4_edit = findViewById(R.id.sm_4_edit);
sm_4_seach.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String s = sm_4_edit.getText().toString().trim();
if("".equals(s)){
Toast.makeText(Smart4.this, "不能爲空!", Toast.LENGTH_SHORT).show();
}else{
InitData(s);
}
}
});
}
}
private void InitData(String carnumber){
....
JsonObjectRequest jor = new JsonObjectRequest(url, job, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject jsonObject) {
Toast.makeText(Smart4.this, "查詢成功!", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(Smart4.this, Smart4_watch.class);
intent.putExtra("carnumber",job.optString("carnumber"));
startActivity(intent);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
Toast.makeText(Smart4.this, "未查詢到"+job.optString("carnumber")+"信息", Toast.LENGTH_SHORT).show();
}
});
requestQueue.add(jor);
}
首先我需要定義一個棋子
private boolean isInsert = true;
其次,執行數據庫的查詢操作
使用queryForAll()方法查詢list集合
String s = getIntent().getStringExtra("carnumber");
Om_Daos = new Om_Daos(getApplicationContext());
om_ems = Om_Daos.getDao().queryForAll();//查詢操作
查詢返回的是一個list集合,然後遍歷集合中的元素,並且尋找是否重複查找數據
if(om_ems.size() != 0){
for (int i = 0; i < om_ems.size(); i++) {
if(om_ems.get(i).getName().equals(s)){
isInsert = false;
break;
}
}
}else{
//執行插入語句,因爲後面用到更新,所以在這裏我先給這條數據其他成員都設爲0
Om_Daos.getDao().create(new Om_Em(s,0,0,0));
isInsert = false;
}
使用create()方法插入一個實體類
if(isInsert){
Om_Daos.getDao().create(new Om_Em(s,0,0,0));
}
//重新查詢list集合
om_ems = Om_Daos.getDao().queryForAll();
注意,在執行插入語句之後,記得重新查詢一次list ,然後這裏省略根據JSON數據查詢的實體類信息,因爲是側重點,所以就不提起了,之後,自定義左右兩個適配器,用來展示不重複的歷史記錄信息
class MyLeftAdapter extends BaseAdapter{
@Override
public int getCount() {
return om_ems.size();
}
@Override
public Object getItem(int i) {
return null;
}
@Override
public long getItemId(int i) {
return 0;
}
@Override
public View getView(int position, View context, ViewGroup viewGroup) {
if(context == null){
context = getLayoutInflater().inflate(R.layout.sm_4_left , null);
}
return context;
}
}
class MyRightAdapter extends BaseAdapter{
@Override
public int getCount() {
return right_adapter.getROWS_DETAIL().size();
}
@Override
public Object getItem(int i) {
return null;
}
@Override
public long getItemId(int i) {
return 0;
}
@Override
public View getView(int position, View context, ViewGroup viewGroup) {
if(context == null){
context = getLayoutInflater().inflate(R.layout.sm_4_right , null);
}
return context;
}
}
給兩個適配器設置監聽事件
sm_4_right.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
}
});
sm_4_left.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
}
});
右邊的適配器點擊進入另外一個界面,查看詳情,實現查看放大縮小的功能,這裏只展示手勢的核心代碼
public class Smart4_Guet extends android.support.v7.widget.AppCompatImageView implements ScaleGestureDetector.OnScaleGestureListener {
private ScaleGestureDetector scaleGestureDetector;
private Matrix matrix;
boolean first = true;
public Smart4_Guet(Context context) {
super(context);
initView(context);
}
public Smart4_Guet(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
initView(context);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if (first){
first = false;
matrix.reset();
matrix.postTranslate(getWidth()/2,getHeight()/2);
setImageMatrix(matrix);
}
}
private void initView(Context context) {
setScaleType(ScaleType.MATRIX);
scaleGestureDetector = new ScaleGestureDetector(context,this);
matrix = new Matrix();
setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
scaleGestureDetector.onTouchEvent(event);
return true;
}
});
}
@Override
public boolean onScale(ScaleGestureDetector detector) {
float scaleFactor = detector.getScaleFactor();
function(){ //隔夜利息 http://www.fx61.com/faq/muniu/414.html
matrix.postScale(scaleFactor,scaleFactor,getWidth()/2,getHeight()/2);
setImageMatrix(matrix);
return true;
}
現在重點來說查找的功能和更新的功能
try {
//動態查找id
int id = 0 , money = 0;
//查詢list集合
List<Om_Em> om_emsS = Om_Daos.getDao().queryForAll();
//這裏查找ID的條件我就以名字爲例name 是 輸入框中傳來的
for (int i = 0; i < om_emsS.size(); i++) {
if(om_emsS.get(i).getName().equals(name)){
id = om_emsS.get(i).getId();
break;
}
}
使用queryForId()方法,根據ID查詢實體類
Om_Em om_em = Om_Daos.getDao().queryForId(id);
//向實體類設置一些屬性
....
//執行更新方法
om_em.setCount(11);
Om_Daos.Update(om_em);
//重新查詢list 然後設置給適配器
om_ems = Om_Daos.getDao().queryForAll();