[Android開發學習] day04

Day 04


SQLite:把結構化的數據保存在私有數據庫中。

 

數據庫的增刪改查


創建數據庫

在model包:DBHelper.java文件中,

public class DBHelper extends SQLiteOpenHelper{

 

}

 

修改構造方法DBHelper

public DBHelper(Contextcontext) {

         super(context, DBNAME, null, 1);

                }

 

在oncreate方法中創建數據庫

onCreate(SQLiteDatabase db)————創建表格語句

String sqlStr="create table "+TABNAME+"(" +

                "id integer primary key autoincrement," +

                "name varchar(20),"+

                "cuisine varchar(20),"+

                "picPath varchar(80),"+

                "material varchar(20),"+

                "ingredient varchar(20),"+

                "cookingStep varchar(20),"+

                "audioPath varchar(80),"+

                "videoPath varchar(80))";

         db.execSQL(sqlStr);

 

SQLite數據庫的生成目錄:data——data——應用程序包—databases目錄-XXX.db文件

 

插入數據

1. 創建進行數據處理的XXXDao.java文件。

2. 添加成員變量:

private FoodHelper helper;

   private Context context;

3. 重寫構造函數(source——>generate constructor using field)

勾選context,不用勾選helper

4. 添加代碼:

public FoodDao(Context context) {

      super();

      this.context = context;

      helper=new FoodHelper(context);

   }

  

5. 創建私有成員變量

private SQLiteDatabase db;

6. 編寫打開數據庫的方法openDB()

//打開數據庫,並獲得數據庫對象

   public void openDB(){

      db=helper.getWritableDatabase();

   }

7. 編寫關閉數據庫的方法closeDB()

//關閉數據庫

public void closeDB(){

       if(db!=null){

          db.close();

       }

}

8. 數據庫插入數據方法add()

public void add(){

      //openDb

      openDB();

      //創建一個contentvalues————>是一個map集合

      ContentValuesvalue=newContentValues();

      //主鍵自增,不需要賦任何值。

      //主鍵autoincrement:用putnull即可

         value.putNull("id");

      value.put("name", "水煮肉片");

  

      //插入數據的方法

      db.insert("food2", null, value);

     

      //closeDB

      closeDB();

   }

 

 

注意:插入數據的apicontentValues:內容值:一個集合。用put方法插入。

Public void insertDB(Music music){

    ContentValues  values = new ContentValues();

    values.put(FIELD_ID, music.getId());

    values.put(FIELD_NAME,music.getName());

    values.put(FIELD_PLAYER, music.getPlayer());

    values.put(FIELD_PATH, music.getFilepath());

   

  database.insert(TABLE_NAME, null, values);

}

 

 

 

查詢方法query

複雜。

Query方法

public Cursor query (String table, String[] columns, String selection,String[] selectionArgs, String groupBy, String having, String orderBy)

 

table:要查詢的數據庫表名

columns指定查詢所要返回的

selection指定查詢的條件,對應於SQL WHERE子句

selectionArgs:與selection配套,指定查詢條件中參數的值

groupBy:對應於SQLGROUPBY子句——分組查詢

having:對應於SQL HAVING子句——聚合語句查詢

orderBy:對應於SQLORDERBY子句——排序

 

limit:對應於SQLLIMIT子句

distinct:對應於SQLDISTINCT子句

 

返回值:代表結果集的Cursor對象

 

查詢全部數據:只需要給query方法傳table一個參數即可。

 

 

步驟:

1. 在XXXDao.java中添加select方法

