sqlite的增删改查详解
程序员文章站
2022-05-08 11:25:14
...
增删改查源代码:
myHelper.java
package com.example.sqlite3lianxi;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
public class myHelper extends SQLiteOpenHelper {
/*
* 参数(上下文,数据库文件名称,工厂游标,数据库文件版本号)
*/
public myHelper(Context context, String name, CursorFactory factory, int version) {
super(context, "people.db", null,version);
}
//数据库文件创建成功后调用
@Override
public void onCreate(SQLiteDatabase db) {
//SQLiteDatabase db是一个数据库操作对象
//注意如果本地有数据库了就不会执行此方法了
db.execSQL("create table people(id integer,name text)");
System.out.println("创建成功!");
}
//数据库文件需要更新时调用
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
System.out.println("数据库更新完成!");
}
}
MainActivity.java
package com.example.sqlite3lianxi;
import android.app.Activity;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//注意这句话执行后并没有创建数据库,仅创建了对象而已
myHelper helper=new myHelper(getBaseContext(),null, null, 2);
//当执行完这句话才创建完成数据库
helper.getWritableDatabase();
}
//增加数据
public void insert() {
//创建数据库对象
myHelper helper=new myHelper(getBaseContext(),null, null, 2);
//返回数据库操作对象
SQLiteDatabase database=helper.getReadableDatabase();
ContentValues values=new ContentValues();
values.put("name","老王");
values.put("name","老李");
//返回一个id数据的id,如果插入失败返回-1
//参数(表名,null,插入的价值)
long g=database.insert("people", null, values);
//关闭数据库连接
database.close();
}
//删除数据
public void delete() {
//创建数据库对象
myHelper helper=new myHelper(getBaseContext(),null, null, 2);
//返回数据库操作对象
SQLiteDatabase database=helper.getReadableDatabase();
//参数(表名,删除条件,删除条件的价值)
//返回受影响的行数i
int t=database.delete("people","name=?",new String[] {"老刘"});
//关闭数据库连接
database.close();
}
//修改数据
public void update() {
//创建数据库对象
myHelper helper=new myHelper(getBaseContext(),null, null, 2);
//返回数据库操作对象
SQLiteDatabase database=helper.getReadableDatabase();
ContentValues values=new ContentValues();
//参数(表名,要修改的值,修改条件,修改条件的值)
values.put("name","小红");
//返回受影响的行数i
//如果要更改全部的数据表可以不指定条件 .update("people",null,null);
int t=database.update("people", values,"name=?",new String[] {"老李"});
}
//查询数据
public void query() {
//创建数据库对象
myHelper helper=new myHelper(getBaseContext(),null, null, 2);
//返回数据库操作对象
SQLiteDatabase database=helper.getReadableDatabase();
/* 参数:
* distinct是否去除重复的数据
* table表名,columns要查询的列
* selection筛选条件规则
* selectionArgs筛选条件规则的值
* grounBy分组
* having分组筛选
* orderBy排序 //升序或降序
* limit分页
*/
//返回查询到的结果集
Cursor cursor=database.query(true, "people", new String[] {"name"},null, null,null,null,null,null);
//遍历结果集
while(cursor.moveToNext()) {
String name=cursor.getString(cursor.getColumnIndex("name"));
System.out.println("name="+name);
}
//关闭数据库连接
database.close();
}
}
增删改查小结:
我们要实现sqlite的增删改查就要写一个类继承自SQLiteOpenHelper 类
并重新两个方法和一个构造方法 :
//参数(上下文,数据库文件名称,工厂游标,数据库文件版本号号
public myHelper(Context context, String name, CursorFactory factory, int version);
//数据库文件创建成功后调用
@Override
public void onCreate(SQLiteDatabase db){};
//数据库文件需要更新时调用
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){}
让后在主MainActivity中去实例化它,它返回数据库操作对象,并用此数据库操作对象实现数据库的增删改查
你会发现,用此封装好的数据库操作对象,来实现数据库的增删改查,使用一些简单的SQL语句还可以,但是实现复杂的SQL语句就不行了,因此我们就要用到SQL的原生语句,我们使用返回数据库操作象点execSQL(sql语句)方法进行复杂的SQL语句使用;
例:
增删改我们使用 :
execSQL();方法
但是增删改没有返回结果集我们可以使用execSQL()方法
但我们要查询结果返回结果集,我们就不能使用execSQL()方法了,因此我们要使用
例:
查询我们使用 :
db.rawQuery(筛选条件的sql语句,筛选条件的值);
它返回一个查询到的结果集
//遍历结果集
while(cursor.moveToNext()) {
//db.getString(0);此参数传入列的索引
//如果传入列的索引麻烦,你还可以使用getColumnIndex("name")方法通过列名 获取列的索引
String name=cursor.getString(cursor.getColumnIndex("name"));
System.out.println("name="+name);
}
}
sqlite事务
使用原生SQL语句
为什么要关闭SQL的数据库连接问题 :
据上图所示:
每执行一次**helper.getReadableDatabase();或者 helper.getWritableDatabase方法将连接一次数据库
而数据库的连接是有限的,过多的连接会造成资源的浪费,所以每次连接数据库,执行完相应的功能模块之后我们一定要使用关闭数据库方法close();关闭数据库
更加具体的sqlite详解传送门:http://www.runoob.com/w3cnote/android-tutorial-sqlite-intro.html