一、进入数据库
命令行输入下列命令进入数据库
1.adb
2.adb shell
3.cd data
4.cd data
5.cd [包名]
6.创建数据库后
7.cd databases
即数据库存放在/data/data/[包名]/databases/路径下
常用命令
.schema 查看当前数据库中有哪些表
查看表中数据 select * from [tablename];
二、知识点
1、public void execsql(String sql);
执行单个sql语句,但不能执行SELECT和其他有返回值的sql语句;
2、sql语句
语句:create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)
说明:tabname——表名,col1,col2——字段名(即列名),not null——该字段非空,primary key——主键(某条记录的唯一标识符)。
3、public long insert (String table,String nullColumnHack,ContentValues values)
注:插入记录,table——表名,nullColumnHack——强行插入null值的字段(列名),values——一行记录的数据。
4、public int update (String table,ContentValues values,String whereClause,String[] whereArgs)
注:更新数据库中数据;table——想要更新的表名,values——想要更新的数据,whereClause——满足该whereClause子句的记录将会被更新,whereArgs——为whereClause传入参数。(可理解为:在表table中,根据whereClause和whereArgs查找出数据,更新为values)
如:更新person_inf表中所有主键大于20的人的人名,
ContentValues values = new ContentValues();
values.put(“name”,“新人名”);
int result = db.update(“person_inf”,values,”_id > ?”,new Integer[]{20});
5、public Cursor query (String table,String[] columns,String selection,String[] selectionArgs,String groupBy,String having,String orderBy)
注:查询,详情见帮助。
6.sqliteOpenHelper类中的onCreate方法
public abstract void onCreate (SQLiteDatabase db);
当调用sqliteOpenHelper的getWritableDatabase()或者getReadableDatabase()方法获取用于操作数据库的sqliteDatabase实例时,如果数据库不存在,Android系统会自动生成一个数据库,接着调用onCreta方法,onCreate方法在初次生成数据库时才被调用。
即:getWritableDatabase()、getReadableDatabase()在获取实例时,数据库不存在则创建,存在则不创建;而onCreate方法是第一次创建时自动调用的方法。因此,可重写该方法初始化数据表结构及数据等。
三、数据库版本version必须是正数!
四、掌握数据库操作的两个类sqliteDatabase和sqliteOpenHelper即可!
五、再理解数据库和表的创建
六、实例代码
package com.lucus.erseventh;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.sqliteDatabase;
import android.database.sqlite.sqliteDatabase.CursorFactory;
import android.database.sqlite.sqliteOpenHelper;
public class DatabaseHelper extends sqliteOpenHelper{
private final static String DB_NAME = "erSeventh.db";//数据库名称
private final static String TABLE_NAME = "erSeventhTable";//表名称
public final static String FIELD_ID="_id";//表列名,主键
public final static String FIELD_EVENT_NAME="eventName";//表列名
public final static String FIELD_REMIND_TIME="remindTime";//表列名
/**在sqliteOpenHelper的子类中,必须有该构造函数;context即activity对象,name即数据库名*/
public DatabaseHelper(Context context,String name,CursorFactory factory,
int version) {
super(context,DB_NAME,factory,version);//调用父类的构造函数
// TODO Auto-generated constructor stub
}
/**在sqliteOpenHelper的子类中,必须有该构造函数;context即activity对象,name即数据库名*/
/**该函数是在第一次创建数据库时执行,调用getWritableDatabase()或getReadableDatabase()方法时自动调用*/
public void onCreate(sqliteDatabase db) {
// TODO Auto-generated method stub
String sql = " create table " +
TABLE_NAME +
" ( " +
FIELD_ID +
" integer primary key," + //注意"前后有空格!!!
FIELD_EVENT_NAME +
" varchar," +
FIELD_REMIND_TIME +
" varchar ) ";
db.execsql(sql);
// db.execsql("create table evtesttable(_id int primary key,eventName varchar(20)),remindTime varchar(20)");
// db.execsql("create table eventName(_id int primary key,eventName varchar(20))");
System.out.println("Create a table");
}
/**该函数是在第一次创建数据库时执行,调用getWritableDatabase()或getReadableDatabase()方法时自动调用*/
/**插入*/
public void insert(String myEventName,String myRemindTime)
{
sqliteDatabase db = this.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put(FIELD_EVENT_NAME,myEventName);
cv.put(FIELD_REMIND_TIME,myRemindTime);
db.insert(TABLE_NAME,null,cv);//第二个参数为null,主键自增1
db.close();
System.out.println("Insert data");
}
/**插入*/
/**修改,修改FIELD_ID为id的记录,修改该记录的FIELD_EVENT_NAME和FIELD_REMIND_TIM*/
public void update(int id,String newEventName,String newRemindTime)
{
sqliteDatabase db = this.getWritableDatabase();
String where = FIELD_ID + "=?";
String[] whereValue = {Integer.toString(id)};
ContentValues cv=new ContentValues();
cv.put(FIELD_EVENT_NAME,newEventName);
cv.put(FIELD_REMIND_TIME,newRemindTime);
db.update(TABLE_NAME,cv,where,whereValue);
System.out.println("Modify data");
}
/**修改,修改FIELD_ID为id的记录,修改该记录的FIELD_EVENT_NAME和FIELD_REMIND_TIM*/
/**删除,删除FIELD_ID为id的记录*/
public void delete(int id)
{
sqliteDatabase db=this.getWritableDatabase();
String where=FIELD_ID + "=?";
String[] whereValue={Integer.toString(id)};
db.delete(TABLE_NAME,whereValue);
System.out.println("Delete data");
}
/**删除,删除FIELD_ID为id的记录*/
/**删除数据库?*/ public boolean deleteDBByName(String DBName) { Context context = null; context.deleteDatabase(DBName); return false; } /**删除数据库?*/ /**获取游标*/ public Cursor getCursor() { sqliteDatabase db=this.getWritableDatabase(); Cursor cursor=db.query(TABLE_NAME,null); return cursor; } /**获取游标*/ /**查询,查询FIELD_ID为id的记录*/ public Cursor query(int id) { sqliteDatabase db = this.getWritableDatabase(); String where = FIELD_ID + "=?"; String[] whereValue = {Integer.toString(id)}; Cursor cursor = db.query ( TABLE_NAME,new String []{"_id","eventName","remindTime"},whereValue,null ); return cursor; } /**查询,查询FIELD_ID为id的记录*/ @Override public void onUpgrade(sqliteDatabase db,int oldVersion,int newVersion) { // TODO Auto-generated method stub } }//end class DatabaseHelper