SQLite 基础知识

  1. 创建SQLiteOpenHelper内部类
 //内部类继承  需要自己生成构造器
    class DBHelper extends SQLiteOpenHelper {
        //构造方法
        //name 数据库名
        //version 自己定义的数据库的版本号
        public DBHelper(String name, int version) {

            //需要调用父类的构造方法 写在第一行
            super(MainActivity.this, name, null, version);
        }

        //实现方法  是一个回调方法
        //在创建数据库时调用
        //什么时候创建数据库:连接数据库的时候,如果数据库文件不存在
        //只调用一次
        @Override
        public void onCreate(SQLiteDatabase db) {

            //1.创建数据库的语句
            //构造建表语句
//            创建一张表,表名为user
            String creaTTable = "create table user (_id integer PRIMARY KEY AUTOINCREMENT NOT NULL,name varchar,age int)";
            db.execSQL(creaTTable);
//
//            //2.初始化参数 ContentValues
//            ContentValues cv = new ContentValues();
//
//            cv.put("name", "tom");
//            cv.put("age", "20");
//            //返回id long型  如果不成功返回-1
//            //1-表名
//            //2-空列的默认值
//            //3-字段和值的key/value集合
//            Long l = db.insert("user", null, cv);
//            Toast.makeText(MainActivity.this, "id=" + l, Toast.LENGTH_LONG).show();

            //2.初始化数据

        }

        //升级数据库
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

        }
    }

(1)、添加数据

public void AddDataBase(View view){

//        DBHelper dh = new DBHelper("mes.db", 1);

        SQLiteDatabase sd = dbHelper.getWritableDatabase();

        ContentValues cv = new ContentValues();

        cv.put("name", "tom");
        cv.put("age", "20");
        //返回id long型  如果不成功返回-1
        //1-表名
        //2-空列的默认值
        //3-字段和值的key/value集合
        Long l = sd.insert("user", null, cv);
        Toast.makeText(MainActivity.this, "id=" + l, Toast.LENGTH_LONG).show();

        Cursor cursor = sd.query("user", new String[] { "_id",
                "name"}, null, null, null, null, null);
        // 将光标移动到下一行,从而判断该结果集是否还有下一条数据,如果有则返回true,没有则返回false
        while (cursor.moveToNext()) {
            String  id = cursor.getString(cursor.getColumnIndex("_id"));
            String name = cursor.getString(cursor.getColumnIndex("name"));

//            Log.i("sdjflsdj","-------------Cursor------------");
//            Log.i("id: ","id===>"+id);
//            Log.i("name: ","name===>"+name);

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

        }

    }

(2)、修改数据

//    更新数据
public void UpdateDataBase(View view){


    // 创建一个DatabaseHelper对象
//    DBHelper dbHelper = new DBHelper("mes.db", 1);
    // 得到一个可写的SQLiteDatabase对象
    SQLiteDatabase sqliteDatabase = dbHelper.getWritableDatabase();
    // 创建一个ContentValues对象
    ContentValues values = new ContentValues();
    values.put("name", "zhangsan");
    // 调用update方法
    // 第一个参数String:表名
    // 第二个参数ContentValues:ContentValues对象
    // 第三个参数String:where字句,相当于sql语句where后面的语句,?号是占位符
    // 第四个参数String[]:占位符的值
    //此行的意思是:将user表中id=1 的name的值修改为zhangsan
    sqliteDatabase.update("user", values, "_id=?", new String[] { "1" });
    System.out.println("-----------update------------");

    Cursor cursor = sqliteDatabase.query("user", new String[] { "_id",
            "name"}, null, null, null, null, null);
    // 将光标移动到下一行,从而判断该结果集是否还有下一条数据,如果有则返回true,没有则返回false
    while (cursor.moveToNext()) {
        String  id = cursor.getString(cursor.getColumnIndex("_id"));
        String name = cursor.getString(cursor.getColumnIndex("name"));

//        Log.i("sdjflsdj","-------------Cursor------------");
//        Log.i("id: ","id===>"+id);
//        Log.i("name: ","name===>"+name);

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

    }


}

(3)、删除数据

