文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Android之SQLite数据库使用

2023-08-18 21:24

关注

简介

SQLite是Android系统集成的一个轻量级的数据库。

Android提供了SQLiteDatabase代表一个数据库(底层就是一个数据库文件),一旦应用程序获得了代表指定数据库的SQLiteDatabase对象,接下来可通过SQLiteDatabase对象来管理、操作数据库了。

关键类SQLiteOpenHelper

Android为了让我们能够更加方便地管理数据库,专门提供了一个SQLiteOpenHelper帮助类,通过SQLiteOpenHelper可用于管理数据库的创建和版本更新。一般的用法是创建SQLiteOpenHelper的子类,并重写它的onCreate(SQLiteDatabase db)和onUpgrade(SQLiteDatabase db,int oldVersion, int newVersion)方法。

SQLiteOpenHelper包含如下常用方法:

public class MyDatabaseHelper extends SQLiteOpenHelper {    // 创建一个Book表    public static final String CREATE_BOOK = "create table Book ("            + "id integer primary key autoincrement, "            + "author text, "            + "price real, "            + "pages integer, "            + "name text)";    private Context mContext;    public MyDatabaseHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {        super(context, name, factory, version);        mContext = context;    }// on    @Override    public void onCreate(SQLiteDatabase db) {        db.execSQL(CREATE_BOOK);        Toast.makeText(mContext, "Create succeed", Toast.LENGTH_SHORT).show();    }    @Override    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {    }}

这里我们在onCreate()方法中构建了一个MyDatabaseHelper对象,并且通过构造函数的参数将数据库名指定为BookStore.db,版本号指定为1,然后在Create database按钮的点击事件里调用了getWritableDatabase()方法。这样当第一次点击Create database按钮时,就会检测到当前程序中并没有BookStore.db 这个数据库,于是会创建该数据库并调用MyDatabaseHelper中的onCreate()方法,这样Book表也就得到了创建,然后会弹出一个Toast提示创建成功。再次点击Create database按钮时,会发现此时已经存在BookStore.db数据库了,因此不会再创建一次。

创建数据库

Activity 代码如下;
布局里面 就是一个创建数据库的Button,不在列出

public class SqliteMainActivity extends AppCompatActivity {    private MyDatabaseHelper myDatabaseHelper;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_sqlite_main);                myDatabaseHelper = new MyDatabaseHelper(this,"BookStore.db",null,1);        Button create_db_btn = findViewById(R.id.create_db_btn);        create_db_btn.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                myDatabaseHelper.getWritableDatabase();            }        });    }}

创建的数据库文件会存放在/data/data//databases/目录下

数据库操作

SQLiteDatabase的execSQL可以执行任何SQL语句,使用特定的方法操作SQLite数据库,也更加方便,接下来演示特定的方法操作数据库。

insert增加数据

SQLiteDatabase的insert方法为long insert(String table, String nullColumnHack,ContentValues values) 插入方法的参数说明如下:

        // 插入数据库        insert_btn = findViewById(R.id.insert_btn);        insert_btn.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                ContentValues values = new ContentValues();                // 开始组装第一条数据                values.put("name", "The Da Vinci Code");                values.put("author", "Dan Brown");                values.put("pages", 454);                values.put("price", 16.96);                db.insert("Book", null, values); // 插入第一条数据                values.clear();                // 开始组装第二条数据                values.put("name", "The Lost Symbol");                values.put("author", "Dan Brown");                values.put("pages", 510);                values.put("price", 19.95);                db.insert("Book", null, values); // 插入第二条数据            }        });

不管第三个参数是否包含数据,执行insert()方法总会添加一条记录,如果第三个参数为空,则会添加一条除主键之外其他字段值都为null的记录。

insert()方法的底层实际上依然是通过构造 insert SQL语句来进行插入的,因此它生成的SQL语句总是形如下面的语句。

// ContentValues里key-value对的数量决定了下面的key-value对insert into <表名>(key1, key2 ...)values (value1 , value2 ...)

update方法更新记录

SQLiteDatabase update 方法update(String table, ContentValues values, StringwhereClause, String[] whereArgs),这个更新方法的参数说明如下:

        Button updateData = (Button) findViewById(R.id.update_data);        updateData.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                SQLiteDatabase db = dbHelper.getWritableDatabase();                ContentValues values = new ContentValues();                values.put("price", 10.99);                // ?代表占位符,由第四个参数的字符串数组提供                int result = db.update("Book", values, "name = ?", new String[] { "The Da Vinci Code" });            }        });

该方法返回受此update语句影响的记录的条数

实际上,update方法底层对应的SQL语句如下:

update <table>set key1=value1, key2=value2...where <whereCalues>

其中whereArgs参数用于向whereClause中传入参数

使用delete方法删除记录

SQLiteDatabase delete 方法 delete(String table , String whereClause, String]whereArgs),这个删除方法的参数说明如下。

该方法返回受此 delete语句影响的记录的条数。

        Button deleteButton = (Button) findViewById(R.id.delete_data);        deleteButton.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                SQLiteDatabase db = dbHelper.getWritableDatabase();                db.delete("Book", "pages > ?", new String[] { "500" });            }        });

实际上,delete方法底层对应的SQL语句如下:

delete <table>where <whereClause>

使用query方法查询记录

QLiteDatabase query 方法 Cursor query(boolean distinct, String table, String]columns, String whereClause, String] selectionArgs, String groupBy, String having, String orderBy,String limit),这个query方法的参数说明如下。
QLiteDatabase query 法的签名 Cursor query(boolean distinct, String table, String]columns, String whereClause, String] selectionArgs, String groupBy, String having, String orderBy,String limit),这个query方法的参数说明如下。

        Button queryButton = (Button) findViewById(R.id.query_data);        queryButton.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                SQLiteDatabase db = dbHelper.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"));                        Log.d("MainActivity", "book name is " + name);                        Log.d("MainActivity", "book author is " + author);                        Log.d("MainActivity", "book pages is " + pages);                        Log.d("MainActivity", "book price is " + price);                    } while (cursor.moveToNext());                }                cursor.close();            }        });

来源地址:https://blog.csdn.net/qq_38056514/article/details/128524676

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