SQLite数据存储的基本用法

来源:互联网 发布:mysql 64位 win10 编辑:程序博客网 时间:2024/06/05 00:29

1. 创建数据库并根据需求修改数据库内的表


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


public class MyDatabasesHelper extends SQLiteOpenHelper {


    public static final String CREACE_BOOK = "ctrate table Book("
            + "+id integer primary key aitoincrement"
            + "author text"
            + "price real"
            + "pages integer"
            + "name text)";


    public static final String CREACE_CATEQORY = "ctrate table Category("
            + "+id integer primary key aitoincrement"
            + "Category_name text"
            + "Category_code text";


    private Context mContent;


    public MyDatabasesHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
        mContent = context;
    }


    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(CREACE_BOOK);//创建一张名为Book的表
        //当需求更改后在创建另一张表
        db.execSQL(CREACE_CATEQORY);//创建一张名为Category的表


    }


    /**
     * onUpgrade()方法主要是用于更新数据库的,如果当前数据库的版本是1,就只会创建Category一张表.
     * 当用户是新用户的时候,就会调用onCreate()方法,创建Book和Category两张表
     * 当需求再改变的时候,只需要在onUpgrade()方法里加case即可,这里的swicth-case没有break哦
     *
     * @param db
     * @param oldVersion
     * @param newVersion
     */
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        switch (oldVersion) {
            case 1:
                db.execSQL(CREACE_CATEQORY);
            case 2:
                db.execSQL("alter table Book add column category_id integer");
            default:


        }
    }
}

如何调用MyDatabasesHelper 


 private MyDatabasesHelper myDatabasesHelper;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        myDatabasesHelper = new MyDatabasesHelper(this, "Book", null, 1);
        myDatabasesHelper.getWritableDatabase();
    }


2.添加数据

        SQLiteDatabase db = myDatabasesHelper.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put("name","Nike");
        values.put("pages",500);
        values.put("price",20.5);
        db.insert("Book", null, values);  //插入一条数据


3.更新数据

        SQLiteDatabase db = myDatabasesHelper.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put("price", 30);
        db.update("Book", values, "name=?", new String[]{"Nike"});     //将名字是Nike的price改为30


4.删除数据

        SQLiteDatabase db = myDatabasesHelper.getWritableDatabase();
        db.delete("Book", "pages>?", new String[]{"200"});      //删除pages>200 的记录


5.查询数据

      


代码示例: 

        SQLiteDatabase db = myDatabasesHelper.getWritableDatabase();
        ///查询Book表中所有的数据
        Cursor cursor = db.query("Book", null, null, null, null, null, null);
        if (cursor.moveToFirst()) {
            do {
                //遍历Cursor对象,取出数据
                String name = cursor.getString(cursor.getColumnIndex("name"));
                String author = cursor.getString(cursor.getColumnIndex("author"));
                int pages = cursor.getInt(cursor.getColumnIndex("pages"));
                double price = cursor.getDouble(cursor.getColumnIndex("price"));


            } while (cursor.moveToNext());
            
        }
        //一定要记得关闭数据库
        cursor.close();



6.使用SQL操作数据库

下面我来简单演示一下,如何直接使用SQL来完成CRUD操作


       SQLiteDatabase db = myDatabasesHelper.getWritableDatabase();


        6.1 添加数据方法如下:
        db.execSQL("insert in Book (name,aythor,pages,price)values(?,?,?,?)", new String[]{"The Da Vinci Code",                 "Nike", "500", "50"});
        6.2更新数据方法如下"
        db.execSQL("update Book set price=?where name=?", new String[]{"39.8", "The Da Vinci Code"});
        6.3删除数据方法如下:
        db.execSQL("delete from Book where pages>?", new String[]{"450"});
        6.4查询数据方法如下:
        db.execSQL("select* from Book", null);  


7.使用事务


        SQLiteDatabase db = myDatabasesHelper.getWritableDatabase();

       //开启事务

       db.beginTransaction();

        try {
            db.delete("Book", null, null);
            if (true) {
                //手动抛出一个异常,让事务失败
                throw new NullPointerException();
            }
            ContentValues values = new ContentValues();
            values.put("name", "Game of Thrones");
            values.put("price", 48.9);
            db.insert("Book", null, values);
            //事务 已执行成功
            db.setTransactionSuccessful();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //结束事务
            db.endTransaction();
        }


上述代码是使用事务的标准用法,首先调用SQLiteDatabaese的.beginTransaction()方法来开启一个事务,然后在异常的代码块中去执行具体的数据库操作,当所有的操作完成之后调用setTransactionSuccessful()方法表示事务已经执行成功,最后在finally里调用endTransaction()方法结束事务.但是我们手动抛出了一个异常,这样添加新数据的代码就执行不到了,不过由于事务的存在,中途出现异常会导致事务失败,此时就数据是删除不掉的!

0 0
原创粉丝点击