public void selectedAll(){

2. 添加打開和關閉數據庫的方法

openDB();

closeDB();

3. 查詢語句:

Cursor c=db.query("food2", null, null, null, null, null, null);

4. 添加代碼:

if(c!=null){

             while (c.moveToNext()) {

             }

          }

5. 在while循環中添加

while (c.moveToNext()) {

      intid=c.getInt(c.getColumnIndex("id"));

     String name=c.getString(c.getColumnIndex("name"));

        System.out.println(id+"---"+name);

   

}

6. 在XXXactivity.java文件中添加

        dao.selectedAll();

 

 

找不到adb時,在ddms模式下,找到adb頁面,resetadb

 

 

根據條件查詢

//根據條件查詢——>name

1.  創建方法:selectedByName

2.  添加開關數據庫的代碼:

openDB();

closeDB();

 

3.  編寫sql語句

注意添加單引號!!!!!!

String sql="name like'%"+name+"%'";

4.  創建cursor

Cursor c=db.query("food2", null, sql, null, null, null, null);

5.  添加循環

   if(c!=null){

      while (c.moveToNext()) {

         int id=c.getInt(c.getColumnIndex("id"));

Stringname1=c.getString(c.getColumnIndex("name"));

         System.out.println(id+"---"+name1);

                     

       }

   }

     

6.  在XXXactivity.java文件中添加

dao.selectedByName("");

 

編輯框監聽

1. 在activityXXX.xml中添加editText組件

2. 在XXXActivity.java文件中添加成員變量

private EditText mEdtx;

private String name;

3. 在XXXActivity.java文件中找到這個editText

mEdtx=(EditText)findViewById(R.id.edtx);  

4. 添加方法mEdtx.addTextChangedListener(){}

5. 在括號中填入new TextWatcher(),會自動生成三個函數

6.  public void onTextChanged(CharSequence s, int start, int before, int count) 添加代碼:

Toast.makeText(MainActivity.this,s,Toast.LENGTH_SHORT).show();

   int length=s.length();————輸入字符串的長度

         if(length<1){——爲空則不操作

            return;

         }

         name=s.toString();

         dao.selectedByName(name);

 


列表——listview組件(縱向列表組件)

 

Listview在Layout的composite中

 

只顯示文本

只顯示圖片加文本

 

ListView的創建和使用步驟

1. 在activityXXX.xml中拖入一個listview組件

2. 在XXXActivity.java文件中準備數據源

private String [] arr={"川菜","魯菜","粵菜","湘菜","花菜"};

3. 聲明listview

private ListView mLv;

4. 初始化listview

mLv=(ListView)findViewById(R.id.listView1);

5. 聲明適配器

ArrayAdapter<String> adapter =newArrayAdapter<String>(this, android.R.layout.simple_list_item_1, arr);

6. 給適配器綁定數據源

mLv.setAdapter(adapter);

 

 

 

顯示圖片加文本的ListView--->縱向列表

listview匹配適配器步驟:

1.  在layout文件夾下創建list_item.xml文件

2.  在list_item.xml文件編輯下拉菜單每一行的顯示佈局

<ImageView

        android:id="@+id/img"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:src="@drawable/ic_launcher"/>

 

    <TextView

        android:id="@+id/tv"

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:text="TextView"/>

 

3.  在要顯示下拉菜單的XXXActivity.java文件中聲明一個listview

private ListView mLv;

4.  在XXXActivity.java文件OnCreate方法中初始化listview

mLv=(ListView)findViewById(R.id.listView1);

5.  創建一個simpleAdapter:

SimpleAdapter adapter2=new SimpleAdapter(context,data,resource,from,to);

 

參數解釋:

Context:綁定的activity.this

Data:數據源map:存放的數據

Resource:佈局文件————自己做(見第一步)R.layout.list_item

From:map集合所有key——string  

To:你自己佈局的所有組件的id——int 數組

 

6.  創建simpleadapter需要的參數變量XXXActivity的成員變量

private String[] from = {"img","tv"};

private int[] to ={R.id.img,R.id.tv};

//放所有自定義的組件的id

private List<Map<String,Object>> data= new ArrayList<Map<String,Object>>();

7.  數據源初始化

注意:以下代碼要放在第五步創建的SimpleAdapter之前!!!

//數據源初始化,一個map就是一小個選項裏裝配的所有數據

for(int i=0;i<arr.length;i++){

    Map<String,Object> map=newTreeMap<String, Object>();

    map.put("img", R.drawable.ic_launcher);

    map.put("tv", arr[i]);

    //private String [] arr={"川菜","魯菜","粵菜","湘菜","花菜"};

    data.add(map);

}    

8.  給listview配置適配器   

mLv.setAdapter(adapter2);

 

 

 

 

F2————重命名文件

 

規範化代碼實例:

數據庫操作實例

1.  在要進行數據庫操作的XXXActivity.java文件中添加私有變量

   //準備菜系

   private String[] cuisine={"川菜","魯菜","粵菜","蘇菜","浙菜","湘菜","閩菜","徽菜","其它"};

  

   //聲明組件

   private AutoCompleteTextView mAuTx;

   private ImageButton mVideo,mPhoto,mSave,mCuisine_btn;

   private EditText mName,mCuisine,mMaterial,mIngredient,mStep;//創建Dao對象

   private Dao dao;

 

2.  在OnCreate方法中實例化dao對象

         //一定要記得實例化dao!!!!!!!!!!

      dao=newDao(this);

 

3.  在OnCreate方法中初始化組件

   //初始化組件

   mAuTx=(AutoCompleteTextView)findViewById(R.id.add_cuisine);  

   mVideo=(ImageButton)findViewById(R.id.imageButton3);

   mPhoto=(ImageButton)findViewById(R.id.imageButton4);

   mSave=(ImageButton)findViewById(R.id.add_save_btn);

   mCuisine_btn=(ImageButton)findViewById(R.id.add_cuisine_btn);   

   mName=(EditText)findViewById(R.id.add_name);     

   mMaterial=(EditText) findViewById(R.id.add_material);

   mIngredient=(EditText) findViewById(R.id.add_ingredient);   

   mStep=(EditText) findViewById(R.id.add_cookingstep); 

   mCuisine=(EditText) findViewById(R.id.add_cuisine);

 

4.  在OnCreate方法中創建數組適配器

      //創建數組適配器

      ArrayAdapter<String> adapter1=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,cuisine);

