android sqlite使用
2015-08-22 14:26
399 查看
Sqlite 使用
(初学笔记,若有不对,请指出。谢谢!)
一. 自定义一个类继承SQLiteOpenHelper
SQLiteOpenHelper这是一个抽象类,必须重写其他抽象方法,并且该类没有定义无参构造方法,
1.重写构造方法
在构造方法中定义数据库名称和版本号。
例如.
public MyDbHelper(Context context) {
super(context, "mysqlite.db", null, 1);
}
2.重写抽象方法
public void onCreate(SQLiteDatabase db) { //这个方法只在创建数据库是调用,只调用一次,适合用来创建表。
System.out.println("Student 表开始创建");
db.execSQL("create table student (id integer primary key autoincrement, name varchar(20), age integer)");
// db.close();//这里不能写,不知道为什么,害我浪费半天。
System.out.println("Student 表创建完成");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//这个方法是数据库升级时调用,版本增加时调用
System.out.println("更新版本 : 老版本:"+ oldVersion + "新版本:"+ newVersion );
}
二. 定义Dao类,操作数据库。
在此类中需要操作数据,所有需要有上面定义类的实例。
public class Dao {
private MyDbHelper dbHeler;
public Dao(Context context) {
this.dbHeler = new MyDbHelper(context);
}
public void add(String name, Integer age) { // 添加数据操作,使用exceSQL()方法时,没有返回值,可以用addg中方法。
SQLiteDatabase db = this.dbHeler.getWritableDatabase();
db.execSQL("insert into student (name, age) values (?,?)",
new Object[] { name, age });
db.close();
}
public long addg(String name, Integer age) {
SQLiteDatabase db = this.dbHeler.getWritableDatabase();
ContentValues v = new ContentValues();
v.put("name", name);
v.put("age", age);
long relt = db.insert("student", null, v);
db.close();
return relt;
}
public void delete(String name) {
SQLiteDatabase db = this.dbHeler.getWritableDatabase();
db.execSQL("delete from student where name = ?", new Object[] { name });
db.close();
}
public int deleteg(String name) {
SQLiteDatabase db = this.dbHeler.getWritableDatabase();
int relt = db.delete("student", "name = ?", new String[] { name });
db.close();
return relt;
}
public void update(String name, String age) {
SQLiteDatabase db = this.dbHeler.getWritableDatabase();
db.execSQL("update student set age = ? where name = ?", new Object[] {
age, name });
db.close();
}
public int updateg(String name, String age) {
SQLiteDatabase db = this.dbHeler.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("age", age);
int relt = db.update("student", values, "name = ?",
new String[] { name });
db.close();
return relt;
}
public String query(String name) {
SQLiteDatabase db = this.dbHeler.getReadableDatabase();
Cursor cursor = db.rawQuery("select age from student where name = ?",
new String[] { name });
Integer age = null;
if (cursor.moveToNext()) {
age = cursor.getInt(0);
}
cursor.close();
db.close();
if (age == null) {
return null;
}
return age.toString();
}
public String queryg(String name) {
SQLiteDatabase db = this.dbHeler.getReadableDatabase();
Cursor cursor = db.query("student", new String[] { "age" }, "name = ?",
new String[] { name }, null, null, null);
Integer age = null;
if (cursor.moveToNext()) {
age = cursor.getInt(0);
}
cursor.close();
db.close();
if (age == null) {
return null;
}
return age.toString();
}
}
上面代码中,有两种方法实现数据库操作。方法名以“g”结束的可以有返回值,能支持数据库操作对表的影响,可以再调用使用返回值;方法名没有g结尾的,没有返回值,不能准确知道你操作是否成功?建议使用有返回值,但有返回值的应该不能进行子查询(疑问:为什么不能像java 中preparedStatement一样?)。
只要用context对象实例化dao对象,就能进行sqlite数据库操作了。
(初学笔记,若有不对,请指出。谢谢!)
一. 自定义一个类继承SQLiteOpenHelper
SQLiteOpenHelper这是一个抽象类,必须重写其他抽象方法,并且该类没有定义无参构造方法,
1.重写构造方法
在构造方法中定义数据库名称和版本号。
例如.
public MyDbHelper(Context context) {
super(context, "mysqlite.db", null, 1);
}
2.重写抽象方法
public void onCreate(SQLiteDatabase db) { //这个方法只在创建数据库是调用,只调用一次,适合用来创建表。
System.out.println("Student 表开始创建");
db.execSQL("create table student (id integer primary key autoincrement, name varchar(20), age integer)");
// db.close();//这里不能写,不知道为什么,害我浪费半天。
System.out.println("Student 表创建完成");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//这个方法是数据库升级时调用,版本增加时调用
System.out.println("更新版本 : 老版本:"+ oldVersion + "新版本:"+ newVersion );
}
二. 定义Dao类,操作数据库。
在此类中需要操作数据,所有需要有上面定义类的实例。
public class Dao {
private MyDbHelper dbHeler;
public Dao(Context context) {
this.dbHeler = new MyDbHelper(context);
}
public void add(String name, Integer age) { // 添加数据操作,使用exceSQL()方法时,没有返回值,可以用addg中方法。
SQLiteDatabase db = this.dbHeler.getWritableDatabase();
db.execSQL("insert into student (name, age) values (?,?)",
new Object[] { name, age });
db.close();
}
public long addg(String name, Integer age) {
SQLiteDatabase db = this.dbHeler.getWritableDatabase();
ContentValues v = new ContentValues();
v.put("name", name);
v.put("age", age);
long relt = db.insert("student", null, v);
db.close();
return relt;
}
public void delete(String name) {
SQLiteDatabase db = this.dbHeler.getWritableDatabase();
db.execSQL("delete from student where name = ?", new Object[] { name });
db.close();
}
public int deleteg(String name) {
SQLiteDatabase db = this.dbHeler.getWritableDatabase();
int relt = db.delete("student", "name = ?", new String[] { name });
db.close();
return relt;
}
public void update(String name, String age) {
SQLiteDatabase db = this.dbHeler.getWritableDatabase();
db.execSQL("update student set age = ? where name = ?", new Object[] {
age, name });
db.close();
}
public int updateg(String name, String age) {
SQLiteDatabase db = this.dbHeler.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("age", age);
int relt = db.update("student", values, "name = ?",
new String[] { name });
db.close();
return relt;
}
public String query(String name) {
SQLiteDatabase db = this.dbHeler.getReadableDatabase();
Cursor cursor = db.rawQuery("select age from student where name = ?",
new String[] { name });
Integer age = null;
if (cursor.moveToNext()) {
age = cursor.getInt(0);
}
cursor.close();
db.close();
if (age == null) {
return null;
}
return age.toString();
}
public String queryg(String name) {
SQLiteDatabase db = this.dbHeler.getReadableDatabase();
Cursor cursor = db.query("student", new String[] { "age" }, "name = ?",
new String[] { name }, null, null, null);
Integer age = null;
if (cursor.moveToNext()) {
age = cursor.getInt(0);
}
cursor.close();
db.close();
if (age == null) {
return null;
}
return age.toString();
}
}
上面代码中,有两种方法实现数据库操作。方法名以“g”结束的可以有返回值,能支持数据库操作对表的影响,可以再调用使用返回值;方法名没有g结尾的,没有返回值,不能准确知道你操作是否成功?建议使用有返回值,但有返回值的应该不能进行子查询(疑问:为什么不能像java 中preparedStatement一样?)。
只要用context对象实例化dao对象,就能进行sqlite数据库操作了。
相关文章推荐
- Android中Java与web通信
- android之interpolator的用法详解
- Android dialog无标题栏样式style(for 自定义dialog)
- Android资源,国内镜像站点,博客文章等
- android源码学习规划
- [Java][Android][Process] 分享 Process 运行命令行封装类型
- android Dialog和EditText
- Android 实现m3u8视频缓存
- android 的页面跳转
- 如何获取视频路径
- Android Studio 下载地址【包括国内本地下载】
- Ubuntu 下载 & 编译 Android5.1 源码
- android 防止多次点击提交
- Android应用程序组件(三)
- Android四大组件之ContentProvider
- android从数据库中取音乐数据
- Android的Broadcast Receiver组件
- Android软硬整合技术(HAL&Framework):高阶的课程篇
- Android软硬整合技术(HAL&Framework):高阶的课程篇
- Android SurfaceView实现静态于动态画图效果