欢迎转载,转载请标明出处,谢谢
每一个Android手机都自带一个sqlite数据库,用来保存来自网络的数据及手机上的数据,但要怎么连接,怎么进行增删改查呢?这就是本文的重点。
我将结合实例代码进行介绍,其中代码注释也算详细:
类:
1:用户类:UserInfor
用户的基本信息:id,username,pwd,age
等
2:数据库类:SQLiteUtil
继承SQLiteOpenHelper
,完后对数据库额建立和表的创建
3:数据库操作类:UserDao
类中实例化SQLiteUtil
,完成对数据库的各种操作
4:调用类(测试activity): 实例化UserDao
,完成对数据库具体的各种操作
1:创建类继承SQLiteOpenHelper
连接数据库是靠系统提供的SQLiteOpenHelper
这个类,用户创建类并继承SQLiteOpenHelper
实现onCreate()
和onUpgrade()
方法。
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
/**
* Created by Administrator on 2016/4/27.
*/
public class SQLiteUtil extends SQLiteOpenHelper {
//定义数据库的各种常量,如数据库名,表名,表的字段
private static final String DBNAME = "user.db";
private static final String TABLE_NAME = "user_info";
private static final String TABLE_INFO_COLUM_ID = "_id";//主键前面一般都带下划线,也可不带
private static final String TABLE_INFO_COLUM_NAME = "name";
private static final String TABLE_INFO_COLUM_PWD = "pwd";
private static final String TABLE_INFO_COLUM_AGE = "age";
private static final String TABLE_INFO_COLUM_IMG = "imgUrl";
//本类的构造方法
public SQLiteUtil(Context context, int version) {
/**
创建构造方法时,默认是以下构造方式,可根据个人需要修改
public SQLiteUtil(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
*/
//上面定义了数据库名,故可直接写死DBNAME
super(context, DBNAME, null, version);
}
@Override
public void onCreate(SQLiteDatabase db) {
//创建表,使用StringBuffer代替String减少内存消耗
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append("CREATE TABLE IF NOT EXISTS ");
stringBuffer.append(TABLE_NAME + "(");
stringBuffer.append(TABLE_INFO_COLUM_ID+" integer primary key autoincrement ,");
stringBuffer.append(TABLE_INFO_COLUM_NAME+" varchar(10),");
stringBuffer.append(TABLE_INFO_COLUM_PWD+" varchar(10),");
stringBuffer.append(TABLE_INFO_COLUM_AGE+" varchar(10),");
stringBuffer.append(TABLE_INFO_COLUM_IMG+" varchar(10))");
//执行操作
db.execSQL(stringBuffer.toString());
}
//重写的onUpgrade方法。当数据库结构修改,优化后,需要更新版本时,执行该方法,具体就是将旧的数据库删除,重写创建数据库。以达到更新的目的。方法中的oldVersion和newVersion分别对应新旧版本,可以用户自己定义,系统会自动回调该方法并判断版本是否发生变化
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
String sql = "drop table if exists "
+TABLE_NAME;
db.execSQL(sql);
onCreate(db);
}
}
2:实现对数据库的操作方法
该类是对数据库操作的具体实现类,类中的方法可在任意地方调用,以达到对数据库的操作
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import com.inext.test.sqlitetest.dbutil.SQLiteUtil;
import com.inext.test.sqlitetest.entry.UserInfo;
import java.util.ArrayList;
import java.util.List;
/**
* Created by Administrator on 2016/4/27.
*/
public class UserDao {
//定义之前刚完成的SQLiteUtil
private SQLiteUtil sqLiteUtil;
//该类构造方法
public UserDao(Context context){
//实例SQLiteUtil ,并将参数传入,1为版本号,可自定义
sqLiteUtil = new SQLiteUtil(context,1);
}
/**
* 获取数据库有两种:getWritableDatabase()和getWritableDatabase(),均返回SQLiteDatabase
* 前者用来对数据库的插入,修改等有改变值得操作,后者用来查询等无改变值的操作
* 数据库操作:增删改查
* 有两种方式:系统自己封装好的各种方法,如rawQuery(),insert(),update(),delete()等
* 也可以自己写sql语句,并通过execSQL()执行语句
*/
//查询方法
public List search(){
//创建list用来存放对象
List list = new ArrayList();
//通过getReadableDatabase()获取可读的数据库
SQLiteDatabase db = sqLiteUtil.getReadableDatabase();
//执行语句,获取返回类型为Cursor 的结果集
Cursor cursor = db.rawQuery("select * from user_info ", null);
UserInfo userInfo = null;
//循环得到结果集里的对象
while (cursor.moveToNext()){
int id = cursor.getInt(cursor.getColumnIndex("_id"));
String username = cursor.getString(cursor.getColumnIndex("name"));
String pwd = cursor.getString(cursor.getColumnIndex("pwd"));
String age = cursor.getString(cursor.getColumnIndex("age"));
String imgUrl = cursor.getString(cursor.getColumnIndex("imgUrl"));
userInfo = new UserInfo();
userInfo.setId(id);
userInfo.setUsername(username);
userInfo.setPwd(pwd);
userInfo.setAge(age);
userInfo.setImgUrl(imgUrl);
list.add(userInfo);
}
cursor.close();
db.close();
return list;
}
//添加
public void insert(UserInfo userInfo){
//通过getWritableDatabase()获取可写的数据库
SQLiteDatabase db = sqLiteUtil.getWritableDatabase();
//ContentValues 用来存放数据,类似Map
ContentValues contentValues = new ContentValues();
contentValues.put("name",userInfo.getUsername());
contentValues.put("pwd",userInfo.getPwd());
contentValues.put("age", userInfo.getAge());
contentValues.put("imgUrl",userInfo.getImgUrl());
//执行插入
db.insert("user_info", null, contentValues);
db.close();
}
//删除
public void del(int id){
//通过getWritableDatabase()获取可写的数据库
SQLiteDatabase db = sqLiteUtil.getWritableDatabase();
db.delete("user_info", "_id = ?", new String[]{String.valueOf(id)});
db.close();
}
//更新
public void update(UserInfo userInfo){
//通过getWritableDatabase()获取可写的数据库
SQLiteDatabase db = sqLiteUtil.getWritableDatabase();
String sql = "update user_info set name = ? where _id = ?";
db.execSQL(sql,new Object[]{userInfo.getUsername(),userInfo.getId()});
db.close();
}
}
3:调用数据库的操作方法
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
private Button button1,button2,button3,button4;
private TextView textView1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
}
private void init(){
button1 = (Button)findViewById(R.id.search);
button2 = (Button)findViewById(R.id.insert);
button3 = (Button)findViewById(R.id.update);
button4 = (Button)findViewById(R.id.del);
textView1 = (TextView)findViewById(R.id.show);
button1.setOnClickListener(this);
button2.setOnClickListener(this);
button3.setOnClickListener(this);
button4.setOnClickListener(this);
}
@Override
public void onClick(View v) {
UserDao userDao = new UserDao(getBaseContext());
int id = v.getId();
switch (id){
case R.id.search:
Log.d("----","这里是查询");
List list = userDao.search();
if (list.size()==0){
return;
}
UserInfo user = null;
StringBuffer stringBuffer = null;
StringBuffer show = new StringBuffer();
for (int i = 0;i<list.size();i++){
user = (UserInfo) list.get(i);
stringBuffer = new StringBuffer();
stringBuffer.append("ID:"+user.getId());
stringBuffer.append("用户名:"+user.getUsername());
stringBuffer.append("密码:"+user.getPwd());
stringBuffer.append("年龄:"+user.getAge());
stringBuffer.append("图片地址:" + user.getImgUrl()+"\n");
show.append(stringBuffer);
}
textView1.setText(show.toString());
break;
case R.id.insert:
Log.d("----","这里是插入");
UserInfo userInfo = new UserInfo();
userInfo.setUsername("肖盛");
userInfo.setPwd("admin");
userInfo.setAge("20");
userInfo.setImgUrl("图片地址");
userDao.insert(userInfo);
break;
case R.id.update:
Log.d("----","这里是更新");
UserInfo userInfo1 = new UserInfo();
userInfo1.setId(6);//设置id
userInfo1.setUsername("石国国");
userInfo1.setPwd("123");
userInfo1.setAge("21");
userInfo1.setImgUrl("另一个地址");
userDao.update(userInfo1);//更新id为6的数据
break;
case R.id.del:
Log.d("----","这里是删除");
userDao.del(0);//删除一条id为0的数据
break;
}
}
}
以上就是对Android数据库的基本操作。如有补充,会继续更新。