数据库:它就是一个软件,需要安装,安装完后就有自己的目录结构。
都有客户端和服务端,所有的数据库都实现了SQL标准
SQLite数据库:它是一个轻量级数据库,设计目的是嵌入式的,而且它占用的资源非常少
注意:除了主键不能存储任意的类型之外,其他的字段可以存放任意的数据类型
SqliteDatabase它要求:表的主键的字段名最好是_id,一定要_id 否则报错;
Cmd操作指令:
sqlite3 qjq.db 进入数据库
.tables 查看数据库里面的表
创建数据库文件:三种方式:
第一种通过上下文创建数据库:
public class DBsqlite {
private Context context;
public DBsqlite(Context context) {
super();
this.context = context;
}
public void createDB() {
//通过上下文创建数据库
context.openOrCreateDatabase("persons.db", Context.MODE_PRIVATE, null);
}
}
第二种SQLiteDatabase创建数据库
public void createDB(){
String dir="/data/data/"+context.getPackageName();
File file=new File(dir,"persons.db");
SQLiteDatabase.openOrCreateDatabase(file, null);
}
第三种创建一个help类继承SQLiteOpenHelper
实现DBhelp构造onCreate方法onUpgrade方法
public class DBhelp extends SQLiteOpenHelper {
public DBhelp(Context context) {
// 上下文 ,数据库名,游标工厂 ,数据版本
super(context, "persons.db", null, 2);
// TODO Auto-generated constructor stub
}
//数据库第一次创建之后调用该方法。创建表、视图。。。 或者初始化表信息
public void onCreate(SQLiteDatabase db) {
// 创建数据库
db.execSQL("create table fish(_id integer primary key autoincrement,name text)");
}
@Override
//当数据版本被改变则会执行该方法super(context, "persons.db", null, 3);
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// 版本修改表添加一列
db.execSQL("ALTER TABLE fish ADD amount integer");
}
Crud以下分别用两种方式crud了,一种是面向SQL ,一种是面向对象,但是面向对象的源码里面其实也是在帮你拼接sql。
public class OtherFishService {
private SQLiteOpenHelper mOpenHelper;
public OtherFishService(Context context) {
// TODO Auto-generated constructor stub
mOpenHelper = new DBHelper(context);
}
/**
* 插入数据
* @param name
*/
public void insert(String name){
SQLiteDatabase db = mOpenHelper.getWritableDatabase();
// String sql = "insert into fish(name) values(?)";
if(db.isOpen()){
// db.execSQL(sql, new Object[]{name});
//insert into fish
//ContentValues里面就是要插入的值
ContentValues values = new ContentValues();
values.put("name", name);
db.insert("fish", "_id", values);
db.close();
}
}
public List<Fish> query(){
List<Fish> fishs = new ArrayList<Fish>();
SQLiteDatabase db = mOpenHelper.getReadableDatabase();
// String sql ="select * from fish";
if(db.isOpen()){
//cursor 就是resultset
// Cursor cursor = db.rawQuery(sql, null);
Cursor cursor = db.query("fish",//表名
new String[]{"*"},//要查询的列名
null,//查询条件
null,//条件参数
null,//分组
null,//条件
null);//排序
while(cursor.moveToNext()){
//得到_id的下标
int column_index = cursor.getColumnIndex("_id");
//得到_id的值
int _id = cursor.getInt(column_index);
String name = cursor.getString(cursor.getColumnIndex("name"));
Fish fish = new Fish(_id, name);
fishs.add(fish);
}
//cursor使用完成之后一定要关闭
cursor.close();
db.close();
}
return fishs;
}
public void update(Fish fish){
SQLiteDatabase db = mOpenHelper.getWritableDatabase();
if(db.isOpen()){
// String sql = "update Fish set name = ? where _id = ?";
// db.execSQL(sql,new Object[]{fish.name,fish._id});
ContentValues values = new ContentValues();
values.put("name", fish.name);
String whereClause = " _id = ?";
String[] whereArgs = new String[]{fish._id+""};
db.update("fish", values, whereClause, whereArgs);
}
}
public void delete(int _id){
SQLiteDatabase db = mOpenHelper.getWritableDatabase();
if(db.isOpen()){
// String sql = "delete from fish where _id = ?";
// db.execSQL(sql,new Object[]{_id});
String whereClause = " _id = ?";
String[] whereArgs = new String[]{_id+""};
db.delete("fish", whereClause, whereArgs);
}
}
}