SQLiteDatabase的使用

本文详细介绍了如何使用SQLiteDatabase进行数据库操作,包括创建或打开数据库、执行SQL语句、使用SimpleCursorAdapter封装并展示查询结果,以及如何在Android应用中实现数据库与UI的交互。重点在于数据库的基本操作流程和适配器的使用,适用于Android开发人员。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

</pre>直接上代码</p><p><pre name="code" class="java">package com.cnfol.sqlitedb;

import android.app.Activity;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.Button;
import android.widget.CursorAdapter;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;

public class DBTest extends Activity {

    SQLiteDatabase db;
    Button bn = null;
    ListView listView;
    EditText et_title, et_content;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_dbtest);
        //创建或打开数据库(此处需要使用绝对路径)
        //①
        db = SQLiteDatabase.openOrCreateDatabase(this.getFilesDir().toString() + "/my.db3", null);
        listView = (ListView) findViewById(R.id.listview);
        bn = (Button) findViewById(R.id.btn);
        et_title = (EditText) findViewById(R.id.et_title);
        et_content = (EditText) findViewById(R.id.et_content);
        bn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //获取用户输入
                String title = et_title.getText().toString();
                String content = et_content.getText().toString();

                try {
                    insertData(db, title, content);
                    Cursor cursor = db.rawQuery("select * from news_inf", null);
                    inflateList(cursor); 
                } catch (SQLiteException e) {
                    //执行DDL创建数据表
                    db.execSQL("create table news_inf(_id integer"
                            +" primary key autoincrement,"
                            +" news_title varchar(50),"
                            +" news_content varchar(255))");
                    //执行insert语句插入数据
                    insertData(db,title,content);
                    //执行查询
                    Cursor cursor = db.rawQuery("select * from news_inf", null);
                    inflateList(cursor);
                }

            }
        });
    }

    /**
     * 填充SimpleCursorAdapter
     * @param cursor
     */
    private void inflateList(Cursor cursor) {
        SimpleCursorAdapter adapter = new SimpleCursorAdapter(
                DBTest.this,
                R.layout.line,
                cursor,
                new String[]{"news_title","news_content"},
                new int[]{R.id.tv_title,R.id.tv_content},
                CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);//③
        //显示数据
        listView.setAdapter(adapter);
    }

    /**
     * 执行插入语句
     * @param db
     * @param title
     * @param content
     * ②
     */
    private void insertData(SQLiteDatabase db,
                            String title,
                            String content) {
        db.execSQL("insert into news_inf values(null,?,?)",
                new String[]{title,content});
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        //退出程序时关闭SQLiteDatabase
        if (db!=null&&db.isOpen()){
            db.close();
        }
    }


    /**
     *    上面的程序中①号粗体字代码用于创建或打开SQLite数据库。
     * 当用户单击程序中的“插入”按钮时,程序会调用②号粗体字
     * 代码向底层数据表中插入一行记录,并执行查询语句,把底层
     * 数据表中的记录查询出来,并使用ListView将结果(Cursor)
     * 显示出来。p417完
     *
     *    程序中的③号代码用于将Cursor封装成SimpleCursorAdapter,
     * 这个SimpleCursorAdapter实现了Adapter接口,因此可以作为
     * ListView或GridView的内容适配器。
     *
     *    SimpleCursorAdapter的构造器参数与SimpleAdapter的构造
     * 参数大致相同,区别是SimpleAdapter负责封装集合元素为Map的List,
     * 而SimpleCursorAdapter负责封装Cursor--如果我们把Cursor里的
     * 结果集合当成List集合,Cursor里的每一行当成Map处理(以数据列的
     * 列名为Key,数据列的值为value),那么SimpleCursorAdapter与
     * SimpleAdapter就统一起来了。
     *
     *    需要指出的是,使用SimpleCursorAdapter封装Cursor时要求底
     * 层数据表的主键列的列名为_id,因为SimplerCursorAdapter只能识别
     * 列名为_id的主键。因此上面的程序创建数据表时指定了主键列的列名为
     * _id,否则就会出现 java.lang.IIIegalArgumentException:
     * column '_id' does not exist错误。
     *
     *    上面的程序中我们重写了Activity的onDestory()方法,当应用
     * 程序退出该Activity时将会回调该方法,程序在该方法中关闭了
     * SQLiteDatabase---就像JDBC编程中需要关闭Statement和Connection
     * 一样,这里也需要关闭SQLiteDatabase,否则可能引发资源泄漏。
     *
     * 总结起来使用SQLiteDatabase进行数据库操作的步骤如下:
     * ①:获取SQLiteDatabase对象,它代表了与数据库的连接。
     * ②:调用SQLiteDatabase的方法来执行SQL语句。
     * ③:操作SQL语句的执行结果,比如用SimpleCursorAdapter封装Cursor.
     * ④:关闭SQLiteDatabase,回收资源。
     *
     *
     *
     */
}



SQLite是一种轻型的关系型数据库管理系统,它是基于磁盘文件的数据库,不需要独立的服务器进程,也不需要配置。它可以在大多数操作系统上运行,包括Windows、Linux、Unix等。SQLite提供了一个简单易用的API,开发者可以很容易地将其集成到应用程序中。Android平台提供了一个名为SQLiteDatabase的类,用于在应用程序中使用SQLite数据库。 首先,需要在Android项目中添加SQLite库的依赖: ```groovy implementation 'androidx.sqlite:sqlite:2.1.0' ``` 然后,在代码中创建或打开数据库,可以如下所示: ```java SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase("test.db", null); ``` 其中,第一个参数指定了数据库的名称,第二个参数可以指定一个CursorFactory,如果不需要可以设置为null。 接下来,可以使用SQLiteDatabase对象执行SQL语句,例如创建表、插入数据、更新数据、查询数据等。例如,创建一个名为user的表,包含id、name和age三个字段: ```java db.execSQL("CREATE TABLE IF NOT EXISTS user(id INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR, age INTEGER)"); ``` 插入一条数据: ```java db.execSQL("INSERT INTO user(name, age) VALUES('Tom', 20)"); ``` 更新数据: ```java db.execSQL("UPDATE user SET age=21 WHERE name='Tom'"); ``` 查询数据: ```java Cursor cursor = db.rawQuery("SELECT * FROM user WHERE age>20", null); if (cursor != null) { while (cursor.moveToNext()) { int id = cursor.getInt(cursor.getColumnIndex("id")); String name = cursor.getString(cursor.getColumnIndex("name")); int age = cursor.getInt(cursor.getColumnIndex("age")); Log.d(TAG, "id: " + id + ", name: " + name + ", age: " + age); } cursor.close(); } ``` 最后,记得在不需要使用数据库时关闭它: ```java db.close(); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值