增加改查——android數據庫篇二

大家好,昨天晚上發佈了數據庫SQLITE第一篇,今天早上到現在爲止,上班也沒有什麼心思(主要是過年了,大家都是這樣子,人嘛總在公司總像一個樣子),所以我從早上到現在一直在寫ANDROID,現在是數據庫篇二。感覺一個字"累"!

對了,還有一件事,版主和我講,用JAVA的HIBERNATE反射機制,能不能生成增加改查方法。我還在查看資料。估計能的話,我會在年後寫出來。不行我也沒辦法。起碼努力了就行。對吧。,感謝大家。

 

 

讓我們看一下圖,希望大家喜歡!

 

 

讓我們看這裏面所寫的部份代碼。

下面我們來看一下代碼的實現業務方法。

package com.smart;


import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;

public class SqliteHelper extends SQLiteOpenHelper {

 public static final String TB_NAME = "llb";
//構造方法
 public SqliteHelper(Context context, String name, CursorFactory factory,
   int version) {
  
  super(context, name, null, 1);
 }
 
 /**
  * 創建新數據庫表
  */
 @Override
 public void onCreate(SQLiteDatabase db) {
  db.execSQL("CREATE TABLE IF NOT EXISTS " +
    TB_NAME + "(" +
    Bean.ID + " integer primary key," +
    Bean.CITY + " varchar(10)," +
    Bean.CODE + " varcher(20)"+
    ")");
 }
 
 /**
  * 當檢測與前一次創建數據庫版本不一樣時,先刪除表再創建新表
  */
 @Override
 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
  db.execSQL("DROP TABLE IF EXISTS " + TB_NAME);
  onCreate(db);
 }
 
 /**
  * 變更列名
  * @param db
  * @param oldColumn
  * @param newColumn
  * @param typeColumn
  */
 public void updateColumn(SQLiteDatabase db, String oldColumn, String newColumn, String typeColumn){
  try{
   db.execSQL("ALTER TABLE " +
     TB_NAME + " CHANGE " +
     oldColumn + " "+ newColumn +
     " " + typeColumn
   );
  }catch(Exception e){
   e.printStackTrace();
  }
 }


}
 

BEAN類

package com.smart;


public class Bean {
 public static final String ID = "_id";
 public static final String CITY = "city";
 public static final String CODE = "code";
 
 private String id;
 private String city;
 private String code;
 
 public String getId() {
  return id;
 }
 public void setId(String id) {
  this.id = id;
 }
 public String getCity() {
  return city;
 }
 public void setCity(String city) {
  this.city = city;
 }
 public String getCode() {
  return code;
 }
 public void setCode(String code) {
  this.code = code;
 }

}
 

Activity類

package com.smart;

 

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

import android.app.Activity;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;

/**
 * 本例實現SQLite數據庫增加、刪除、修改、模糊查詢操作。這裏不是最好的實現方法,
 * *  
 *  [email protected] 
 */
public class Main extends Activity {
 private static String DB_NAME = "smart.db";
 private static int DB_VERSION = 1;
 private static int POSTION;
 private ListView listview;
 private Cursor cursor;
 private SQLiteDatabase db;
 private SqliteHelper dbHelper;
 private ListAdapter listAdapter;
 
 private EditText etCity;
 private EditText etCode;
 private Button bt_add;
 private Button bt_modify;
 private Button bt_query;
 
