Sqlite的介绍 Sqlite的初步认识
Sqlite总体来讲是一个易上手的优质轻量级数据库,拥有事务,锁,游标,savepoint等一般DBMS数据库的特性,更令人惊艳的是支持WAL(write ahead log)模式,对于轻量级DB来说优势还是比较明显的,当然也会有一些局限性,如高并发的读写,SQL标准不全等. 在Android开发中默认的保存路径为:/data/data/your.app.package/databases/your-db-name
getWritableDatabase()和getReadableDatabase()的区别:
调用getReadableDatabase()方法先执行getWritableDatabase()读写方式打开数据库,
倘若使用如果数据库的磁盘空间满了,就会打开失败,当打开失败后会继续尝试以只读方式打开数据库.
客户端工具
感觉sqlite expert和sqlite develop还是不错的,expert的最新版本3.4.11。下载地址http://www.sqliteexpert.com/download.html,
有收费版和免费版区分,收费版多了加密支持,以及lua和pascal语言支持,其他一样
存储类型:
每个存放在sqlite数据库中(或者由这个数据库引擎操作)的值都有下面中的一个存储类:
l NULL,值是NULL
l INTEGER,值是有符号整形,根据值的大小以1,2,3,4,6或8字节存放
l REAL,值是浮点型值,以8字节IEEE浮点数存放
l TEXT,值是文本字符串,使用数据库编码(UTF-8,UTF-16BE或者UTF-16LE)存放
l BLOB,只是一个数据块,完全按照输入存放(即没有准换)
如何删除已经建立起来的数据库:
数据库在本地是以文件的形式保存的,删除数据库跟删除文件步骤是一样的。
final File file = context.getDatabasePath(DATABASE_NAME);
file.delete();
实例:
LoginActivity.java:
public class LoginActivity extends Activity {
EditText username;
EditText password;
Button login,register;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
findViews();
}
private void findViews() {
username=(EditText) findViewById(R.id.username);
password=(EditText) findViewById(R.id.password);
login=(Button) findViewById(R.id.login);
register=(Button) findViewById(R.id.register);
login.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
String name=username.getText().toString();
String pass=password.getText().toString();
Log.i("TAG",name+"_"+pass);
UserService uService=new UserService(LoginActivity.this);
boolean flag=uService.login(name, pass);
if(flag){
Toast.makeText(LoginActivity.this, "登录成功", Toast.LENGTH_LONG).show();
}else{
Toast.makeText(LoginActivity.this, "登录失败", Toast.LENGTH_LONG).show();
}
}
});
register.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent intent=new Intent(LoginActivity.this,RegisterActivity.class);
startActivity(intent);
}
});
}
}
UserService.java:
封装了对数据库的直接操作,提供给外部
public class UserService {
private DatabaseHelper dbHelper;
public UserService(Context context){
dbHelper=new DatabaseHelper(context);
}
//登录用
public boolean login(String username,String password){
SQLiteDatabase sdb=dbHelper.getReadableDatabase();
String sql="select * from user where username=? and password=?";
Cursor cursor=sdb.rawQuery(sql, new String[]{username,password});
if(cursor.moveToFirst()==true){
cursor.close();
return true;
}
return false;
}
//注册用
public boolean register(User user){
SQLiteDatabase sdb=dbHelper.getReadableDatabase();
String sql="insert into user(username,password,age,sex) values(?,?,?,?)";
Object obj[]={user.getUsername(),user.getPassword(),user.getAge(),user.getSex()};
sdb.execSQL(sql, obj);
return true;
}
}
DatabaseHelper.java:
继承自android.database.sqlite.SQLiteOpenHelper 创建数据库
public class DatabaseHelper extends SQLiteOpenHelper {
static String name="user.db";
static int dbVersion=1;
public DatabaseHelper(Context context) {
super(context, name, null, dbVersion);
}
//只在创建的时候用一次
public void onCreate(SQLiteDatabase db) {
String sql="create table user(id integer primary key autoincrement,username varchar(20),password varchar(20),age integer,sex varchar(2))";
db.execSQL(sql);
}
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}