public void DelateDataBase(View view){

        // 创建一个DatabaseHelper对象
//        DBHelper dbHelper = new DBHelper("mes.db", 1);
        // 得到一个可写的SQLiteDatabase对象
        SQLiteDatabase sqliteDatabase = dbHelper.getWritableDatabase();

        //调用SQLiteDatabase对象的delete方法进行删除操作
        //第一个参数String:表名
        //第二个参数String:条件语句
        //第三个参数String[]:条件值
        sqliteDatabase.delete("user", "_id=?", new String[]{"1"});
        System.out.println("----------delete----------");

        Cursor cursor = sqliteDatabase.query("user", new String[] { "_id",
                "name"}, null, null, null, null, null);
        // 将光标移动到下一行,从而判断该结果集是否还有下一条数据,如果有则返回true,没有则返回false
        while (cursor.moveToNext()) {
            String  id = cursor.getString(cursor.getColumnIndex("_id"));
            String name = cursor.getString(cursor.getColumnIndex("name"));

//            Log.i("sdjflsdj","-------------Cursor------------");
//            Log.i("id: ","id===>"+id);
//            Log.i("name: ","name===>"+name);

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

        }

    }

(4)、查询数据


//查询数据库

    public void CursorDataBase(View v){

//        DBHelper dbh=new DBHelper("mes.db",1);

        SQLiteDatabase sdb=dbHelper.getReadableDatabase();

        // 调用SQLiteDatabase对象的query方法进行查询,返回一个Cursor对象:由数据库查询返回的结果集对象
        // 第一个参数String:表名
        // 第二个参数String[]:要查询的列名
        // 第三个参数String:查询条件
        // 第四个参数String[]:查询条件的参数
        // 第五个参数String:对查询的结果进行分组
        // 第六个参数String:对分组的结果进行限制
        // 第七个参数String:对查询的结果进行排序

        //此行的意思是:查询user表中id=1数据
//        Cursor cursor = sdb.query("user", new String[] { "_id",
//                "name"}, "_id=?", new String[] { "1" }, null, null, null);
        Cursor cursor = sdb.query("user", new String[] { "_id",
                "name"}, null, null, null, null, null);
        // 将光标移动到下一行,从而判断该结果集是否还有下一条数据,如果有则返回true,没有则返回false
        while (cursor.moveToNext()) {
          String  id = cursor.getString(cursor.getColumnIndex("_id"));
            String name = cursor.getString(cursor.getColumnIndex("name"));

//            Log.i("sdjflsdj","-------------Cursor------------");
//            Log.i("id: ","id===>"+id);
//            Log.i("name: ","name===>"+name);

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

        }

    }

2、创建SQLiteOpenHelper外部类,并使用管理类

(1)、DBHelper类

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

/**
 * Created by Administrator on 2017/1/9.
 */

public class DBHelper extends SQLiteOpenHelper {

    private static final String DATABASE_NAME = "test.db";
    private static final int DATABASE_VERSION = 1;

    public DBHelper(Context context) {
        //CursorFactory设置为null,使用默认值
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    //数据库第一次被创建时onCreate会被调用
    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE TABLE IF NOT EXISTS person" +
                "(_id INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR, age INTEGER, info TEXT)");
    }

    //如果DATABASE_VERSION值被改为2,系统发现现有数据库版本不同,即会调用onUpgrade
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("ALTER TABLE person ADD COLUMN other STRING");
    }
}

(2)、Person实体类

public class Person {
    public int _id;
    public String name;
    public int age;
    public String info;

    public Person() {
    }

    public Person(String name, int age, String info) {
        this.name = name;
        this.age = age;
        this.info = info;
    }
}

(3)、辅助DBHelper的管理类

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

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

/**
 * Created by Administrator on 2017/1/9.
 */

public class DBManager {
    private DBHelper helper;
    private SQLiteDatabase db;

    public DBManager(Context context) {
        helper = new DBHelper(context);
        //因为getWritableDatabase内部调用了mContext.openOrCreateDatabase(mName, 0, mFactory);
        //所以要确保context已初始化,我们可以把实例化DBManager的步骤放在Activity的onCreate里
        db = helper.getWritableDatabase();
    }

