下午看了这个,有点意思..
1.sqlite介绍
2.sqliteopenhelper使用方法
3.使用adb访问sqlite
SQLiteOpenHelper使用方法
getReadableDatabase()
getWritableDatabase()
//下面三个是回调函数
onCreate(SQLiteDatabase db)
onOpen(SQLiteDatabase db)
on upgrade
先得到一个sqliteopenhelper对象,//这个是抽象类
通过它的getreadableDatabase()或者
getWriteableDatabase得到一个
sqlitedatabase对象
sqlite的命令是以 .开头的.
简要学习笔记如上.
下面的写一些心得.
得到一个sqliteDatabase的步骤如下.
1.继承抽象类sqliteopenhelper
2.在另外的类中生成一个sqliteopenhelper
3.
如果只读,则
DatabaseHelper dh = new DatabaseHelper(MainActivity.this, "test_ck_db", 2);
SQLiteDatabase db = dh.getReadableDatabase();
如果要写入,则
DatabaseHelper dh = new DatabaseHelper(MainActivity.this, "test_ck_db", 2);
SQLiteDatabase db = dh.getWritableDatabase();
/**
* 在sqlhelper的子类中必须有这个构造函数
* @param context activity对象
* @param name 表名
* @param factory 传空值
* @param version 当前数据库的版本, 一定是正数 并且递增
*/
public DatabaseHelper(Context context, String name, CursorFactory factory,
int version) {
super(context, name, factory, version);
//
// TODO Auto-generated constructor stub
}
//注意一下,version版本号一定要>=当前版本号.不然会出错.
下面写adb的简单的使用方法.
首先
adb shell //进入shell
cd data
cd data
//到达此目录后
ls -l //找到需要进入的文件
cd xxx.xx.xxxx //data下面文件的存放都是包名
cd databases //进入这个下面.
使用 sqlite3 test_ck_db 就能进入数据库啦..
sqlite3数据库 所有的语句后面都要有个;号.这点需要注意..
然后,说说sqlite数据库用java实现简单创更增删改查
创建
class CreateDatabaseListener implements OnClickListener {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
DatabaseHelper dh = new DatabaseHelper(MainActivity.this, "test_ck_db", 2); //类,数据库名字,版本号.3个组件分别对应
SQLiteDatabase db = dh.getReadableDatabase();
//获得一个可读的数据库
}
}
执行这段代码后,会调用回调函数.. 也就是继承了sqliteopenhelper类的函数的抽象方法.
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
db.execSQL("create table user(id int, name varchar(20))");
}
简单的创建了一张表
更新
class updateDatabaseListener implements OnClickListener {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
DatabaseHelper dh = new DatabaseHelper(MainActivity.this, "test_ck_db", 3); //只要当前版本号,大于以前的版本号了就会更新.
SQLiteDatabase db = dh.getReadableDatabase();
}
}
执行这段代码后也,会调用回调函数.
//回调函数
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
//升级数据库时调动.
System.out.println("呵呵");
}
增
class insertListener implements OnClickListener {
@Override
public void onClick(View v) {
//生成contentvalues'对象
ContentValues values = new ContentValues();
//向该对象中插入键值对, 其中键是列名,值是希望插入到这一列的值,
values.put("id",1);
values.put("name", "chenkai");
DatabaseHelper dh = new DatabaseHelper(MainActivity.this, "test_ck_db", 2); //获得一个可写的数据库的连接.
SQLiteDatabase db = dh.getWritableDatabase();
db.insert("user", null, values); //生成contentvalues对象的原因是用于 insert的第三个参数需要它,并且该对象是个键值对.
//sql语句 insert into user values(???) id = ?, name = ?
}
class deleteListener implements OnClickListener {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
DatabaseHelper dh = new DatabaseHelper(MainActivity.this, "test_ck_db", 2);
SQLiteDatabase db = dh.getWritableDatabase();
db.delete("user", "id=?", new String[] {"1"});
//sql语句之删除语句delete user where id=?
}
}
改
class updatebaseListener implements OnClickListener {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
DatabaseHelper dh = new DatabaseHelper(MainActivity.this, "test_ck_db", 2);
SQLiteDatabase db = dh.getWritableDatabase();
//得到一个可写的连接
ContentValues values = new ContentValues();
values.put("name", "ck_wizard");
// 第一个参数是表名,第二个参数
db.update("user", values, "id=?", new String[]{"1"});
//table 要更新的表名
//values 是一个要更新的对象
//whereclause 是where子句
//whereArgs 前面有几个占位符,后面就有几个string值.
//sql语句之更新 update user set name = ? where id = ?
}
}
查
class queryListener implements OnClickListener {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
DatabaseHelper dh = new DatabaseHelper(MainActivity.this, "test_ck_db", 2);
SQLiteDatabase db = dh.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);
}
//sqlite中的查询需要使用到游标, 而且getString函数的实参要为表的编号.
//sql语句之查询 select * from user where id = ? having orderby groupby
}
}
大概这就是我下午学习的东西...