Android开发学习笔记之sqlite

目录

一、创建数据库

二、更新数据库

 三、数据库的增删改查

一、创建数据库

Android 为了让我们更好的管理数据库,提供了一个SQLiteOpenHelper的帮助类(注意该类是抽象类,因此我们需要创建自己的帮助类),该类有两个抽象方法onCreate()和onUpdate(),这两个方法都需要我们在自己的帮助类中重写,分别实现创建数据库和更新数据库。此外,SQLiteOpenHelper类还有两个重要的实例方法,getReadableDatabase()和getWritableDatabase(),这两个方法都可以打开或创建数据库,获取数据库对象并进行读写操作。

          下面是创建数据库的帮助类:

public class MyDatabaseHelper extends SQLiteOpenHelper {

    private final Context mContext;
    // 用sql语句创建学生信息表
    public static final String CREATE_STUDENT_MGS = "create table StudentMgs ("
            +"id integer primary key autoincrement,"
            +"name varchar(30),"
            +"sex varchar(5),"
            +"age integer)";
    /**
     * @param context 用于查找数据库的路径
     * @param name  数据库的名称
     * @param factory 用于创建游标对象,或 null 表示默认对象
     * @param version  数据库的版本
     */
    public MyDatabaseHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
        mContext = context;
    }

    /**
     * 该方法是创建数据库
     * @param db 数据库对象
     */
    @Override
    public void onCreate(SQLiteDatabase db) {
    // 调用execSQL执行sql语句    
    db.execSQL(CREATE_STUDENT_MGS);
    }

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

注意:primary key 是 id列 的主键, autoincrement关键字表示id列是自增长的。

下表是Sqlite的数据类型:

数据类型
null这个值为空值
varchar长度不固定且其最大长度为 n 的字串,n不能超过 4000。
text值为文本字符串,使用数据库编码存储(TUTF-8, UTF-16BE or UTF-16-LE).
integer值被标识为整数
real表示浮点型
blob表示二进制型
data包含了 年份、月份、日期。
time包含了 小时、分钟、秒。
char长度固定为n的字串,n不能超过 254。

创建布局文件:就一个按钮

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >

    <Button
        android:id="@+id/createDatabase"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="创建数据库"/>

</LinearLayout>

下面是MainActivity的代码:

public class MainActivity extends AppCompatActivity {

    private MyDatabaseHelper myDatabaseHelper;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button createDatabase = this.findViewById(R.id.createDatabase);
        myDatabaseHelper = new MyDatabaseHelper(this,"StudentMgs.db",null,1);
        // 数据库可视化
        SQLiteStudioService.instance().start(this);
        createDatabase.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 创建数据库
                myDatabaseHelper.getWritableDatabase();
   Toast.makeText(getApplicationContext(),"数据库创建成功",Toast.LENGTH_LONG).show();
            }
        });
    }
}

测试结果:

点击按钮,数据库创建成功了


查看sqlitestudio

数据库可视化操作可以看下面:SQLite数据库可视化操作软件|SQLite Studio操作|Android Studio_哔哩哔哩_bilibili

二、更新数据库

第一步:到我们的帮助类中重写onUpgrade()方法。

 /**
     * 该方法用来更新数据
     * @param db 数据库对象
     * @param oldVersion 数据库旧版本
     * @param newVersion 数据库新版本
     */
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // 在学生的信息表中增加一列手机号
        String sql = "alter table StudentMgs add phone integer";
        db.execSQL(sql);
    }

第二步:到MainActivity中的数据库的版本号改为大于1的即可。

        // 更新数据库
        myDatabaseHelper = new MyDatabaseHelper(this,"StudentMgs.db",null,2);

测试结果:

 三、数据库的增删改查

总布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    >

    <Button
        android:id="@+id/createDatabase"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="创建数据库"/>
    <Button
        android:onClick="addData"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="增加数据"/>
    <Button
        android:onClick="delData"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="删除数据"/>
    <Button
        android:onClick="updateData"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="更新数据"/>
    <Button
        android:onClick="queryData"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="查询数据"/>
