Android编程权威指南-----(三)SharedPreferences、SQLite使用

来源:互联网 发布:澳门网络博客游戏 编辑:程序博客网 时间:2024/04/30 05:33

1.SharedPreferences

存储,读取

 protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        //存储数据        setContentView(R.layout.activity_main);        SharedPreferences preferences =getSharedPreferences("user", Context.MODE_PRIVATE);        SharedPreferences.Editor editor = preferences.edit();        String name = "Recar";        String age = "21";        editor.putString("name",name);        editor.putString("age",age);        editor.commit();        //获取数据        SharedPreferences preferencesget =getSharedPreferences("user", Context.MODE_PRIVATE);        String nameget = preferencesget.getString("name","defaultname");        String ageget = preferencesget.getString("age","0");        System.out.println(nameget+"+"+ageget);

这里写图片描述

preferencesget.getString("name","defaultname");

中的第一个参数是存到的key。第二个是如果在SharedPreferences没有找到返回什么。

2.SQLite

SQLite是一种轻量级数据库系统

主要使用两个类
SQLiteOpenHelper
创建数据库,对数据库进行读取操作。打开数据库的回调函数,重要的关闭数据库

SQLiteDatabase
插入数据,删除,修改,查询。

一个例子参考
http://blog.csdn.net/jjaze3344/article/details/7249578
http://www.cnblogs.com/wenfei123chai/p/4270189.html

主要流程是写一个类继承SQLiteOpenHelper 用他可以创建数据库。创建表。

