Android SQLite
来源:互联网 发布:瑞士方阵知乎 编辑:程序博客网 时间:2024/05/18 10:08
SQLiteOpenHelper 系统提供的一个助手类 用于访问SQLite数据库
要想对数据库进行操作 必须得到SQLiteDatabase的一个对象
获得SQLiteDatabase对象的方法:
首先要 new 一个SQLiteOpenHelper 对象 (由于SQLiteOpenHelper 是一个抽象类,必须新建一个类继承他)
使用这个对象的 getReadableDatabase() 或 getWritableDatabase()方法就可以获得一个 可读 或 可写 的数据库对象 SQLiteDatabase
在SQLiteOepnHelper的子类当中,必须有该构造函数:public DatabaseHelper(Context context, String name, CursorFactory factory,
int version) {
//必须通过super调用父类当中的构造函数
super(context, name, factory, version);
}
在第一次创建数据库的时候(也就是第一次调用getReadableDatabase() 或 getWritableDatabase() 方法的时候)
系统会自动调用 onCreate() 这个回调函数,我们在可以在创建这个类时复写这个函数
下面是一个SQLiteOpenHelper 助手类的例子:
//DatabaseHelper作为一个访问SQLite的助手类,提供两个方面的功能,//第一,getReadableDatabase(),getWritableDatabase()可以获得SQLiteDatabse对象,通过该对象可以对数据库进行操作//第二,提供了onCreate()和onUpgrade()两个回调函数,允许我们在创建和升级数据库时,进行自己的操作public class DatabaseHelper extends SQLiteOpenHelper {private static final int VERSION = 1;//在SQLiteOepnHelper的子类当中,必须有该构造函数 version为版本号 版本号是递增的public DatabaseHelper(Context context, String name, CursorFactory factory,int version) {//必须通过super调用父类当中的构造函数super(context, name, factory, version);// TODO Auto-generated constructor stub}public DatabaseHelper(Context context,String name){this(context,name,VERSION);}public DatabaseHelper(Context context,String name,int version){this(context, name,null,version);}//该函数是在第一次创建数据库的时候执行,实际上是在第一次得到SQLiteDatabse对象的时候,才会调用这个方法@Overridepublic void onCreate(SQLiteDatabase db) {// TODO Auto-generated method stubSystem.out.println("create a Database");//execSQL函数用于执行SQL语句db.execSQL("create table user(id int,name varchar(20))");}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {// TODO Auto-generated method stubSystem.out.println("update a Database");}}
public class SQLiteActivity extends Activity { /** Called when the activity is first created. */private Button createButton;private Button insertButton;private Button updateButton;private Button updateRecordButton;private Button queryButton; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); createButton = (Button)findViewById(R.id.createDatabase); updateButton = (Button)findViewById(R.id.updateDatabase); insertButton = (Button)findViewById(R.id.insert); updateRecordButton = (Button)findViewById(R.id.update); queryButton = (Button)findViewById(R.id.query); createButton.setOnClickListener(new CreateListener()); updateButton.setOnClickListener(new UpdateListener()); insertButton.setOnClickListener(new InsertListener()); updateRecordButton.setOnClickListener(new UpdateRecordListener()); queryButton.setOnClickListener(new QueryListener()); } class CreateListener implements OnClickListener{@Overridepublic void onClick(View v) {//创建一个DatabaseHelper对象DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,"test_mars_db");//只有调用了DatabaseHelper对象的getReadableDatabase()方法,或者是getWritableDatabase()方法之后,才会创建,或打开一个数据库SQLiteDatabase db = dbHelper.getReadableDatabase();} } class UpdateListener implements OnClickListener{@Overridepublic void onClick(View v) {DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,"test_mars_db",2);SQLiteDatabase db = dbHelper.getReadableDatabase();} } class InsertListener implements OnClickListener{@Overridepublic void onClick(View v) {//生成ContentValues对象ContentValues values = new ContentValues();//想该对象当中插入键值对,其中键是列名,值是希望插入到这一列的值,值必须和数据库当中的数据类型一致values.put("id", 1);values.put("name","zhangsan");DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,"test_mars_db",2);SQLiteDatabase db = dbHelper.getWritableDatabase();//调用insert方法,就可以将数据插入到数据库当中db.insert("user", null, values);} } //更新操作就相当于执行SQL语句当中的update语句 //UPDATE table_name SET XXCOL=XXX WHERE XXCOL=XX... class UpdateRecordListener implements OnClickListener{@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stub//得到一个可写的SQLiteDatabase对象DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,"test_mars_db");SQLiteDatabase db = dbHelper.getWritableDatabase();ContentValues values = new ContentValues();values.put("name", "zhangsanfeng");//第一个参数是要更新的表名//第二个参数是一个ContentValeus对象//第三个参数是where子句db.update("user", values, "id=?", new String[]{"1"});} } class QueryListener implements OnClickListener{@Overridepublic void onClick(View v) {System.out.println("aaa------------------");Log.d("myDebug", "myFirstDebugMsg");DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,"test_mars_db");SQLiteDatabase db = dbHelper.getReadableDatabase();Cursor cursor = db.query("user", new String[]{"id","name"}, "id=?", new String[]{"1"}, null, null, null);while(cursor.moveToNext()){String name = cursor.getString(cursor.getColumnIndex("name"));System.out.println("query--->" + name);}} } }
使用adb访问SQLite
对SQLite的 crud 操作
创建一个DatabaseHelper对象 创建一张表:
如上例中,点击按钮createButton 触发点击事件CreateListener
//创建一个DatabaseHelper对象
DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,"test_mars_db");
此时并未调用回调函数onCreate()
因为只有调用了DatabaseHelper对象的getReadableDatabase()方法,或者是getWritableDatabase()方法之后,才会创建,或打开一个数据库
SQLiteDatabase db = dbHelper.getReadableDatabase();
此时调用了getReadableDatabase()方法,因此系统调用回调函数onCreate() ,
并执行其中的代码 create table user(id int,name varchar(20))来创建一张名为 test_mars_db 的表,我们可以使用adb来访问SQLite来查看是否已经生成了这张表。
向表中插入一条新数据:
id , name 是这张表的列名,如果我们想插入的数据是 1,"zhangsan",那么
向表中插入数据时,需要将 被插入数据 放入一个ContentValues对象中,再将这个ContentValues对象插入到SQLiteDatabase 对象中
ContentValues对象类似一个map,我们可以向values 中插入键值对:
ContentValues values = new ContentValues();
values.put("id", 1);
values.put("name","zhangsan");
其中键是列名,值是希望插入到这一列的值,值必须和数据库当中的数据类型一致
新建一个SQLiteOpenHelper 对象: DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,"test_mars_db",2);
通过
SQLiteDatabase db = dbHelper.getWritableDatabase();
获取一个可写的SQLiteDatabase 对象 从而进行插入操作(使用insert("表名",null,ContentValues对象)方法)
db.insert("user", null, values);
更新操作:
修改表中数据
得到一个可写的SQLiteDatabase对象
DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,"test_mars_db");
SQLiteDatabase db = dbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("name", "zhangsanfeng");
//第一个参数是要更新的表名
//第二个参数是一个ContentValeus对象
//第三个参数是where子句
//new String[]{"1"} 中的值“1”代表?的值 也就是id=1
db.update("user", values, "id=?", new String[]{"1"});
查询:
//获得助手类对象
DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,"test_mars_db");
//获得可写的数据库对象
SQLiteDatabase db = dbHelper.getReadableDatabase();
//将查询结果放入游标中
Cursor cursor = db.query("user", new String[]{"id","name"}, "id=?", new String[]{"1"}, null, null, null);
//cursor.moveToNext()用于判断是否还有下一条数据
//cursor.getColumnIndex("name") 根据列名查询该条数据的对应列的值
while(cursor.moveToNext()){
String name = cursor.getString(cursor.getColumnIndex("name"));
System.out.println("query--->" + name);
}
- 【Android】【Sqlite】sqlite 相关
- android sqlite
- Android SQLite
- android---SQLite
- android sqlite
- android sqlite
- Android SQLite
- Android SQLite
- Android SQLite
- SQLite Android
- Android SQLite
- android sqlite
- Android SQLite
- Android SQLite
- android sqlite
- android:SQlite
- android sqlite
- Android SQLite
- HDU 1534 Schedule Problem
- linux 下使用supervisor管理源码启动的openerp
- openfire二次开发eclipse环境搭建
- 用Supervisord管理Python进程
- iphone 后台循环播放音乐
- Android SQLite
- PL/SQL Developer 9.0.1.1613
- C++文件操作自定义函数
- 一些之前遇到的问题
- ini2440:通过JLink烧写BootLoader到Nor Flash
- 脑力风暴之小毛驴历险记(2)---谁敢动我的金币(上)
- JAVA日期时间小结
- Android之res目录
- HTTP协议中PUT和POST使用区别