Android中有关数据库的知识总结

来源:互联网 发布:大数据是以hadoop 编辑:程序博客网 时间:2024/05/18 01:06

1 数据库的介绍

    sqlite:轻量级的数据库,是嵌入到手机里面的数据库

    那么什么时候使用数据库呢?当有大量相似结构的数据需要存储的时候

    File file = new File("info.txt");

2 数据库的创建

    【1】定义一个类继承SQLiteOpenHelper

    【2】在MainActivity的onCreate()方法中实现:

              MyOpenHelper myOpenHelper = newMyOpenHelper(getApplicationContext());

              //[2.1]打开或者是创建数据库,如果是第一次就是创建

              SQLiteDatabase sqLiteDatabase = myOpenHelper.getWritableDatabase();

              //[2.2]打开或者创建数据库 如果是第一次就是创建如果磁盘满了返回一个只读的

              SQLiteDatabase readableDatabase = myOpenHelper.getReadableDatabase();

              备注:[2.1]和[2.2]二选一

3 数据库的onCreate()方法和onUpdate()方法

          onCreate()方法:当数据库第一次创建的时候调用,适合初始化表的结构

          onUpdate()方法:当数据库版本需要更新的时候调用,适合做表结构的更新

补充:

[1]使用SQLite Expert Professional这个工具可以打开我们创建的数据库

[2]需要提前安装SQLite Expert Professional这个工具 像QQ一样安装

回顾SQL语句:

1.      insert into info(name,phone)values(‘王五’,’1377777’);(增)

2.      delete from info where name=’王五’;(删)

3.      update info set phone=’13999999’ where name=’王五’;(改)

4.      select name,phone from info(查)

4 使用SQL语句对数据库进行增删改查

          public class MainActivity extends Activity {

          private MyOpenHelper myOpenHelper;
          @Override
          protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_main);
        
        myOpenHelper = new MyOpenHelper(getApplicationContext());
        //打开或者是创建数据库,如果是第一次 就是创建
        //SQLiteDatabase sqLiteDatabase = myOpenHelper.getWritableDatabase();
        //打开或者创建数据库 如果是第一次就是创建 如果磁盘满了 返回一个只读的
        //SQLiteDatabase readableDatabase = myOpenHelper.getReadableDatabase();
    }
    
    //点击按钮增加一条记录
    public void click1(View v)
    {
        //[1]获取数据库对象
        SQLiteDatabase db = myOpenHelper.getWritableDatabase();
        //[2]执行增加一条记录的方法
        db.execSQL("insert into info(name,phone) values(?,?)", new Object[]{"张三","1388888"});
        //[3]数据库用完需要关闭
        db.close();
    }
    //删除
    public void click2(View v)
    {
        //
        SQLiteDatabase db = myOpenHelper.getWritableDatabase();
        //
        db.execSQL("delete from info where name=?",new Object[]{"张三"});
        //
        db.close();
        
    }
    //更新
    public void click3(View v)
    {
        //
        SQLiteDatabase db = myOpenHelper.getWritableDatabase();
        //
        db.execSQL("update info set phone=? where name=?", new Object[]{"13999999","张三"});
        //
        db.close();
    }
    //查找
    public void click4(View v)
    {
        //
        SQLiteDatabase db = myOpenHelper.getReadableDatabase();
        //
        Cursor cursor = db.rawQuery("select * from info", null);
        if (cursor!=null && cursor.getCount()>0) {
            while(cursor.moveToNext())
            {
                String name = cursor.getString(1);//参数代表的是列的索引
                String phone = cursor.getString(2);
                System.out.println("name:"+name+"-----"+phone);
            }    
        }
        //
//        db.close();
//        cursor.close();
    }
    
}

        缺点:1  SQL语句容易写错

                     2  执行SQL语句没有返回值 不容易进行判断

         优点:1  容易进行多表查询

        【4.1】使用命令行工具sqlite3 可以打开数据库

        【4.2】改变dos的编码方式:

                       使用指令:chcp 936                  (改变成GBK编码方式)

                       使用指令:chcp 65001              (改变成utf-8编码方式)

5 使用谷歌封装好的API对数据库进行增删改查

