Android-SQLite数据库

Android-SQLite数据库

  • 1、SQLite数据库简介
    • SQLite是一个轻量级的数据库。他的设计目标是嵌入式的,而且占用资源非常低。
    • SQLite遵循的是ACID的关系型数据库管理系统(原子性:Atomicity;一致性:Consistency;隔离性:lsolation;持久性:Durability)
    • SQLite没有服务器进程,他是通过文件保存数据,该文件是跨平台的。
    • 在保存数据的时候,可以发现SQLite支持null(零)、real(浮点数字)、integer(整数)、text(字符串文本)和blob(二进制对象)5中数据类型。那么很多的时候你会发现,我们使用varchar(n)、char(n)、decimal(p,s)这些数据类型的时候也是没有问题的,是因为这些数据类型在运算或者保存的时候转换成为相对应的5种数据类型了。
  • 2、数据库的创建
    • Andriod系统推荐使用SQLiteOpenHelper的子类创建数据库,因此需要穿件一个类继承自SQLOpenHelper,并且重写这个类当中的onCreate()方法和onUdate()方法。
      public class CourseHelper extends SQLiteOpenHelper {
          public CourseHelper(Context context){
              super(context,"course.db",null,2);
          }
          //数据库第一次被创建是调用该方法
          @Override
          public void onCreate(SQLiteDatabase db) {
              //初始化数据库的表结构,执行一条建表的SQL语句
              db.execSQL("CREATE TABLE course(courseID VARCHAR(20),courseName VARCHAR(50),courseCredit REAL)");
          }
      
          //当数据库的版本号增加时调用
          @Override
          public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
      
          }
      }
      
    • super()调用父类SQLiteOpenHelper的构造方法,并传入四个参数。
      • 上下文对象
      • 数据库名称
      • 游标工厂(通常是null)
      • 数据库版本
    • onCreate()方法:数据库第一次被创建是调用该方法,一般用于初始化表结构;
    • onUpdate()方法:当数据库的版本号增加时调用,如果版本号不增加的话,就是不调用的。
  • 3、数据库的使用
    • 增加一条数据

      public void insert(String name,String price){
          SQLiteDatabase db = helper.getWritableDatabase();//获取可读写的SQLiteDatabase对象
          ContentValues values = new ContentValues();//创建ContentValues对象
          values.put("name",name);
          values.put("price",price);
          long id = db.insert("information",null,values);//插入一条数据到information表
          db.close();//关闭数据库
      }
      
      • 1、得到SQLiteDatabase对象
      • 2、获得ContentValues对象,并将数据添加到该对象中
      • 3、调用inserts()方法将数据插入到表中,其中这当中有三个参数
        • (1)数据表的名称
        • (2)如果发现将要插入的行为空行时,会将这个列名的值设为null
        • (3)ContentValues对象(ContentValues对象存放数据的形式都是以键值对的形式存放的)
      • 4、使用完SQLiteDatabase对象后,调用close方法关闭,否则的话数据库连接会一直存在,不断消耗内存,那么,当系统报告内存不够的时候获取不到SQLiteDatabase对象的时候,会说明数据库未关闭异常。
      • insert()方法会返回数值表示这条数据插入在了第几位,如果这个数字是-1的话,那就说明你没有成功插入数据。
    • 修改一条数据

      public int update(String name,String price){
          SQLiteDatabase db = helper.getWritableDatabase();
          ContentValues values = new ContentValues();
          values.put("price",price);
          int number = db.update("imformation",values,"name=?",new String[]{name});
          db.close();
          return number;
      }
      
      • 基本步骤还是和插入的一样不在赘述了,那么久简单的说明一下这个update()方法的参数:
        • (1)表名
        • (2)接收一个ContentValues对象
        • (3)可选的where语句
        • (4)whereClause语句中表达式的占位参数列表,这些字符串会替换掉where条件中的“?”
      • update()方法会返回这次更新的数量。
    • 删除一条数据

      public int delete(long id){
          SQLiteDatabase db = helper.getWritableDatabase();
          int number = db.delete("information","_id=?",new String[]{id+""});
          db.close();
          return number;
      }
      
      • delete()方法会返回这次删除的数据有多少条。
    • 查询一条数据

      public boolean find(long id){
          SQLiteDatabase db = helper.getWritableDatabase();
          Cursor cursor = db.query("information",null,"_id=?",new String[]{id+""},null,null,null);
          boolean result = cursor.moveToNext();
          cursor.close();
          return result;
      }
      
      • 查询时候使用的是cursor游标,query()方法返回的是一个行数集合cursor。moveToNext()、moveToFirst()这些方法不仅可以更改游标的位置,也会返回一个布尔值,表示是否存在。
      • 接下来也是简单的说明一下这些参数:
        • (1)表名称
        • (2)表示查询的列名
        • (3)接收查询条件字句
        • (4)接收查询条件字句对应的条件值
        • (5)表示分组方式
        • (6)接收having条件,即定义组的过滤器
        • (7)表示排序方式
    • SQL语句进行数据库操作

          //增加一条数据
          db.execSQL("insert into information (name,price) values (?,?)",new Object[]{name,price});
      
          //修改一条数据
          db.execSQL("update information set name=? where price=?",new Object[]{name,price});
      
          //删除一条数据
          db.execSQL("delete from information where _id=1");
      
          //执行查询的SQl语句
          Cursor cursor = db.rawQuery("select * from person where name=?",new String[]{name});
      
      • 查询操作的语句相对来说特殊一些,使用的是rawQuery()而不是execSQL(),这是因为查询数据库会返回一个结果集cursor,而execSQL()方法没有返回值。
    • 下面是我自己编写的一个基于课程的具有增删改查功能的用户界面,仅供参考:

      • activity_main.xml文件
        <?xml version="1.0" encoding="utf-8"?>
        <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:app="http://schemas.android.com/apk/res-auto"
            xmlns:tools="http://schemas.android.com/tools"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            tools:context=".MainActivity">
        
            <EditText
                android:id="@+id/editText_courseID"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginStart="8dp"
                android:layout_marginLeft="8dp"
                android:layout_marginTop="8dp"
                android:layout_marginEnd="8dp"
                android:layout_marginRight="8dp"
                android:layout_marginBottom="8dp"
                android:ems="10"
                android:hint="课程编号"
                android:inputType="textMultiLine"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintHorizontal_bias="0.503"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toTopOf="parent"
                app:layout_constraintVertical_bias="0.017" />
        
            <EditText
                android:id="@+id/editText_courseName"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginStart="8dp"
                android:layout_marginLeft="8dp"
                android:layout_marginTop="8dp"
                android:layout_marginEnd="8dp"
                android:layout_marginRight="8dp"
                android:layout_marginBottom="8dp"
                android:ems="10"
                android:hint="课程名称"
                android:inputType="textMultiLine"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintHorizontal_bias="0.503"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toBottomOf="@+id/editText_courseID"
                app:layout_constraintVertical_bias="0.07" />
        
            <EditText
                android:id="@+id/editText_courseCredit"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginStart="8dp"
                android:layout_marginLeft="8dp"
                android:layout_marginTop="8dp"
                android:layout_marginEnd="8dp"
                android:layout_marginRight="8dp"
                android:layout_marginBottom="8dp"
                android:ems="10"
                android:hint="课程学分"
                android:inputType="textMultiLine"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintHorizontal_bias="0.503"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toBottomOf="@+id/editText_courseName"
                app:layout_constraintVertical_bias="0.107" />
        
            <Button
                android:id="@+id/button_Insert"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginStart="8dp"
                android:layout_marginLeft="8dp"
                android:layout_marginTop="8dp"
                android:layout_marginEnd="8dp"
                android:layout_marginRight="8dp"
                android:layout_marginBottom="8dp"
                android:text="增加"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintHorizontal_bias="0.157"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toBottomOf="@+id/editText_courseCredit"
                app:layout_constraintVertical_bias="0.158" />
        
            <Button
                android:id="@+id/button_Delete"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginStart="8dp"
                android:layout_marginLeft="8dp"
                android:layout_marginTop="8dp"
                android:layout_marginEnd="8dp"
                android:layout_marginRight="8dp"
                android:layout_marginBottom="8dp"
                android:text="删除"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintHorizontal_bias="0.678"
                app:layout_constraintStart_toEndOf="@+id/button_Insert"
                app:layout_constraintTop_toBottomOf="@+id/editText_courseCredit"
                app:layout_constraintVertical_bias="0.153" />
        
            <Button
                android:id="@+id/button_Change"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginStart="8dp"
                android:layout_marginLeft="8dp"
                android:layout_marginTop="8dp"
                android:layout_marginEnd="8dp"
                android:layout_marginRight="8dp"
                android:layout_marginBottom="8dp"
                android:text="修改"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintHorizontal_bias="0.157"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toBottomOf="@+id/button_Insert"
                app:layout_constraintVertical_bias="0.171" />
        
            <Button
                android:id="@+id/button_Search"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginStart="8dp"
                android:layout_marginLeft="8dp"
                android:layout_marginTop="8dp"
                android:layout_marginEnd="8dp"
                android:layout_marginRight="8dp"
                android:layout_marginBottom="8dp"
                android:text="查询"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintHorizontal_bias="0.678"
                app:layout_constraintStart_toEndOf="@+id/button_Change"
                app:layout_constraintTop_toBottomOf="@+id/button_Delete"
                app:layout_constraintVertical_bias="0.178" />
        
        </android.support.constraint.ConstraintLayout>
        
      • MainActivity.java文件
        package com.example.coursemanage;
        
        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.util.Log;
        import android.view.View;
        import android.widget.Button;
        import android.widget.ListView;
        import android.widget.TextView;
        
        public class MainActivity extends AppCompatActivity implements View.OnClickListener {
        
            private CourseHelper helper;
            private Button btn1,btn2,btn3,btn4;
            private ListView lv1;
            private SQLiteDatabase db;
            private final String TableName = "course";
            private TextView et1,et2,et3;
        
            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
                helper = new CourseHelper(this);
        
                btn1 = findViewById(R.id.button_Insert);
                btn2 = findViewById(R.id.button_Delete);
                btn3 = findViewById(R.id.button_Change);
                btn4 = findViewById(R.id.button_Search);
        
                et1 = findViewById(R.id.editText_courseID);
                et2 = findViewById(R.id.editText_courseName);
                et3 = findViewById(R.id.editText_courseCredit);
        
                btn1.setOnClickListener(this);
                btn2.setOnClickListener(this);
                btn3.setOnClickListener(this);
                btn4.setOnClickListener(this);
            }
        
            @Override
            public void onClick(View v) {
                switch (v.getId()){
                    case R.id.button_Insert:
                        db = helper.getWritableDatabase();
                        ContentValues values = new ContentValues();
                        values.put("courseID",et1.getText().toString().trim());
                        values.put("courseName",et2.getText().toString().trim());
                        values.put("courseCredit",Float.parseFloat(et3.getText().toString().trim()));
                        long insertNumber = db.insert(TableName,null,values);
                        Log.i("coursedb","本次插入在第" + insertNumber + "条");
                        db.close();
                        break;
                    case R.id.button_Delete:
                        db = helper.getWritableDatabase();
                        long deleteNumber = db.delete(TableName,"courseID=?",new String[]{et1.getText().toString().trim()});
                        Log.i("coursedb","本次删除了" + deleteNumber + "条记录");
                        db.close();
                        break;
                    case R.id.button_Change:
                        db = helper.getWritableDatabase();
                        values = new ContentValues();
                        values.put("courseID",et1.getText().toString().trim());
                        values.put("courseName",et2.getText().toString().trim());
                        values.put("courseCredit",et3.getText().toString().trim());
                        long updateNumber = db.update(TableName,values,"courseID=?",new String[]{et1.getText().toString().trim()});
                        Log.i("coursedb:","修改了" + updateNumber + "条记录");
                        db.close();
                        break;
                    case R.id.button_Search:
                        db = helper.getReadableDatabase();
                        //查询整张表就是所有值设置为null;
                        Cursor cursor = db.query(TableName,null,null,null,null,null,null);
                        Log.i("coursedb:","本次共查询" + cursor.getCount() + "条记录");
                        cursor.moveToFirst();//将游标定位到第一条记录
                        do {//往后一条一条查数据记录
                            String courseID = cursor.getString(cursor.getColumnIndex("courseID"));
                            String courseName = cursor.getString(cursor.getColumnIndex("courseName"));
                            float courseCredit = cursor.getFloat(cursor.getColumnIndex("courseCredit"));
                            Log.i("coursedb:",courseID + " " + courseName + " " + courseCredit);
                        }while ((cursor.moveToNext()));
                        cursor.close();
                        db.close();
                        break;
                }
            }
        }
        
        
      • CourseHelper.java文件
        package com.example.coursemanage;
        
        import android.content.Context;
        import android.database.sqlite.SQLiteDatabase;
        import android.database.sqlite.SQLiteOpenHelper;
        
        public class CourseHelper extends SQLiteOpenHelper {
            public CourseHelper(Context context){
                super(context,"course.db",null,2);
            }
            //数据库第一次被创建是调用该方法
            @Override
            public void onCreate(SQLiteDatabase db) {
                //初始化数据库的表结构,执行一条建表的SQL语句
                db.execSQL("CREATE TABLE course(courseID VARCHAR(20),courseName VARCHAR(50),courseCredit REAL)");
            }
        
            //当数据库的版本号增加时调用
            @Override
            public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        
            }
        }
        
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值