zoukankan      html  css  js  c++  java
  • Android基础3

      目录:

            1、在命令行中使用sqlite工具

            2、sqlite数据库的另一种增删改查

            3、sqlite中的事务处理

            4、ListView的用法(充气泵LayoutInflater的用法)

            5、simpleAdapter的用法

      一、在命令行中使用sqlite工具

          1 cmd adb shell 首先挂载到linux

          2 cd data/data/com.android.contacts.provider

          3 cd databases

          4 sqlite3 contacts 打开数据库 eg: sqlite3 contacts.db

          5 .tables 查看所有的表 eg: .table

          6 .schema 查看所有的创建表、视图的语句 eg: .schema

          7 .help 查看帮助 eg: .help

          8 .header(s) NO |OFF是否显示列头信息 eg: headers ON

          9 .mode MODE ?table? 指定数据显示风格 eg: .mode column

          10 .nullValue NULL空值数据显示问题 eg: .nullValue NULL

          案例:

          

      二、sqlite的另一种增删改查

          1、自定义的数据库帮助类:MyDataBaseOpenHelper

     1 package cn.tangjie.database;
     2 
     3 import android.content.Context;
     4 import android.database.sqlite.SQLiteDatabase;
     5 import android.database.sqlite.SQLiteOpenHelper;
     6 
     7 public class MyDataBaseOpenHelper extends SQLiteOpenHelper{
     8     private final static String name = "soyoung.db";
     9     private final static int version = 1;
    10 
    11     public MyDataBaseOpenHelper(Context context) {
    12         super(context, name, null, version);
    13     }
    14 
    15     @Override
    16     public void onCreate(SQLiteDatabase db) {
    17          // db.execSQL("CREATE TABLE IF NOT EXISTS person (name varchar(20) primary key, phone varchar(20)");
    18         db.execSQL("CREATE TABLE IF NOT EXISTS person (personid integer primary key autoincrement, name varchar(20), age INTEGER)");
    19         System.out.println("表创建成功!");
    20     }
    21 
    22     @Override
    23     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    24         db.execSQL("ALTER TABLE person ADD phone varchar(20) NULL");
    25 
    26     }
    27 }

      2、创建好数据库之后进行单元测试,判断数据库和表结构是否创建成功

    1     public void test(){
    2         
    3         new MyDataBaseOpenHelper(getContext()).getReadableDatabase();
    4     }

      提示:如果报一下的错误,基本上是由于创建表中的sql语句有错误

    android.database.sqlite.SQLiteException: Can't upgrade read-only database from version 0 to 1: /data/data/com。。。。

      3、编写数据库的操作类 完成数据库的增删改查:

     1 package cn.tangjie.database.dao;
     2 
     3 import cn.tangjie.database.MyDataBaseOpenHelper;
     4 import android.content.ContentValues;
     5 import android.content.Context;
     6 import android.database.Cursor;
     7 import android.database.sqlite.SQLiteDatabase;
     8 
     9 public class MyDatabase {
    10     private MyDataBaseOpenHelper helper;
    11 
    12     public MyDatabase(Context context) {
    13         this.helper = new MyDataBaseOpenHelper(context);
    14     }
    15 
    16     public void add(String name, int age) {
    17         if (find(name)) {
    18             return;
    19         }
    20         SQLiteDatabase db = helper.getReadableDatabase();
    21         ContentValues values = new ContentValues();
    22         values.put("name", name);
    23         values.put("age", age);
    24         db.insert("person", null, values);
    25     }
    26 
    27     public boolean find(String name) {
    28         SQLiteDatabase db = helper.getReadableDatabase();
    29         Cursor cusor = db.query("person", null, "name=?",
    30                 new String[] { name }, null, null, null);
    31         if (cusor.moveToFirst()) {
    32             return true;
    33         }
    34         return false;
    35     }
    36 }

      

      三、sqlite中的事务处理

           beginTransaction:启动事务

           endTransaction:停止事务

           setTransactionSuccessful:设置事务的标志为成功则提交事务,如果没有调用setTransactionSuccessful() 方法则回滚事务

           代码如下:

     1 SQLiteDatabase db = ....;
     2 db.beginTransaction();//开始事务
     3 try {
     4     db.execSQL("insert into person(name, age) values(?,?)", new Object[]{"tangjie", 4});
     5     db.execSQL("update person set name=? where personid=?", new Object[]{"wangzhen", 1});
     6     db.setTransactionSuccessful();//调用此方法会在执行到endTransaction() 时提交当前事务,如果不调用此方法会回滚事务
     7 } finally {
     8     db.endTransaction();//由事务的标志决定是提交事务,还是回滚事务
     9 } 
    10 db.close(); 

       四、ListView的用法

            1、直接通过案例来看:使用LayoutInflater自定义listView的使用:

            第一步:编写items.xml文件:在xml文件中用两个文本组件来存放listView每个列表中的数据

     1  <TextView
     2         android:id="@+id/lv_name"
     3         android:layout_width="wrap_content"
     4         android:layout_height="wrap_content"
     5         android:text="@string/lv_name" />
     6 
     7     <TextView
     8         android:id="@+id/lv_tel"
     9         android:layout_width="wrap_content"
    10         android:layout_height="wrap_content"
    11         android:text="@string/lv_tel" />

           第二步:从数据库中取出数据,用于准备设置到listView中,这步类似于上面的crud操作,再次省略。

           第三步:Activity中的代码:设置listview的适配器,通过LayoutInflater充气泵将信息设置到items对应的组件上。

                     MyAdapter中的getCount方法决定listView的行数,决定着调用多少次getView方法的调用次数、getView方法不断地将组件设置到listview中 

    
    
     1 package com.lewu.listview;
     2 
     3 import java.util.List;
     4 
     5 import com.lewu.database.dao.MyDatabase;
     6 import com.lewu.domian.Person;
     7 
     8 import android.app.Activity;
     9 import android.os.Bundle;
    10 import android.view.LayoutInflater;
    11 import android.view.View;
    12 import android.view.ViewGroup;
    13 import android.widget.BaseAdapter;
    14 import android.widget.ImageView;
    15 import android.widget.ListView;
    16 import android.widget.TextView;
    17 
    18 public class ListviewActivity extends Activity {
    19 
    20     private ListView lv;
    21     private List<Person> persons;
    22     private LayoutInflater inflater;
    23     @Override
    24     public void onCreate(Bundle savedInstanceState) {
    25         super.onCreate(savedInstanceState);
    26         setContentView(R.layout.main);
    27         
    28         persons = new MyDatabase(this).findAll();
    29         
    30         System.out.println(persons.size());
    31 
    32         lv = (ListView) findViewById(R.id.lv);
    33         lv.setAdapter(new MyAdapter());
    34         
    35         inflater = (LayoutInflater) this.getSystemService(LAYOUT_INFLATER_SERVICE);
    36 
    37     }
    38 
    39     class MyAdapter extends BaseAdapter {
    40 
    41         @Override
    42         public int getCount() {
    43             return persons.size();
    44         }
    45 
    46         @Override
    47         public Object getItem(int position) {
    48 
    49             return null;
    50         }
    51 
    52         @Override
    53         public long getItemId(int position) {
    54             // TODO Auto-generated method stub
    55             return 0;
    56         }
    57 
    58         @Override
    59         public View getView(int position, View convertView, ViewGroup parent) {
    60             Person person = persons.get(position);
    61             View view = inflater.inflate(R.layout.items, null);
    62             TextView view1 = (TextView)view.findViewById(R.id.lv_name);
    63             TextView view2 = (TextView) view.findViewById(R.id.lv_tel);
    64             view1.setText(person.getName());
    65             view2.setText(person.getPhone());
    66             return view;
    67         }
    68 
    69     }
    70 }

    运行结果:
      
      

     五、simpleAdapter的用法

     1     public void onCreate(Bundle savedInstanceState) {
     2         super.onCreate(savedInstanceState);
     3         setContentView(R.layout.main);
     4 
     5         persons = new MyDatabase(this).findAll();
     6 
     7         System.out.println(persons.size());
     8 
     9         lv = (ListView) findViewById(R.id.lv);
    10 
    11         datas = new ArrayList<Map<String, String>>();
    12 
    13         for (Person p : persons) {
    14             Map<String, String> map = new HashMap<String, String>();
    15             map.put("name", p.getName());
    16             map.put("phone", p.getPhone());
    17             datas.add(map);
    18         }
    19 
    20         lv.setAdapter(new SimpleAdapter(this, datas, R.layout.items,
    25                 new String[] { "name", "phone" }, new int[] { R.id.lv_name,
    26                         R.id.lv_tel }));
    27 
    28     }

           

  • 相关阅读:
    win10 UWP button
    内网分享资源
    内网分享资源
    CF724F Uniformly Branched Trees
    win10 UWP FlipView
    win10 UWP FlipView
    win10 UWP FlipView
    搭建阿里云 centos mysql tomcat jdk
    搭建阿里云 centos mysql tomcat jdk
    win10 UWP 申请微软开发者
  • 原文地址:https://www.cnblogs.com/tagie/p/3063760.html
Copyright © 2011-2022 走看看