    /**
     * add persons
     * @param persons
     */
    public void add(List<Person> persons) {
        db.beginTransaction();  //开始事务
        try {
            for (Person person : persons) {
                db.execSQL("INSERT INTO person VALUES(null, ?, ?, ?)", new Object[]{person.name, person.age, person.info});
            }
            db.setTransactionSuccessful();  //设置事务成功完成
        } finally {
            db.endTransaction();    //结束事务
        }
    }

    /**
     * update person's age
     * @param person
     */
    public void updateAge(Person person) {
        ContentValues cv = new ContentValues();
        cv.put("age", person.age);
        db.update("person", cv, "name = ?", new String[]{person.name});
    }

    /**
     * delete old person
     * @param person
     */
    public void deleteOldPerson(Person person) {
        db.delete("person", "age >= ?", new String[]{String.valueOf(person.age)});
    }

    /**
     * query all persons, return list
     * @return List<Person>
     */
    public List<Person> query() {
        ArrayList<Person> persons = new ArrayList<Person>();
        Cursor c = queryTheCursor();
        while (c.moveToNext()) {
            Person person = new Person();
            person._id = c.getInt(c.getColumnIndex("_id"));
            person.name = c.getString(c.getColumnIndex("name"));
            person.age = c.getInt(c.getColumnIndex("age"));
            person.info = c.getString(c.getColumnIndex("info"));
            persons.add(person);
        }
        c.close();
        return persons;
    }

    /**
     * query all persons, return cursor
     * @return  Cursor
     */
    public Cursor queryTheCursor() {
        Cursor c = db.rawQuery("SELECT * FROM person", null);
        return c;
    }

    /**
     * close database
     */
    public void closeDB() {
        db.close();
    }
}

(4)、mainactivity

import android.database.Cursor;
import android.database.CursorWrapper;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.SimpleCursorAdapter;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class MainActivity extends AppCompatActivity {

    private DBManager mgr;
    private ListView listView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        listView = (ListView) findViewById(R.id.listView);
        //初始化DBManager
        mgr = new DBManager(this);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        //应用的最后一个Activity关闭时应释放DB
        mgr.closeDB();
    }

    public void add(View view) {
        ArrayList<Person> persons = new ArrayList<Person>();

        Person person1 = new Person("Ella", 22, "lively girl");
        Person person2 = new Person("Jenny", 22, "beautiful girl");
        Person person3 = new Person("Jessica", 23, "sexy girl");
        Person person4 = new Person("Kelly", 23, "hot baby");
        Person person5 = new Person("Jane", 25, "a pretty woman");

        persons.add(person1);
        persons.add(person2);
        persons.add(person3);
        persons.add(person4);
        persons.add(person5);

        mgr.add(persons);
    }
//更新数据
    public void update(View view) {
        Person person = new Person();
        person.name = "Jane";
        person.age = 30;
        mgr.updateAge(person);
    }
//删除数据
    public void delete(View view) {
        Person person = new Person();
        person.age = 30;
        mgr.deleteOldPerson(person);
    }
    //查询数据
    public void query(View view) {
        List<Person> persons = mgr.query();
        ArrayList<Map<String, String>> list = new ArrayList<Map<String, String>>();
        for (Person person : persons) {
            HashMap<String, String> map = new HashMap<String, String>();
            map.put("name", person.name);
            map.put("info", person.age + " years old, " + person.info);
            list.add(map);
        }
        SimpleAdapter adapter = new SimpleAdapter(this, list, android.R.layout.simple_list_item_2,
                new String[]{"name", "info"}, new int[]{android.R.id.text1, android.R.id.text2});
        listView.setAdapter(adapter);
    }

    public void queryTheCursor(View view) {
        Cursor c = mgr.queryTheCursor();

        CursorWrapper cursorWrapper = new CursorWrapper(c) {
            @Override
            public String getString(int columnIndex) {
                //将简介前加上年龄
                if (getColumnName(columnIndex).equals("info")) {
                    int age = getInt(getColumnIndex("age"));
                    return age + " years old, " + super.getString(columnIndex);
                }
                return super.getString(columnIndex);
            }
        };
        //确保查询结果中有"_id"列
        SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_2,
                cursorWrapper, new String[]{"name", "info"}, new int[]{android.R.id.text1, android.R.id.text2});
        ListView listView = (ListView) findViewById(R.id.listView);
        listView.setAdapter(adapter);
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值