Android Studio第16课——SQLtie小型数据库初步

学习的内容如下:

1、SQLite介绍

SQLite是一个非常小的数据库。


2、SQLiteOpenHelper使用方法
当需要操作SQLite数据库的时候,首先必须要有一个SQLiteOpenHelper这样一个类的对象,而SQLiteOpenHelper这个类是一个抽象类,所以必须自己写一个类去继承他,编写好一个继承SQLiteOpenHelper的类后,这个类便拥有了如下两个常用的方法:
1.getReadableDatabase() 
          Create and/or open a database.  创建或打开一个只读的数据库对象。
2.getWritableDatabase() 
          Create and/or open a database that will be used for reading and writing.   创建货打开一个可读可写的对象。 


除了上面的两个常用方法外,还有

abstract  void onCreate(SQLiteDatabase db) 
          Called when the database is created for the first time. 
void onOpen(SQLiteDatabase db) 
          Called when the database has been opened. 
  
abstract  void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
          Called when the database needs to be upgraded. 
以上三个方法分别在创建数据库、打开数据库和更新数据库的时候调用。
3、使用adb访问SQLite

4、增删改查


贴上带有详细笔记的代码:

按键操作Activity部分:

package com.example.urien.sqlite;

import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class SQLiteActivity extends AppCompatActivity {

    /**声明按钮控件*/
    private Button buttonCreateDatabase;
    private Button buttonUpdateDatabase;
    private Button buttonInsert;
    private Button buttonUpdate;
    private Button buttonQuery;
    private Button buttonDelete;

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

        /**找到按钮*/
        buttonCreateDatabase = findViewById(R.id.buttonCreateDatabase);
        buttonUpdateDatabase = findViewById(R.id.buttonUpdateDatabase);
        buttonInsert = findViewById(R.id.buttonInsert);
        buttonUpdate = findViewById(R.id.buttonUpdate);
        buttonQuery = findViewById(R.id.buttonQuery);
        buttonDelete = findViewById(R.id.buttonDelete);

        /**绑定监听器*/
        buttonCreateDatabase.setOnClickListener(new buttonListener());
        buttonUpdateDatabase.setOnClickListener(new buttonListener());
        buttonInsert.setOnClickListener(new buttonListener());
        buttonUpdate.setOnClickListener(new buttonListener());
        buttonQuery.setOnClickListener(new buttonListener());
        buttonDelete.setOnClickListener(new buttonListener());

    }

    class buttonListener implements View.OnClickListener{
        @Override
        public void onClick(View v) {

            switch (v.getId()){
                case R.id.buttonCreateDatabase:
                    /**
                     * 调用DatabaseHelper的两个参数的构造函数
                     * 生成一个DataBaseHelper类的对象
                     * "test_db"是创建数据库的名字
                     * 注意:生成DatabaseHelper对象还并没有创建数据库
                     * */
                    DatabaseHelper databaseHelper = new DatabaseHelper(SQLiteActivity.this,"test_db");
                    /**下面方法调用之后才创建了主句看*/
                    SQLiteDatabase sqLiteDatabase = databaseHelper.getReadableDatabase();
                    break;
                case R.id.buttonUpdateDatabase:

                    /**
                     * 调用DatabaseHelper的三个参数的构造函数
                     * 把版本号改为3
                     * */
                    DatabaseHelper databaseHelper1 = new DatabaseHelper(SQLiteActivity.this,"test_db",3);
                    SQLiteDatabase sqLiteDatabase1 = databaseHelper1.getReadableDatabase();
                    break;
                case R.id.buttonInsert:
                    /**生成一个ContentValues对象
                     * 这个对象看名字很好理解,就是包含值的对象
                     * 换句话说里面就是存放的键值对
                     */
                    ContentValues contentValues = new ContentValues();
                    /**存入键值对
                     * 注意这里的id和name要和数据库里面的格式对应
                     * */
                    contentValues.put("id",1);
                    contentValues.put("name","urienvon");

                    DatabaseHelper databaseHelper2 =
                            new DatabaseHelper(SQLiteActivity.this,"test_db");
                    /**因为现在是要执行插入数据操作,
                     * 会对数据库进行写操作,
                     * 所以需要生成一个可读可写的sqLiteDatabase对象
                     * */
                    SQLiteDatabase sqLiteDatabase2 = databaseHelper2.getWritableDatabase();

                    /**调用insert方法,插入数据到数据库
                     * String table     表名
                     * String nullColumnHack    不详,直接null就好了
                     * ContentValues values  包含有键值对的ContentValues对象
                     *
                     *
                     * note:这里的表名是"user",一开始很蒙,表名为什么是user在哪定义了?
                     * 回过头看DatabaseHelper类才知道有
                     * db.execSQL("create table user(id int ,name varchar(20))");
                     * 这句话,也就是说一开始创建的表格名字就已经是user了
                     *
                     * 还有就是要区别开两个名字:
                     *
                     *  DatabaseHelper databaseHelper2 = new DatabaseHelper(SQLiteActivity.this,"test_db");
                     *
                     * sqLiteDatabase2.insert("user",null,contentValues);
                     *
                     * 这里的test_db指的是数据库的名字,而user是表格的名字。一个数据库里面可以有很多个表格,关系就是这样。
                     */
                    sqLiteDatabase2.insert("user",null,contentValues);

                    break;
                case R.id.buttonUpdate:

                    /**更新操作相当于执行SQL语句当中update语句
                     * 语法:
                     * UPDATE table_name SET xxCOL=xxx where xxCOL=xxx...
                     *   更新   某张表  设置  某一列的值为xxx 条件是 某一列为xxx
                     * */

                    /**不用更新版本号就调用两个参数的构造函数*/
                    DatabaseHelper databaseHelper3 =
                            new DatabaseHelper(SQLiteActivity.this,"test_db");
                    SQLiteDatabase sqLiteDatabase3 = databaseHelper3.getWritableDatabase();
                    ContentValues contentValues1 = new ContentValues();
                    contentValues1.put("name","test_name");

                    /**
                     *
                     * table
                     String: the table to update in values
                     ()字符串类型)要更新的表

                     ContentValues: a map from column names to new column values. null is a valid value that will be translated to NULL.
                     内容值:从列名到新列值的映射。NULL是一个有效的值,将被转换为NULL。

                     whereClause
                     String: the optional WHERE clause to apply when updating. Passing null will update all rows.
                     在更新时应用的可选WHERE子句。NULL将更新所有行。

                     whereArgs
                     String: You may include ?s in the where clause, which will be replaced by the values from whereArgs. The values will be bound as Strings.
                     字符串:你可以包括多个?在WHERE子句中,将由WHERERGS的值替换。这些值将被绑定为字符串。


                     note:这里的第三个参数和第四个参数是对应的,第三个参数的?会被第四个参数里面的字符替换,一个?可以被一个字符替换
                     */
                    sqLiteDatabase3.update("user",contentValues1,"id=?",new String[]{"1"});
                    break;
                case R.id.buttonQuery:
                    DatabaseHelper databaseHelper4 = new DatabaseHelper(SQLiteActivity.this,"test_db");
                    SQLiteDatabase sqLiteDatabase4 = databaseHelper4.getReadableDatabase();

                    /**
                     * Parameters:
                     table - The table name to compile the query against.
                     表的名字

                     columns - A list of which columns to return. Passing null will return all columns, which is discouraged to prevent reading data from storage that isn't going to be used.
                     列的名字

                     selection - A filter declaring which rows to return, formatted as an SQL WHERE clause (excluding the WHERE itself). Passing null will return all rows for the given table.
                     声明要返回哪些行的过滤器,格式化为SQLWHERE子句(不包括WHERE本身)。通过NULL将返回给定表的所有行。

                     selectionArgs - You may include ?s in selection, which will be replaced by the values from selectionArgs, in order that they appear in the selection. The values will be bound as Strings.
                     你可以包括多个?选择中的S,将由SaleStordARGS的值替换,以便它们出现在选择中。这些值将被绑定为字符串。

                     groupBy - A filter declaring how to group rows, formatted as an SQL GROUP BY clause (excluding the GROUP BY itself). Passing null will cause the rows to not be grouped.
                     一个过滤器,声明如何分组行,格式化为SQL组BY子句(不包括该组本身)。通过NULL将导致行不分组。

                     having - A filter declare which row groups to include in the cursor, if row grouping is being used, formatted as an SQL HAVING clause (excluding the HAVING itself). Passing null will cause all row groups to be included, and is required when row grouping is not being used.
                     如果使用分组行,则筛选器声明在游标中包含哪些行组,格式化为SQL HAVE子句(不包括拥有本身)。通过NULL将导致所有行组被包含,并且在不使用行分组时是必需的。

                     orderBy - How to order the rows, formatted as an SQL ORDER BY clause (excluding the ORDER BY itself). Passing null will use the default sort order, which may be unordered.
                     如何排序行,格式化为SQL ORDY BY子句(不包括订单本身)。通过NULL将使用默认排序顺序,这可能是无序的。
                     *
                     *
                     *
                     * */
                    Cursor cursor = sqLiteDatabase4.query(
                            "user",
                            new String[]{"id","name"},
                            "id=?",
                            new String[]{"1"},
                            null,
                            null,
                            null);

                    while(cursor.moveToNext()){
                        int col = cursor.getColumnIndex("name");
                        String name =cursor.getString(col);
                        System.out.println(col + ". query--->" + name);
                    }

                    /**
                     *
                     * */
                    break;
                case R.id.buttonDelete:

                    break;
            }
        }
    }
}

