Sqlite 数据库的增删改查

Sqlite的介绍以及作用

  • SQLite是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL
    数据库引擎。它是一个零配置的数据库,这意味着与其他数据库一样,您不需要在系统中配置。就像其他数据库,SQLite
    引擎不是一个独立的进程,可以按应用程序需求进行静态或动态连接。SQLite 直接访问其存储文件。
    作用:
  • 不需要一个单独的服务器进程或操作的系统(无服务器的)。
  • SQLite 不需要配置,这意味着不需要安装或管理。
  • 一个完整的 SQLite 数据库是存储在一个单一的跨平台的磁盘文件。
  • SQLite 是非常小的,是轻量级的,完全配置时小于 400KiB,省略可选功能配置时小于250KiB。
  • SQLite 是自给自足的,这意味着不需要任何外部的依赖。
  • SQLite 事务是完全兼容 ACID 的,允许从多个进程或线程安全访问。
  • SQLite 支持 SQL92(SQL2)标准的大多数查询语言的功能。
  • SQLite 使用 ANSI-C 编写的,并提供了简单和易于使用的 API。
  • SQLite 可在 UNIX(Linux, Mac OS-X, Android, iOS)和 Windows(Win32, WinCE,WinRT)中运行。

Sqlite创建数据库和数据表

创建一个类继承SQLiteOpenHelper


public class MySqlite extends SQLiteOpenHelper {
    private String sql="create table student("+"id integer primary key autoincrement not null,"+
            "name text,"+"age integer"+")";

    public MySqlite(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }

    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {
        sqLiteDatabase.execSQL(sql);//创建数据库以及数据表
    }

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {

    }
}

添加数据

  • 1:new一个ContentValues,该对象提供Put()方法,数据以键值对的形式储存,SQLiteDatabase对象
    ,提供一个insert()方法,它接受三个参数,第一是表名,第二是在未给指定列赋值时,默认为null,第三就是ContentValues对象。
  • 2:就是调用SQLiteDatabase对象 的execSQL()方法,里面传值SQL语句
 private void addstudent() {
        String name=nameET.getText().toString();
        int age= Integer.parseInt(ageET.getText().toString());
        ContentValues contentValues=new ContentValues();
        contentValues.put("name",name);
        contentValues.put("age",age);

        MySqlite mySqlite=new MySqlite(this,"sql",null,1);
        SQLiteDatabase sqLiteDatabase=mySqlite.getWritableDatabase();
        sqLiteDatabase.insert("student",null,contentValues);



    }

删除数据

  • 1.同上调用delete()方法。第一个参数表名,第二个限定条件,第三个限定条件的值。
    2:同上
 private void shanchustudent() {
        String name=nameET.getText().toString();
        MySqlite mySqlite=new MySqlite(this,"sql",null,1);
        SQLiteDatabase sqLiteDatabase=mySqlite.getWritableDatabase();
        sqLiteDatabase.delete("student","name=?",new String[]{name});
    }

修改数据

  • 1:同上,new
    一个ContentValues对象,用来存放数据,SQLiteDatabase对象调用updata()方法,传入四个参数,第一个表名,第二个需要修改的数据,第三个限定符,表示要修改哪一行等待传值,第四个传值具体修改哪几行。
  • 2:SQLiteDatabase对象的execSQL()方法,写入SQL语句。
 private void xiugaistudent() {
        String name=nameET.getText().toString();
        String age= ageET.getText().toString();
        MySqlite mySqlite=new MySqlite(this,"sql",null,1);
        SQLiteDatabase sqLiteDatabase=mySqlite.getWritableDatabase();
        ContentValues contentValues=new ContentValues();
        contentValues.put("name",name);
        contentValues.put("age",age);
        sqLiteDatabase.update("student",contentValues,"name=? and age=?",new String[]{name,age});
        inpuireStudent();
    }

查询数据

  • 1:查询数据需要调用rawQuery()方法,该方法返回值是一个Cursor(游标),利用Cursor遍历查询结果,首先确认cursor是否为空,调用cursor.moveToFirst(),该方法移动Cursor到第一行,如果为空就返回False,否则就是true,在进行循环进行遍历,利用Cursor.GetString(),方法得到该列的具体参数,看到下面代码很多人会疑问,为什么不在.GetString(),方法内直接传入列名,而是又调用了一个Cursor.GetColumnIndex()呢?那是应为.GetString()方法内只接受Int类型的值,而.GetColumnIndex(),接受String值,返回int值,而GetColumnIndex()方法返回的int值是该列的下标,所以利用返回值得相互转变得到我们想要的数据值。简直完美,不是吗?
  • 2:调用的是RawQuery()方法,而不是execSQL()方法,里面写入SQL语句,查询全部则第二个限定参数为null,第二个参数类型为newString[]{}类型,用法同上一样,SQL语句?限定,new String[]{}里面给‘?‘赋值。
private void inpuireStudent() {
        list.clear();
        MySqlite mySqlite=new MySqlite(this,"sql",null,1);
            SQLiteDatabase sqLiteDatabase=mySqlite.getWritableDatabase();
        Cursor cursor=sqLiteDatabase.query("student",null,null,null,null,null,null);
        cursor.moveToFirst();
        do {
            String name=cursor.getString(cursor.getColumnIndex("name"));
            int id=cursor.getInt(cursor.getColumnIndex("id"));
            int age=cursor.getInt(cursor.getColumnIndex("age"));
            Student student=new Student(name,id,age);
            list.add(student);

            Log.d(TAG, "inpuireStudent: "+cursor.getString(cursor.getColumnIndex("name")));
        }while (cursor.moveToNext());
        StudentAdapter studentAdapter=new StudentAdapter(this,list);
        listView.setAdapter(studentAdapter);

    }
阅读更多
文章标签: Sqlite
个人分类: Android
上一篇android-SharedPreferences存储
下一篇自定义View
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