android 基础一 <SQL>

南笙酒味 提交于 2020-02-15 17:20:10

android 提供了一个数据库操作的帮助类 SQLiteOpenHelper,我定义一个类继承SQLiteOpenHelper即可完成数据的创建和更新操作。

一、创建类基础 SQLiteOpenHelper

 1 public class SqliteHelper extends SQLiteOpenHelper {
 2 
 3     public SqliteHelper(Context context) {
 4         // 数据库名称:sqltest.db
 5         // 版本号:1 (初始化的时候设置成1,当这个版本号升级之后会触发onUpgrade函数)
 6         super(context, "sqltest.db", null, 1);
 7     }
 8     
 9     //数据库第一次创建的时候调用,适合创建表结构
10     @Override
11     public void onCreate(SQLiteDatabase db) {
12         db.execSQL("sql语句");
13     }
14    //数据库版本变更之后会执行,适合更改表的结构
15     @Override
16     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
17 
18     }
19 }

二、获取SQLiteDatabase对象操作数据库

      getReadableDatabase 和 getWritableDatabase 区别

      1.都可以对数据库进行读写

      2.当磁盘满了之后, getWritableDatabase会发送异常;getReadableDatabase不会发送异常,直接返回一个可读的SQLiteDatabase对象。

1         SqliteHelper sqliteHelper=new SqliteHelper(context);
2         //打开或者创建数据库,如果是第一次就是创建
3         SQLiteDatabase readableDatabase=sqliteHelper.getReadableDatabase();
4         //打开或者创建数据库,如果是第一次就是创建
5         SQLiteDatabase writableDatabase=sqliteHelper.getWritableDatabase();
6         
7         //getReadableDatabase 和 getWritableDatabase 区别
8         //都可以对数据库进行读写
9         //当磁盘满了之后getWritableDatabase会发送异常,getReadableDatabase不会发送异常,直接返回一个可读的SQLiteDatabase对象。

 

三、数据库增删改查

增加数据

public boolean insertData(){
        SQLiteDatabase writableDatabase=sqliteHelper.getWritableDatabase();
        ContentValues contentValues=new ContentValues();
        contentValues.put("name","王五");
        contentValues.put("age","13");
        //第一个参数:表名
        //第二个参数:默认填写null
        //第一个参数:第三个参数插入的数据,列名+value
        long row=  writableDatabase.insert("info",null,contentValues);
        Log.e(TAG,"insertData  row="+row);
        //row 更新的行数
        writableDatabase.close();
        if(row>0)
            return true;
        else
            return false;
    }

查询数据

 1    public boolean select() {
 2        SQLiteDatabase writableDatabase = sqliteHelper.getWritableDatabase();
 3        String table = "info";
 4        String[] columns = new String[]{"name"};
 5        String selection = "name=?";
 6        String[] selectionArgs = new String[]{"王五"};
 7        String groupBy = null;
 8        String having = "";
 9        String orderBy = "";
10        //第一个参数:表名
11        //第二个参数:要查询的列,查询所有直接填null
12        //第三个参数:查询条件
13        //第四个参数:查询条件的占位符参数
14        //第五个参数:分组
15        //第六个参数:条件
16        //第七个参数:排序
17        Cursor cursor = writableDatabase.query(table, columns, selection, selectionArgs, groupBy, having, orderBy);
18        if (cursor != null && cursor.getCount() > 0) {
19            while (cursor.moveToNext()) {
20                String strName = cursor.getString(0);
21                Log.e(TAG, "select name=" + strName);
22            }
23        }
24        writableDatabase.close();
25        return true;
26    }

删除数据

 1   public boolean delete(){
 2         SQLiteDatabase writableDatabase=sqliteHelper.getWritableDatabase();
 3         String whereClause="name=?";
 4         String[] whereArgs=new String[]{"王五"};
 5         //第一个参数:表名
 6         //第二个参数:where条件
 7         //第一个参数:where条件的占位符参数
 8         int totalRow=writableDatabase.delete("info",whereClause,whereArgs);
 9         Log.e(TAG,"delete  totalRow="+totalRow);
10         //totalRow 更新的行数
11         writableDatabase.close();
12         if(totalRow>0)
13             return true;
14         else
15             return false;
16     }

更新数据

 1     public boolean update(){
 2         SQLiteDatabase writableDatabase=sqliteHelper.getWritableDatabase();
 3         ContentValues contentValues=new ContentValues();
 4         contentValues.put("name","王五");
 5         contentValues.put("age","15");
 6 
 7         String whereClause="name=?";
 8         String[] whereArgs=new String[]{"王五"};
 9         //第一个参数:表名
10         //第二个参数:更新的列名
11         //第三个参数:where条件
12         //第四个参数:where条件的占位符参数
13         int totalRow=writableDatabase.update("info",contentValues,whereClause,whereArgs);
14         Log.e(TAG,"update  totalRow="+totalRow);
15         //totalRow 更新的行数
16         writableDatabase.close();
17         if(totalRow>0)
18             return true;
19         else
20             return false;
21     }

 使用事务

 1  public void update2(){
 2         SQLiteDatabase liteDatabase=sqliteHelper.getWritableDatabase();
 3         try {
 4             //开始事务
 5             liteDatabase.beginTransaction();
 6             liteDatabase.execSQL("");
 7             liteDatabase.execSQL("");
 8             // 设置事务成功的标记, 设置事务成功之后才会提交所有的sql执行的结果。
 9             // 如果没有设置事务成功的标记,在endTransaction之后将会自动回滚事务
10             liteDatabase.setTransactionSuccessful();
11         }catch (Exception ex){
12             //出现异常自动回滚事务
13         }finally {
14             //结束事务
15             liteDatabase.endTransaction();
16         }
17     }

 

 

使用sqlite3 命令查询数据:

sqlite3 查询数据库:第一步:使用adb命令cd到 data/data/包名/databases 目录第二步:打开数据库使用命令--> sqlite3 数据库名称第三步:输入查询语句用;结束xxx:/data/data/com.example.test3/databases # sqlite3 sqltest.dbSQLite version 3.9.2 2015-11-02 18:31:45Enter ".help" for usage hints.sqlite> select * from info;1|小李|12

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 



易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!