SQLite使用
最近在做一个汽车项目,就拿这个项目当例子
创建CarDBHelper类用于创建数据库
public class CarDBHelper extends SQLiteOpenHelper {
//类没有实例化,是不能用作父类构造器的参数,必须声明为静态
//数据库名称 为了使用第三方软件打开数据库,最后加上后缀名
private static final String DATABASENAME = "mydb.db"; //数据库名称
private static final String TABLE_NAME = "cars";
private static final int DATABASEVERSION = 1; //数据库版本
public CarDBHelper(Context context) {
//第三个参数CursorFactory指定在执行查询时获得一个游标实例的工厂类,设置为null,代表使用系统默认的工厂类
super(context, DATABASENAME, null, DATABASEVERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
String sql = "create table if not exists " + TABLE_NAME + "(id integer primary key,carid integer,name varchar(50),initial varchar(50),parentid integer,logo varchar(300),depth integer);";
db.execSQL(sql);
Log.e("db", "ok");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
String sql = "DROP TABLE IF EXISTS " + TABLE_NAME;
db.execSQL(sql);
onCreate(db);
}
//访问器
public static String getDataBasename() {
return DATABASENAME;
}
public static int getDataBaseversion() {
return DATABASEVERSION;
}
public static String getTablename() {
return TABLE_NAME;
}
}
创建Car实体类
public class Car implements Serializable {
private int id;
private String name;//名称
private String initial;//首字母
private int parentid;//父级ID
private String logo;
private int depth;//深度 1品牌 2子公司 3车型 4具体车型
public Car() {
}
public Car(int id, String name, String initial, int parentid, String logo, int depth) {
this.id = id;
this.name = name;
this.initial = initial;
this.parentid = parentid;
this.logo = logo;
this.depth = depth;
}
public int getDepth() {
return depth;
}
public void setDepth(int depth) {
this.depth = depth;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getInitial() {
return initial;
}
public void setInitial(String initial) {
this.initial = initial;
}
public int getParentid() {
return parentid;
}
public void setParentid(int parentid) {
this.parentid = parentid;
}
public String getLogo() {
return logo;
}
public void setLogo(String logo) {
this.logo = logo;
}
@Override
public String toString() {
return "Car{" +
"id=" + id +
", name='" + name + '\'' +
", initial='" + initial + '\'' +
", parentid=" + parentid +
", logo='" + logo + '\'' +
", depth=" + depth +
'}';
}
}
创建CarTableOperate用于对表的操作
public class CarTableOperate {
//声明数据库辅助类对象
public CarDBHelper mHelper;
//声明一个数据库操作类
private SQLiteDatabase db = null;
//声明一个游标接口对象,用来遍历查询结果
public Cursor mCursor = null;
public CarTableOperate(Context context) {
mHelper = new CarDBHelper(context);
}
//向car表中添加数据
public void insertData(Car car) {
//使用sqlitedatabase自带的插入方法
db = mHelper.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put("CarId", car.getCar_id());
cv.put("CarName", car.getCar_name());
cv.put("ParentId", car.getParentid());
cv.put("CarLogo", car.getCar_logo());
cv.put("Depth", car.getCar_depth());
db.insert(CarDBHelper.getTablename(), null, cv);
//关闭连接,释放资源
db.close();
}
//删除car表中的所有数据
public void deleteAllMusic() {
db = mHelper.getWritableDatabase();
db.delete(CarDBHelper.getTablename(), null, null);
db.close();
}
//查询 car表中的所有数据
public List<Car> selectAllCar() {
List<Car> mList = new ArrayList<>();
Car car = null;
db = mHelper.getWritableDatabase();
mCursor = db.rawQuery("select * from cars order by id desc", null);
while (mCursor.moveToNext()) {
int id = mCursor.getInt(0);
int car_id = mCursor.getInt(1);
String car_name = mCursor.getString(2);
String car_initial = mCursor.getString(3);
int parentId = mCursor.getInt(4);
String car_logo = mCursor.getString(5);
int depth = mCursor.getInt(6);
car = new Car(car_id, car_name, car_initial, parentId, car_logo, depth);
mList.add(car);
}
mCursor.close();
db.close();
return mList;
}
}
接下来就是在activity中使用了数据主要是在极速数据上面的接口
List<Car> mCars=new ArrayList<>();
CarTableOperate mCarTableOperate = new CarTableOperate(context);
mCars = mCarTableOperate.selectAllCar();
看看运行截图
生成的数据库文件