</LinearLayout>

在MainActivity中加入addData()、delData、updateData()、queryData()四个方法即可

一、添加数据

        用数据库对象调用public long insert(String table, String nullColumnHack, ContentValues values)方法。该方法的返回值是插入了多少行数据的行数。

 table数据库中的表名
nullColumnHack一般写null
values
映射包含行的初始列值,键应该是列名,值应该是列值
  public void addData(View view){
        // 1、获取数据库对象
        SQLiteDatabase db = myDatabaseHelper.getWritableDatabase();
        ContentValues values = new ContentValues();
        // 2、添加第一条数据
        values.put("name","张三");
        values.put("sex","男");
        values.put("age",18);
        values.put("phone",110120119);
        // 3、增加数据
        db.insert("StudentMgs",null,values);
        // 调用clear()方法将值清空
        values.clear();
        // 添加第二条数据
        values.put("name","李四");
        values.put("sex","男");
        values.put("age",23);
        values.put("phone",1234567890);
        db.insert("StudentMgs",null,values);
        Toast.makeText(getApplicationContext(),"数据增加成功",Toast.LENGTH_LONG).show();
    }

测试结果:

二、删除数据

       用数据库对象调用public int delete(String table, String whereClause, String[] whereArgs)

方法。该方法返回值是删除了多少行数据的行数。(下面的例子是删除名字为张三的学生)

table数据库表名
whereClause删除数据的条件
whereArgs您可以在 where 子句中包含 ?,该子句将被 whereArgs 中的值替换。这些值将绑定为字符串。(条件的值)
 public void delData(View view){
        // 1、获取数据库对象
        SQLiteDatabase db = myDatabaseHelper.getWritableDatabase();
        // 2、删除数据
        db.delete("StudentMgs","name = ?",new String[]{"张三"});
       
    }

测试结果:

三、更改数据

用数据库对象调用public int update(String table, ContentValues values, String whereClause, String[] whereArgs),该方法返回值是更改了多少行数据的行数。(下面是是更改名为李四同学的数据)

table数据库表名
whereClause更新数据的条件
whereArgs您可以在 where 子句中包含 ?,该子句将被 whereArgs 中的值替换。这些值将绑定为字符串。(条件的值)
 public void updateData(View view){
        // 1、获取数据库对象
        SQLiteDatabase db = myDatabaseHelper.getWritableDatabase();
        // 2、创建值对象
        ContentValues values = new ContentValues();
        values.put("sex","女");
        values.put("age",60);
        // 3、更新数据
        db.update("StudentMgs",values,"name = ?",new String[]{"李四"});
    }

测试结果:

四、查询数据

用数据库对象调用public Cursor query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having,String orderBy),该方法返回一个 Cursor 对象,它位于第一个条目之前(下面是查询所有数据)

各个参数的意思:

 table:表名。相当于select语句from关键字后面的部分。如果是多表联合查询,可以用逗号将两个表名分开。

  columns:要查询出来的列名。相当于select语句select关键字后面的部分。

  selection:查询条件子句,相当于select语句where关键字后面的部分,在条件子句允许使用占位符“?”

  selectionArgs:对应于selection语句中占位符的值,值在数组中的位置与占位符在语句中的位置必须一致,否则就会有异常。

  groupBy:相当于select语句groupby关键字后面的部分

       having:相当于select语句having关键字后面的部分

       orderBy:相当于select语句orderby关键字后面的部分

 @SuppressLint("Range")
    public void queryData(View view){
        // 1、获取数据库对象
        SQLiteDatabase db = myDatabaseHelper.getReadableDatabase();
        // 2、查询所有数据
        Cursor cursor =  db.query("StudentMgs",null,null,null,null,null,null);
        while (cursor.moveToNext()){
           String name = cursor.getString(cursor.getColumnIndex("name"));
           String sex = cursor.getString(cursor.getColumnIndex("sex"));
           int age = cursor.getInt(cursor.getColumnIndex("age"));
           int phone = cursor.getInt(cursor.getColumnIndex("phone"));
            Log.d("MainActivity", "The student name is "+name);
            Log.d("MainActivity", "The student sex is "+sex);
            Log.d("MainActivity", "The student age is "+age);
            Log.d("MainActivity", "The student phone is "+phone);
        }
        // 关闭游标
        cursor.close();
        
    }

