用SQLite存储数据

SQLite是一个开源的嵌入式数据库引擎,支持SQL92标准,可在多种操作系统上运行。它以单个文件形式存在,采用B-Tree数据结构,支持轻量级、独立、隔离的特性,并具有动态数据类型。SQLiteOpenHelper是Android中用于数据库操作的帮助类,用于创建、升级数据库。常见操作包括添加、删除、修改和查询数据。在实际应用中,应注意数据库的安全性和权限管理,如避免直接存储密码。

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

SQLite

SQLite是D. Richard Hipp 用C语言编写的开源嵌入式数据库引擎。它支持大多数的SQL92标准,并且可以在所有主要的操作系统上运行。
SQLite虽然很小,
但是支持高达2TB大小的数据库,
SQLite以单个文件的形式存在,
以B-Tree的数据结构形式存储在磁盘

Features:
轻量级 - 一个动态库,单文件
独立 - 没有依赖,无需安装
隔离 -全部在一个文件夹里,方便管理和维护
跨平台
多语言接口
安全性 - 事务 // 通过数据库上的独占性和共享锁来实现独立事务处理;多个进程可以在同一时间从同一数据库读取数据,但只有一个可以写入数据

SQLite的数据类型:
-NULL, INTEGER, REAL, TEXT, BLOB/-空值,整型值,浮点值,字符串值,二进制对象

动态数据类型(弱引用)
-当某个值插入到数据库时,SQLite将会检查它的类型,如果该类型于关联的列不匹配,SQLite会尝试将值转换成该列的类型,如果不能转换,则该值将作为本身的类型存储。

-资源占用少,性能良好,管理零成本
-没有可用于SQLite的网络服务器,只能通过网络共享可能存在文件锁定或性能问题
-只提供数据级的锁定
-没有用户账户概念,而是根据文件系统确定所有数据库的权限

SQLiteDatabase:
常用方法:
这里写图片描述

新建一个DatabaseButtonActivity,创建一个对一个的页面
新建一个package,package下新建一个类
public class DatabaseHelper extends SQLiteOpenHelper {

public DatabaseHelper(Context context) {
    super(context, "test.db", null, 1); //version cannot be '0'
}

@Override
public void onCreate(SQLiteDatabase db) {

    db.execSQL("create table user(username varchar(20), password(60) not null);");
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {


}

}

数据的基本操作
Att:数据库里尽量不要存放密码,如果有需要,一定要加密
提常量是ctrl+shift+c,不要又忘了啊喂!

After watching the 1st video, I’ve got two errors, one is about the letter case of SqLite, another lies below, version number cannot be 0, or 1, at least not after video one.

public DatabaseHelper(Context context) {
        super(context, "test.db", null, 2); //version cannot be '0'
    }

SQLiteOpenHelper 是系统帮我们创建的数据库操作的帮助类
创建一个数据库,里面传入一个context,第二个参数是数据库的名称,然后是*一个cursorfactory, 最后是数据库的版本
接下来,创建了一个SQL表格
批量修改常量快捷键ctrl + F6

public class DatabaseHelper extends SQLiteOpenHelper { 

    public static final String DATABASE_NAME = "user";
    public static final String USERNAME = "username";
    public static final String PASSWORD = "password";

    public DatabaseHelper(Context context) {
        super(context, "test.db", null, 2); //version cannot be '0'
    }


    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("create table " + DATABASE_NAME + "(" + USERNAME + " varchar(20) not null, " + PASSWORD + " varchar(60) not null);");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {//when newVersio > oldVersion, this method's activated
    }
}

2nd video: add, delete, revise, query

//query

ctrl+alt+v, refractor
//IO 操作,建议后台

代码实现如下:

public class DatabaseButtonActivity extends AppCompatActivity{

    private SQLiteDatabase mSqLiteDatabase;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_database);

        DatabaseHelper databaseHelper = new DatabaseHelper(this);
        mSqLiteDatabase = databaseHelper.getWritableDatabase();

        //add:

        findViewById(R.id.add).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                ContentValues contentValues = new ContentValues(); //进行拼装,为values,再插入到数据库中,且返回rowNumber
                contentValues.put(DatabaseHelper.USERNAME, "geekband");
                contentValues.put(DatabaseHelper.AGE, "23");

                long rowNumber = mSqLiteDatabase.insert(DatabaseHelper.USER_TABLE_NAME, null, contentValues);
                if (rowNumber != -1){
                    Toast.makeText(DatabaseButtonActivity.this,"Insert successfully",Toast.LENGTH_SHORT).show();
                }
                //query. returns a result set

                Cursor cursor = mSqLiteDatabase.query(DatabaseHelper.USER_TABLE_NAME,null,null,null,null,null,null);

                if(cursor.moveToFirst()){
                    int count = cursor.getCount();
                    for (int i = 0; i < count; i++) {
                        String userName = cursor.getString(cursor.getColumnIndex(DatabaseHelper.USERNAME));
                        String age = cursor.getString(cursor.getColumnIndex(DatabaseHelper.AGE));
                        Log.i(MainActivity.class.getSimpleName(),i + ":" + userName+"|" +age + ".");
                    }
                }
            }
        });

        findViewById(R.id.delete).setOnClickListener(new View.OnClickListener() {
            //delete all records whose 'username' value's 'geekband'
            @Override
            public void onClick(View v) {
                // delete:
                String whereClauseString = "username=?";
                String[] whereArgsString = {"geekband"};
                mSqLiteDatabase.delete(DatabaseHelper.USER_TABLE_NAME, whereClauseString,whereArgsString);
            }
        });

        // update
        ContentValues contentValues = new ContentValues();
        contentValues.put(DatabaseHelper.AGE, "100");
        String whereCaluseString = "username=?";
        String[] whereArgsString = {"geekband"};
        mSqLiteDatabase.update(DatabaseHelper.USER_TABLE_NAME,contentValues,whereCaluseString,whereArgsString);

    }

补充链接 及 references
iMOOC上SQLite教程: http://www.imooc.com/video/3380
偷懒看到另一位博友,博客有很多tips http://my.csdn.net/wirelessqa

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值