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


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

Android -SQLite数据库存储_第2张图片

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();        }    }

界面很简单如下
Android -SQLite数据库存储_第3张图片

下面给出主程序源码

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);    }}

更多相关文章

  1. Android 自动编译、打包生成apk文件 、命令行方式
  2. android直接用v4l2采集图片数据
  3. Android之从网络中获取数据并返回客户端的两种方式:XML格式返回
  4. android应用安全——数据安全
  5. 在 Android 应用程序中使用 Internet 数据
  6. android中使用sqlite、复制assets下的数据库到SD卡、支持大于1M

随机推荐

  1. 2012第一季度智能手机发货量报表
  2. android studio打jar包、aar包
  3. Android(安卓)APK升级代码编写心得
  4. [置顶] Android实训课程之三 这次课老师
  5. 如何编译运行Android系统自带桌面Launche
  6. Android:将AVD文件搬家(修改AVD路径)
  7. [导入]2010-03-06 传智播客—Android(六)通
  8. Android网络相关
  9. AIDE——运行于Android上的Android Java
  10. Android Studio 修改常用设置