public class MainActivity extends Activity {

    private MyOpenHelper myOpenHelper;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        myOpenHelper = new MyOpenHelper(getApplicationContext());
        //打开或者是创建数据库,如果是第一次 就是创建
        //SQLiteDatabase sqLiteDatabase = myOpenHelper.getWritableDatabase();
        //打开或者创建数据库 如果是第一次就是创建 如果磁盘满了 返回一个只读的
        //SQLiteDatabase readableDatabase = myOpenHelper.getReadableDatabase();
    }
    
    //点击按钮增加一条记录
    public void click1(View v)
    {
        //[1]获取数据库对象
        SQLiteDatabase db = myOpenHelper.getWritableDatabase();
        //[2]执行增加一条记录的方法
        //db.execSQL("insert into info(name,phone) values(?,?)", new Object[]{"张三","1388888"});
        
        /**
         * table:表名
         * contentValues 内部封装了一个map key:对应列的名字 value:对应的值
         */
        ContentValues values = new ContentValues();
        values.put("name", "王五");
        values.put("phone", "110");
        //返回值代表插入新行的ID
        long insert = db.insert("info", null, values);//底层就在组拼sql语句
        
        //[3]数据库用完需要关闭
        db.close();
        
        if (insert>0) {
            Toast.makeText(getApplicationContext(), "添加成功!", Toast.LENGTH_LONG).show();
        }
        else{
            Toast.makeText(getApplicationContext(), "添加失败!", Toast.LENGTH_LONG).show();
        }
    }
    //删除
    public void click2(View v)
    {
        //
        SQLiteDatabase db = myOpenHelper.getWritableDatabase();
        //
        //db.execSQL("delete from info where name=?",new Object[]{"张三"});
        //返回值代表影响的行数
        int delete = db.delete("info", "name=?",new String[]{"王五"});
        
        //
        db.close();
        Toast.makeText(getApplicationContext(), "删除了"+delete+"行", Toast.LENGTH_LONG).show();
        
    }
    //更新
    public void click3(View v)
    {
        //
        SQLiteDatabase db = myOpenHelper.getWritableDatabase();
        //
        //db.execSQL("update info set phone=? where name=?", new Object[]{"13999999","张三"});
        
        ContentValues values = new ContentValues();
        values.put("phone", "114");
        //代表更新了多少行
        int update = db.update("info", values, "name=?", new String[]{"王五"});
        //
        db.close();
        
        Toast.makeText(getApplicationContext(), "更新了"+update+"行", Toast.LENGTH_LONG).show();
    }
    //查找
    public void click4(View v)
    {
        //
        SQLiteDatabase db = myOpenHelper.getReadableDatabase();
        //
        //columns:代表你要查询的列
        Cursor cursor = db.query("info", new String[]{"phone"}, "name=?", new String[]{"王五"}, null, null, null);
        
        //Cursor cursor = db.rawQuery("select * from info", null);
        if (cursor!=null && cursor.getCount()>0) {
            while(cursor.moveToNext())
            {
                String phone = cursor.getString(0);
                System.out.println("phone:"+phone);
            }    
        }
        //
//        db.close();
//        cursor.close();
    }
    
}

        优点:[1]写法简单不需要写复杂的sql语句 不容易写错

                     [2]有返回值方便开发者进行开发

         缺点:[1]如果有多张表 使用谷歌封装好的API不容易进行查询

6 两种增删改查的优缺点

见上!!!


7 Android中数据库的事物的介绍

事物:执行一段逻辑,要么同时成功,要么同时失败      典型案例:银行转账

public void click(View v)    {    SQLiteDatabase db = myOpenHelper.getReadableDatabase();    //使用事务进行转账!    db.beginTransaction();       try {       db.execSQL("update info set money=money-100 where name=?", new Object[]{"张三"});       db.execSQL("update info set money=money+100 where name=?", new Object[]{"李四"});       //给当前事务设置一个成功的标记         db.setTransactionSuccessful();       }       catch(Exception e)       {       Toast.makeText(getApplicationContext(), "服务器忙,请稍后再转", Toast.LENGTH_LONG).show();       }       finally {         db.endTransaction();       }}





原创粉丝点击