Android -SQLite数据库存储

android 系统集成了一个轻量级的数据库,SQLite只是一个嵌入式的数据库引擎;android提供SQLiteDatabase代表一个数据库,一旦应用程序获得了SQLiteDatabase对象,接下来就可以通过SQLiteDatabase对象来操作管理数据了,下面分别就创建数据库以及增删改查给出例子;
数据库创建的位置如下
这里写图片描述


android操作SQLite需要继承自SQLiteOpenHelper 来得到连接。实现了2个方法:onCreate和onUpgrade。第一次获得对数据库的读或写操作的时候调用onCreate,所以这里面写创建数据表的语句;在数据库版本变化的时候会调用onUpgrade,所以如果表结构变化了就在这里修改。
代码结构如图两个Java文件

这里写图片描述

TestSQLiteOpenHelper

public class TestSQLiteOpenHelper extends SQLiteOpenHelper{
    public TestSQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }


    public TestSQLiteOpenHelper(Context context, String name) {
        this(context, name, null, 1);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
    db.execSQL("create table if not exists user(id Integer primary key autoincrement,name varchar(20),password varchar(20))");
    }

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

    }
}

创建数据库

getWritableDatabase()和getReadableDatabase()方法都可以获取一个用于操作数据库的SQLiteDatabase实例。 但getWritableDatabase()方法以读写方式打开数据库,一旦数据库的磁盘空间满了,数据库就只能读而不能写, getWritableDatabase()打开数据库就会出错。getReadableDatabase()方法先以读写方式打开数据库, 倘若使用如果数据库的磁盘空间满了,就会打开失败,当打开失败后会继续尝试以只读方式打开数据库.

 //四个参数,第一个上下文,2表的名字,34都已经在构造函数中固定了,为 null和1
      TestSQLiteOpenHelper Helper=new TestSQLiteOpenHelper(getApplicationContext(),"MY_FIRST_DB.db");
      SQLiteDatabase   database=Helper.getWritableDatabase();//获取一个用于操作数据库的SQLiteDatabase实例

增加数据

  /**
     * 增加数据
     */
    private void insertDatabase() {
        ContentValues values=new ContentValues();
        values.put("name",username.getText().toString());
        values.put("password",password.getText().toString());
        //两种方式插入数据库
        // database.execSQL();
        database.insert("user",null,values);
    }

删除数据


 /**
     * 删除数据
     */
    private void deleteDatabase() {
        database.delete("user","name=?",new String[]{"zhangsan"});
    }

更改数据

/**
     * 更改数据
     */
    private void updataDatabase() {
        ContentValues values1=new ContentValues();
        values1.put("password","abcd");

        database.update("user",values1,"name=?",new String[]{"zhangsan"});
    }

查询数据

 /**
     * 查询数据
     */
    private void select() {
        //两种数据库查询方式
        //根据id倒序排列;offset忽略前两个,且只查询两条数据,后面为数量。前面为忽略数
        Cursor cursor=database.query("user",null,null,null,null,null,"id DESC","2,1");

        //根据id倒序排列;offset忽略前两个,且只查询两条数据,
       // Cursor cursor=database.rawQuery("select * from user ORDER BY id DESC LIMIT 2   OFFSET 2",null);
        cursor.moveToFirst();
        while (!cursor.isAfterLast()){
            //getString 需要传入ColumnIndex类型的参数,
            // 也就是第几个记录,可以先查询name的ColumnIndex数值传入
            String name=cursor.getString(cursor.getColumnIndex("name"));
            String password=cursor.getString(cursor.getColumnIndex("password"));

            Log.d("curser", "用户名" + name + "密码" + password);
            cursor.moveToNext();

        }
    }

界面很简单如下
这里写图片描述

下面给出主程序源码

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private Button button_creatdb;
    private Button button_insert;
    private Button button_delete;
    private Button button_update;
    private Button button_select;
    private SQLiteDatabase database;
    private EditText username;
    private EditText password;

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

        username= (EditText) findViewById(R.id.edittext_username);
        password= (EditText) findViewById(R.id.edittext_password);

        button_creatdb= (Button) findViewById(R.id.button1);
        button_insert= (Button) findViewById(R.id.button2);
        button_delete = (Button) findViewById(R.id.button3);
        button_update= (Button) findViewById(R.id.button4);
        button_select= (Button) findViewById(R.id.button5);
        button_select.setOnClickListener(this);
        button_update.setOnClickListener(this);
        button_delete.setOnClickListener(this);
        button_creatdb.setOnClickListener(this);
        button_insert.setOnClickListener(this);



        //四个参数,第一个上下文,2表的名字,34都已经在构造函数中固定了,为 null和1
        TestSQLiteOpenHelper Helper=new TestSQLiteOpenHelper(getApplicationContext(),"MY_FIRST_DB.db");
        //    getWritableDatabase()和getReadableDatabase()方法都可以获取一个用于操作数据库的SQLiteDatabase实例。
        //    但getWritableDatabase()方法以读写方式打开数据库,一旦数据库的磁盘空间满了,数据库就只能读而不能写,
        //    getWritableDatabase()打开数据库就会出错。getReadableDatabase()方法先以读写方式打开数据库,
        //    倘若使用如果数据库的磁盘空间满了,就会打开失败,当打开失败后会继续尝试以只读方式打开数据库.

        database=Helper.getWritableDatabase();//获取一个用于操作数据库的SQLiteDatabase实例
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){


            case R.id.button1:
                Toast.makeText(getApplicationContext(),"已创建数据库",Toast.LENGTH_LONG).show();
                break;
            case R.id.button2:
                insertDatabase();
                break;
            case R.id.button3:
                deleteDatabase();
                break;
            case R.id.button4:
                updataDatabase();
                break;
            case R.id.button5:
                select();
                break;
            default:
                break;
        }

    }

    /**
     * 查询数据
     */
    private void select() {
        //两种数据库查询方式
        //根据id倒序排列;offset忽略前两个,且只查询两条数据,后面为数量。前面为忽略数
        Cursor cursor=database.query("user",null,null,null,null,null,"id DESC","2,1");

        //根据id倒序排列;offset忽略前两个,且只查询两条数据,
       // Cursor cursor=database.rawQuery("select * from user ORDER BY id DESC LIMIT 2   OFFSET 2",null);
        cursor.moveToFirst();
        while (!cursor.isAfterLast()){
            //getString 需要传入ColumnIndex类型的参数,
            // 也就是第几个记录,可以先查询name的ColumnIndex数值传入
            String name=cursor.getString(cursor.getColumnIndex("name"));
            String password=cursor.getString(cursor.getColumnIndex("password"));

            Log.d("curser", "用户名" + name + "密码" + password);
            cursor.moveToNext();

        }
    }

    /**
     * 删除数据
     */
    private void deleteDatabase() {
        database.delete("user","name=?",new String[]{"zhangsan"});
    }
    /**
     * 更改数据
     */
    private void updataDatabase() {
        ContentValues values1=new ContentValues();
        values1.put("password","abcd");

        database.update("user",values1,"name=?",new String[]{"zhangsan"});
    }
    /**
     * 增加数据
     */
    private void insertDatabase() {
        ContentValues values=new ContentValues();
        values.put("name",username.getText().toString());
        values.put("password",password.getText().toString());
        //两种方式插入数据库
        // database.execSQL();
        database.insert("user",null,values);
    }
}
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值