测试结果:

MainActivity的源码:

import androidx.appcompat.app.AppCompatActivity;
import android.annotation.SuppressLint;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import com.example.sqlitetest.MyDatabaseHelper.MyDatabaseHelper;

import pl.com.salsoft.sqlitestudioremote.SQLiteStudioService;

public class MainActivity extends AppCompatActivity {
    private MyDatabaseHelper myDatabaseHelper;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button createDatabase = this.findViewById(R.id.createDatabase);
        // 更新数据库
        myDatabaseHelper = new MyDatabaseHelper(this,"StudentMgs.db",null,2);
        // 数据库可视化
        SQLiteStudioService.instance().start(this);
        createDatabase.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 创建数据库
                myDatabaseHelper.getWritableDatabase();
                Toast.makeText(getApplicationContext(),"数据库创建成功",Toast.LENGTH_LONG).show();
            }
        });
    }

    public void addData(View view){
        // 1、获取数据库对象
        SQLiteDatabase db = myDatabaseHelper.getWritableDatabase();
        ContentValues values = new ContentValues();
        // 2、添加第一条数据
        values.put("name","张三");
        values.put("sex","男");
        values.put("age",18);
        values.put("phone",110120119);
        // 3、增加数据
        db.insert("StudentMgs",null,values);
        // 调用clear()方法将值清空
        values.clear();
        values.put("name","李四");
        values.put("sex","男");
        values.put("age",23);
        values.put("phone",1234567890);
        db.insert("StudentMgs",null,values);
        Toast.makeText(getApplicationContext(),"数据增加成功",Toast.LENGTH_LONG).show();
    }
    public void delData(View view){
        // 1、获取数据库对象
        SQLiteDatabase db = myDatabaseHelper.getWritableDatabase();
        // 2、删除数据
        db.delete("StudentMgs","name = ?",new String[]{"张三"});
        Toast.makeText(getApplicationContext(),"数据删除成功",Toast.LENGTH_LONG).show();
    }
    public void updateData(View view){
        // 1、获取数据库对象
        SQLiteDatabase db = myDatabaseHelper.getWritableDatabase();
        // 2、创建值对象
        ContentValues values = new ContentValues();
        values.put("sex","女");
        values.put("age",60);
        // 3、更新数据
        db.update("StudentMgs",values,"name = ?",new String[]{"李四"});
        Toast.makeText(getApplicationContext(),"数据更改成功",Toast.LENGTH_LONG).show();
    }
    @SuppressLint("Range")
    public void queryData(View view){
        // 1、获取数据库对象
        SQLiteDatabase db = myDatabaseHelper.getReadableDatabase();
        // 2、查询所有数据
        Cursor cursor =  db.query("StudentMgs",null,null,null,null,null,null);
        while (cursor.moveToNext()){
           String name = cursor.getString(cursor.getColumnIndex("name"));
           String sex = cursor.getString(cursor.getColumnIndex("sex"));
           int age = cursor.getInt(cursor.getColumnIndex("age"));
           int phone = cursor.getInt(cursor.getColumnIndex("phone"));
            Log.d("MainActivity", "The student name is "+name);
            Log.d("MainActivity", "The student sex is "+sex);
            Log.d("MainActivity", "The student age is "+age);
            Log.d("MainActivity", "The student phone is "+phone);
        }
        // 关闭游标
        cursor.close();
        Toast.makeText(getApplicationContext(),"数据查询成功",Toast.LENGTH_LONG).show();
    }

}

最后,感谢大家观看,小白刚学习sqlite,该文章可能有很多不足的地方,请谅解!有错误的请指出。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值