程序员人生 网站导航

[Android开发学习] day04

栏目:综合技术时间:2015-04-08 08:58:35

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();

      //创建1个contentvalues――――>是1个map集合

      ContentValuesvalue=newContentValues();

      //主键自增,不需要赋任何值。

      //主键autoincrement:用putnull便可

         value.putNull("id");

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

  

      //插入数据的方法

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

     

      //closeDB

      closeDB();

   }

 

 

注意:插入数据的apicontentValues:内容值:1个集合。用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方法传table1个参数便可。

 

 

步骤:

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(),会自动生成3个函数

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中拖入1个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文件中声明1个listview

private ListView mLv;

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

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

5.  创建1个simpleAdapter:

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

 

参数解释:

Context:绑定的activity.this

Data:数据源map:寄存的数据

Resource:布局文件――――自己做(见第1步)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.  数据源初始化

注意:以下代码要放在第5步创建的SimpleAdapter之前!!!

//数据源初始化,1个map就是1小个选项里装配的所有数据

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对象

         //1定要记得实例化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.  创建1个数据模型对象Food.java(model层),并将其数据实体类封装,

     参见下1个大标题“Javabean 实体类的封装

 

10. 创建1个food对象,传入对应的参数。

在OnClickListener方法中的onClick方法中

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

 

11. 调用dao.java数据库操作类中的add插入1条记录方法add

//将f这条记录插入

     dao.add(f);

 

 

解释说明:model

DBHelper.java――――>链接SQLite数据库并创建表对象

Dao.java――――――>数据库操作方法增删改查方法

Food.java――――>寄存数据模型的

------分隔线----------------------------
------分隔线----------------------------

最新技术推荐