创建数据库的API
* SQLiteDatabase.openDatabase : 直接打开一个数据库
* SQLiteDatabase.openOrCreateDatabase : 数据库存在就打开,不存在就创建
创建表:语法:
create table tabname(col1 type1 [not null][primary key], col2 type2[not null], ··· )注:tabname为表名col1、col2为字段名字type1、type2为字段类型在[]中的约束条件是可以选的
字段名 类型 长度 约束 说明 id INTEGER 主键,自增长 编号 name VARCHAR 20 非空 姓名 cid INTEGER 所在班级 age INTEGER 大于18且小于60 年龄 gender BIT 默认为1,表示男 性别 score REAL 成绩createtablestudent(idINTEGERPRIMARYKEYAUTOINCREMENT,nameVARCHAR(20)NOTNULL, cidINTEGER, ageINTEGERCHECK(age>18andage<60), genderBITDEFAULT(1), scoreREAL);注:SQL中不区分大小写
示例代码:
StudentDBHelper helper=new StudentDBHelper(this);
helper.getReadableDatabase();//这段代码执行以后才会创建数据库
/**
* Student数据库打开和创建的帮助类
* SQLiteOpenHelper:安卓提供给开发人员创建和维护数据库的工具
*/
public class StudentDBHelper extends SQLiteOpenHelper {
/**
* @param context
* : 上下文
* @param name
* : 数据库的名字
* @param factory
* : 游标工厂,相当于一个光标,可以快速定位到文件的某一个位置
* 默认情况下光标在文件的第0个位置
* 默认情况下无需重写光标,所以传null即可
* @param version
* : 版本号.整形
*/
public StudentDBHelper(Context context) {
super(context, "student.db", null, 1);
// TODO Auto-generated constructor stub
}
// 数据库第一次创建执行的逻辑,一旦数据库创建了,这个方法就不会在执行了
@Override
public void onCreate(SQLiteDatabase db) {
}
// 数据库更新执行的逻辑
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
.数据库表的创建
数据库更新调用的方法
数据库的增删改查
* 添加操作
public void add(Context context, String name, float money) {
helper = new BankDBOpenHelper(context);
SQLiteDatabase db = helper.getWritableDatabase();
db.execSQL("insert into account (name,money) values (" + name + "," + money + ")");
db.close();
}
* 删除操作
public void del(Context context, String name) {
helper = new BankDBOpenHelper(context);
SQLiteDatabase db = helper.getWritableDatabase();
db.execSQL("delete from account where name = '" + name + "'");
db.close();
}
* 更新操作
public void update(Context context, String name, float money) {
helper = new BankDBOpenHelper(context);
SQLiteDatabase db = helper.getWritableDatabase();
db.execSQL("update account set money = " + money + " where name = '" + name + "'");
db.close();
}
* 查询操作
public float query(Context context, String name) {
float money = 0;
helper = new BankDBOpenHelper(context);
SQLiteDatabase db = helper.getWritableDatabase();
// 该方法的返回值是void,使用这个API对查询方法来说是没有意义的,所以不能用
// db.execSQL("query account where name = "+name);
// 方法的返回值是一个游标
Cursor cursor = db.rawQuery(" select * from account where name = '" + name + "'", null);
// 判断游标是否能指向一条数据
boolean result = cursor.moveToFirst();
if (result) {
money = cursor.getFloat(0);
}else{
money = -1;
}
// 释放资源
cursor.close();
db.close();
return money;
}
* 查看数据库内容的快捷方法
* adb shell
* cd /data/data/pkg name/databases
* sqlite3 xx.db;
.sql的注入问题和web的数据安全
* '1' or '1'='1'
安卓原生API实现增删改查
谷歌API的优势
* 手写SQL语句常见错误
* from 写成 form
* 中文全角字符的空格
* 中文全角字符的问号
* 不知道操作到底有没有成功