Android -SQLite数据库存储
来源:互联网 发布:怎样自学c语言 编辑:程序博客网 时间:2024/04/29 22:57
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); }}
2 0
- Android 数据库存储 SQLite
- Android -SQLite数据库存储
- Android SQLite数据库存储
- Android SQLite数据库存储
- Android SQLite 数据库存储
- Android SQLite 数据库存储
- Android----SQLite数据库存储
- Android---SQLite数据库存储
- Android存储---SQLite数据库存储
- android-数据存储-SQLite数据库
- android-SQLite数据库存储数据
- Android的SQLite数据库存储
- android数据存储----SQLite数据库
- Android SQLite数据库存储实现
- Android的SQLite数据库存储
- Android存储之SQLite数据库
- Android中的SQLite数据库存储
- Android中SQLite数据库存储
- UE4函数和属性说明符
- LeetCode 29: Divide Two Integers
- Eclipse中使用SVN
- Android的fuzz测试技术之符号执行浅谈-android学习之旅(82)
- c++, windows系统 复制粘贴 任意字符名称 文件
- Android -SQLite数据库存储
- android布局中如何把include布局隐藏掉的方法
- jsf 实例代码
- hadoop1 eclipse插件编译
- Android中Scroller类的分析
- Eclipse搭建SSH(Struts2+Spring3+Hibernate3)框架项目教程
- 【turtlebot】陀螺仪的安装以及标定(iRobot Create 底盘+ADXRS610陀螺仪)
- Mysql常用命令详解;做参考文档使用
- URAL 1282 Game Tree