package com.example.administrator.sql2;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;import android.util.Log;/** * Created by Administrator on 2017/4/10. */public class DatabaseHelper extends SQLiteOpenHelper {    private static final int VERSION = 2;    private static final String Recar="Recar";    //三个不同参数的构造函数    //带全部参数的构造函数,此构造函数必不可少    public DatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory,                          int version) {        super(context, name, factory, version);    }    //带两个参数的构造函数,调用的其实是带三个参数的构造函数    public DatabaseHelper(Context context,String name){        this(context,name,VERSION);    }    //带三个参数的构造函数,调用的是带所有参数的构造函数    public DatabaseHelper(Context context,String name,int version){        this(context, name,null,version);    }    @Override    public void onCreate(SQLiteDatabase db) {        Log.i(Recar,"create a Database");        //创建数据库sql语句        String sql = "create table user(id int,name varchar(20))";        //执行创建数据库操作        db.execSQL(sql);    }    @Override    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {        Log.i(Recar,"update a Database");    }}

利用this来调用构造参数

第三个构造函数调用的是第一个全部参数的。第二个构造函数调用的是第三个三个参数的。
第二个最终是两个参数。用作初始化创建对象,会调用第三个,接着调用第一个构造函数。

布局文件

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"              android:layout_width="fill_parent"              android:layout_height="fill_parent"              android:orientation="vertical" >    <Button        android:id="@+id/createDatabase"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="@string/createDatabse"/>    <Button        android:id="@+id/updateDatabase"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="@string/updateDatabase"/>    <Button        android:id="@+id/insert"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="@string/insert"/>    <Button        android:id="@+id/update"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="@string/update"/>    <Button        android:id="@+id/query"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="@string/query"/>    <Button        android:id="@+id/delete"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="@string/delete"/></LinearLayout>

字符串资源文件

<resources>    <string name="createDatabse">createDatabse</string>    <string name="updateDatabase">updateDatabase</string>    <string name="insert">insert</string>    <string name="update">update</string>    <string name="query">query</string>    <string name="delete">delete</string>    <string name="app_name">sql2</string></resources>

activity

package com.example.administrator.sql2;import android.content.ContentValues;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.Button;public class MainActivity extends AppCompatActivity implements View.OnClickListener {    private final static String Recar="Recar";    Button createDatabase=null;    Button updateDatabase=null;    Button insert=null;    Button update=null;    Button query=null;    Button delete=null;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        findViews();    }    private void findViews() {        //根据控件ID得到控件        createDatabase = (Button) this.findViewById(R.id.createDatabase);        updateDatabase = (Button) this.findViewById(R.id.updateDatabase);        insert = (Button) this.findViewById(R.id.insert);        update = (Button) this.findViewById(R.id.update);        query = (Button) this.findViewById(R.id.query);        delete = (Button) this.findViewById(R.id.delete);        //添加监听器        createDatabase.setOnClickListener( this);        updateDatabase.setOnClickListener(this);        insert.setOnClickListener(this);        update.setOnClickListener(this);        query.setOnClickListener(this);        delete.setOnClickListener(this);    }    public void onClick(View v) {        //判断所触发的被监听控件,并执行命令        switch(v.getId()){            //创建数据库            case R.id.createDatabase:                //创建一个DatabaseHelper对象                DatabaseHelper dbHelper1 = new DatabaseHelper(MainActivity.this, "test_db");                //取得一个只读的数据库对象                SQLiteDatabase db1 = dbHelper1.getReadableDatabase();                break;            //更新数据库            case R.id.updateDatabase:                DatabaseHelper dbHelper2 = new DatabaseHelper(MainActivity.this, "test_db", 2);                SQLiteDatabase db2 = dbHelper2.getReadableDatabase();                break;            //插入数据            case R.id.insert:                //创建存放数据的ContentValues对象                ContentValues values = new ContentValues();                //像ContentValues中存放数据                values.put("id", 1);                values.put("name","zhangsan");                DatabaseHelper dbHelper3 = new DatabaseHelper(MainActivity.this, "test_db");                SQLiteDatabase db3 = dbHelper3.getWritableDatabase();                //数据库执行插入命令                db3.insert("user", null, values);                break;            //更新数据信息            case R.id.update:                DatabaseHelper dbHelper4 = new DatabaseHelper(MainActivity.this, "test_db");                SQLiteDatabase db4 = dbHelper4.getWritableDatabase();                ContentValues values2 = new ContentValues();                values2.put("name", "xiaosan");                db4.update("user", values2, "id=?", new String[]{"1"});                break;            //查询信息            case R.id.query:                DatabaseHelper dbHelper5 = new DatabaseHelper(MainActivity.this, "test_db");                SQLiteDatabase db5 = dbHelper5.getReadableDatabase();                //创建游标对象                Cursor cursor = db5.query("user", new String[]{"id","name"}, "id=?", new String[]{"1"}, null, null, null, null);                //利用游标遍历所有数据对象                while(cursor.moveToNext()){                    String name = cursor.getString(cursor.getColumnIndex("name"));                    //日志打印输出                    Log.i(Recar,"query-->"+name);                }                break;            //删除记录            case R.id.delete:                DatabaseHelper dbHelper6 = new DatabaseHelper(MainActivity.this,"test_db");                SQLiteDatabase db6 = dbHelper6.getWritableDatabase();                db6.delete("user", "id=?", new String[]{"1"});                break;            default:                Log.i(Recar,"error");                break;        }    }}

让activity实现了 View.OnClickListener
所以如此添加监听器 `

 //添加监听器        createDatabase.setOnClickListener( this);        updateDatabase.setOnClickListener(this);

然后只要当前activity被点击了就判断switch
利用 View.getId来获取点击的id然后进行对应操作

进行操作的话是先获取SQLiteDatabase

DatabaseHelper dbHelper= new DatabaseHelper(MainActivity.this, "test_db");SQLiteDatabase db = dbHelper.getWritableDatabase();

就可以用db来进行操作了。
对应的insert。update等

!注意query的参数和利用游标来获取

   Cursor cursor = db5.query("user", new String[]{"id","name"}, "id=?", new String[]{"1"}, null, null, null, null);                //利用游标遍历所有数据对象                while(cursor.moveToNext()){                    String name = cursor.getString(cursor.getColumnIndex("name"));                    //日志打印输出                    Log.i(Recar,"query-->"+name);                }

参数是第一个是表名,然后字符串数组!要创建个!然后是wherer条件加上问号。再然后是?是什么具体的参数。之后就是一些groupby oredrby的等条件。
不用就写null

所有的都是从日志打出

这里写图片描述

这里写图片描述

遇到了一些问题

用命令行查看 SQLite的时候显示ls: .: Permission denied
是因为权限不够。su 一下就好了。
这里写图片描述

这里写图片描述

一定要开启avd的时候才能进入查看。

ContentProvider不是很明白。。。继续学习。

0 0
原创粉丝点击