用SQLite存储数据

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

你可能感兴趣的:(sqlite)