 private List<Bean> cityList = new ArrayList<Bean>();
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.main);
     
     etCity = (EditText) findViewById(R.id.etCity);
     etCode = (EditText) findViewById(R.id.etCode);
     bt_add = (Button) findViewById(R.id.bt_add);
     bt_modify = (Button) findViewById(R.id.bt_modify);
     bt_query = (Button) findViewById(R.id.bt_query);
     
     try{
      /* 初始化並創建數據庫 */
      dbHelper = new SqliteHelper(this, DB_NAME, null, DB_VERSION);
      /* 創建表 */
      db = dbHelper.getWritableDatabase(); //調用SQLiteHelper.OnCreate()         
         /* 查詢表,得到cursor對象 */
         cursor = db.query(SqliteHelper.TB_NAME, null, null, null, null, null, Bean.CODE + " DESC");
         cursor.moveToFirst();
         while(!cursor.isAfterLast() && (cursor.getString(1) != null)){   
          Bean city = new Bean();
          city.setId(cursor.getString(0));
          city.setCity(cursor.getString(1));
          city.setCode(cursor.getString(2));
          cityList.add(city);
          cursor.moveToNext();
          //得到數據。
         }
     }catch(IllegalArgumentException e){
      //當用SimpleCursorAdapter裝載數據時,表ID列必須是_id,否則報錯column '_id' does not exist
      e.printStackTrace();
      //當版本變更時會調用SQLiteHelper.onUpgrade()方法重建表 注:表以前數據將丟失
      ++ DB_VERSION;
      dbHelper.onUpgrade(db, --DB_VERSION, DB_VERSION);
//      dbHelper.updateColumn(db, SQLiteHelper.ID, "_"+SQLiteHelper.ID, "integer");
     }
     listview = (ListView)findViewById(R.id.listView);
     listAdapter = new ListAdapter();
     listview.setAdapter(listAdapter);
     listview.setOnItemClickListener(new ListView.OnItemClickListener(){
   @Override
   public void onItemClick(AdapterView<?> parent, View view, int postion,
     long arg3) {
    setSelectedValues(postion);
   }      
     });
     
     /* 插入表數據並ListView顯示更新 */
     bt_add.setOnClickListener(new Button.OnClickListener(){
   @Override
   public void onClick(View arg0) {
    if(etCity.getText().length() > 1 && etCode.getText().length() >1){
     ContentValues values = new ContentValues();
     values.put(Bean.CITY, etCity.getText().toString().trim());
     values.put(Bean.CODE, etCode.getText().toString().trim());
     //插入數據 用ContentValues對象也即HashMap操作,並返回ID號
     Long cityID = db.insert(SqliteHelper.TB_NAME, Bean.ID, values);
     Bean city = new Bean();
     city.setId(""+cityID);
           city.setCity(etCity.getText().toString().trim());
           city.setCode(etCode.getText().toString().trim());
           cityList.add(city);
           listview.setAdapter(new ListAdapter());
           resetForm();
    }
   }
  });
     
     /* 查詢表,模糊條件查詢 */
     bt_query.setOnClickListener(new Button.OnClickListener(){
      @Override
      public void onClick(View view) {
       cityList.removeAll(cityList);
       String sql = null;
       String sqlCity = etCity.getText().length() > 0 ? Bean.CITY + " like '%" + etCity.getText().toString().trim() + "%'" : "";       
       String sqlCode = etCode.getText().length() > 0 ? Bean.CITY + " like '%" + etCity.getText().toString().trim() + "%'" : "";
       if( (!"".equals(sqlCity)) && (!"".equals(sqlCode)) ){
        sql = sqlCity + " and" + sqlCode;
       }else if(!"".equals(sqlCity)){
        sql = sqlCity;
       }else if(!"".equals(sqlCode)){
        sql = sqlCode;
       }
       cursor = db.query(true, SqliteHelper.TB_NAME,
         new String[]{Bean.ID, Bean.CITY, Bean.CODE},
         sql,
         null, null, null, null, null);
       cursor.moveToFirst();
       while(!cursor.isAfterLast() && (cursor.getString(1) != null)){ 
        Bean city = new Bean();
              city.setId(cursor.getString(0));
              city.setCity(cursor.getString(1));
              city.setCode(cursor.getString(2));
              cityList.add(city);
        cursor.moveToNext();
       }
       listview.setAdapter(new ListAdapter());
       resetForm();
      }
     });
     
     /* 修改表數據 */
     bt_modify.setOnClickListener(new Button.OnClickListener(){
   @Override
   public void onClick(View arg0) {
    ContentValues values = new ContentValues();
    values.put(Bean.CITY, etCity.getText().toString().trim());
    values.put(Bean.CODE, etCode.getText().toString().trim());
    db.update(SqliteHelper.TB_NAME, values, Bean.ID + "=" + cityList.get(POSTION).getId(), null);
    cityList.get(POSTION).setCity(etCity.getText().toString().trim());
    cityList.get(POSTION).setCode(etCode.getText().toString().trim());
    listview.setAdapter(new ListAdapter());
    resetForm();
   }
  });
    }
   
    /* 設置選中ListView的值 */
    public void setSelectedValues(int postion){
     POSTION = postion;
  etCity.setText(cityList.get(postion).getCity());
  etCode.setText(cityList.get(postion).getCode());
    }
   
    /* 重值form */
    public void resetForm(){
  etCity.setText("");
  etCode.setText("");
    }
   
    @Override
    protected void onDestroy() {
     db.delete(SqliteHelper.TB_NAME, null, null);
     super.onDestroy();
    }
   
    private class ListAdapter extends BaseAdapter{
     public ListAdapter(){
      super();
     }
  @Override
  public int getCount() {
   // TODO Auto-generated method stub
   return cityList.size();
  }

  @Override
  public Object getItem(int postion) {
   // TODO Auto-generated method stub
   return postion;
  }

  @Override
  public long getItemId(int postion) {
   // TODO Auto-generated method stub
   return postion;
  }

  @Override
  public View getView(final int postion, View view, ViewGroup parent) {
   view = getLayoutInflater().inflate(R.layout.listview, null);
   TextView tv = (TextView) view.findViewById(R.id.tvCity);
   tv.setText("" + cityList.get(postion).getCity());
   TextView bu = (TextView) view.findViewById(R.id.btRemove);
   bu.setText(R.string.delete);
   bu.setId(Integer.parseInt(cityList.get(postion).getId()));
   
   /* 刪除表數據 */
   bu.setOnClickListener(new Button.OnClickListener(){
    @Override
    public void onClick(View view) {
     try{
      db.delete(SqliteHelper.TB_NAME, Bean.ID + "=" + view.getId(), null);
      cityList.remove(postion);
      listview.setAdapter(new ListAdapter());      
     }catch(Exception e){
      e.printStackTrace();
     }
    }
   });
   return view;
   //返回
  }
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章