5.  在OnCreate方法中綁定適配器

//綁定適配器

      mAuTx.setAdapter(adapter1);

6.  在OnCreate方法中,給button綁定點擊事件處理

     //給菜系添加button綁定點擊事件處理

      mCuisine_btn.setOnClickListener(new OnClickListener() {

        

         @Override

         public void onClick(View arg0) {

            mAuTx.showDropDown();

           

          }

        });

 

7.  給保存button保定單擊處理事件setOnClickListener

//給保存Button綁定點擊處理事件   

mSave.setOnClickListener(new OnClickListener() {

      @Override

      public void onClick(Viewarg0) {

            //非空驗證

         Stringname=mName.getText().toString();

         Stringcuisine=mCuisine.getText().toString();

         Stringmaterial=mMaterial.getText().toString();

         Stringingredient=mIngredient.getText().toString();

         Stringcookingstep=mStep.getText().toString();

 

          Foodf= new Food(name, cuisine, materialingredient, " ", cookingstep, " ", " ");

          dao.add(f);

           

      }

 });


8.  從組件獲取組件攜帶的文本

.getText().toString();

例如代碼:

在OnClickListener方法中的onClick方法中:

Stringname=mName.getText().toString();

         Stringcuisine=mCuisine.getText().toString();

         Stringmaterial=mMaterial.getText().toString();

         Stringingredient=mIngredient.getText().toString();

         Stringcookingstep=mStep.getText().toString();

 

9.  創建一個數據模型對象Food.java(model層),並將其數據實體類封裝,

     參見下一個大標題“Javabean 實體類的封裝

 

10. 創建一個food對象,傳入對應的參數。

在OnClickListener方法中的onClick方法中

        Food f= new Food(name, cuisine, material,ingredient, "",cookingstep, "", " ");

 

11. 調用dao.java數據庫操作類中的add插入一條記錄方法add

//將f這條記錄插入

     dao.add(f);

 

 

解釋說明:model

DBHelper.java————>鏈接SQLite數據庫並創建表對象

Dao.java——————>數據庫操作方法增刪改查方法

Food.java————>存放數據模型的數據(結構)類

 

 

Javabean 實體類的封裝

1.  在model層創建一個類:food.java

2.  創建私有成員變量

private int id;

private String name;

private String cuisine;

private String material;

private String ingredient;

private String picpath;

private String cookingstep;

private String vediopath;

3.  Source->Generate setters and getters->全選->ok

4.  Source->Generate Construtor using field->全選(除id->ok

public food(String name, String cuisine, String material,Stringingredient, String picpath, String cookingstep,

            Stringvediopath, String audiopath) {

    super();

    this.name = name;

   this.cuisine = cuisine;

   this.material = material;

    this.ingredient = ingredient;

    this.picpath = picpath;

    this.cookingstep = cookingstep;

    this.vediopath = vediopath;

    this.audiopath = audiopath;

}

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