SQLite部分

package com.example.urien.sqlite;

import android.content.Context;
import android.database.DatabaseErrorHandler;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

/**创建一个类"DatabaseHelper"并继承SQLiteOpenHelper这个类
 *
 * DatabaseHelper作为一个访问SQLite的助手类,提供两个方面的功能:
 * 1、getReadableDatabase() 和 getWritableDatabase() 可以获得SQLiteDatabase对象,
 *   通过该对象可以对数据库进行操作
 * 2、提供了onCreate()和onUpdate()两个回调函数,允许在创建和升级数据库时,进行个性化操作
 * */
public class DatabaseHelper extends SQLiteOpenHelper{
    private static final int VERSION = 1;

    /**在SQLiteOpenHelper的子类当中,必须有该构造函数*/
    public DatabaseHelper(Context context,/**Activity对象*/
                          String name,/**数据库的名字*/
                          SQLiteDatabase.CursorFactory factory,/**暂时不去了解,调用的时候传入空值*/
                          int version/**当前数据库的版本号(正数、递增)*/
    ) {
        super(context, name, factory, version);
    }

    public DatabaseHelper(Context context,String name){
        this(context,name,VERSION);
    }
    public DatabaseHelper(Context context,String name,int version){
        this(context,name,null,version);
    }
    public DatabaseHelper(Context context,
                          String name,
                          SQLiteDatabase.CursorFactory factory,
                          int version,
                          DatabaseErrorHandler errorHandler
    ) {
        super(context, name, factory, version, errorHandler);
    }

    /**onCreate函数在第一次创建数据库的时候执行
     * 在第一次得到SQLiteDatabase对象的时候会调用此方法
     * 所以生成一个DatabaseHelper对象不会调用此方法
     * 当调用DatabaseHelper对象的
     * getReadableDatabase() 或者 getWritableDatabase() 创建数据库这个方法才会被调用
     * */
    @Override
    public void onCreate(SQLiteDatabase db) {
        System.out.println("creat a Database");
        /**
         * 官方说明:
         * Execute a single SQL statement that is NOT a SELECT or any other SQL statement that returns data.
         *
         * 创建一个用户数据表并定义表结构
         * */
        db.execSQL("create table user(id int ,name varchar(20))");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        System.out.println("update a Database");
    }
}

By Urien 2018年6月27日 17:39:58


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值