SQLite数据库简单应用
SQLite,是一款轻型的数据库,在安卓手机中自带,SQLite库可以解析大部分标准SQL语言,下面记录简单的使用情况,如有哪位仁兄路过发现有错误,请帮我指出,以便我改正。下面是一个简单的例子,主要是方便与自己学习记忆。
1.首先建一个工具类DBHelper 继承SQLiteOpenHelper 类。定义DBHelper构造器和重载onCreate()和onUpdgrade()方法。
onCreate():用于创建数据库使用;
onUpdgrade():用于更新数据库使用;
1 public class DBHelper extends SQLiteOpenHelper { 2 3 //构造器,参数super(上下文,数据库名称,游标工厂,数据库版本) 4 public DBHelper(Context context) { 5 super(context, Constant.DB_NAME, null, Constant.VERSION); 6 } 7 8 @Override 9 public void onCreate(SQLiteDatabase db) { 10 db.execSQL("CREATE table IF NOT EXISTS '"+Constant.USER_TABLE+"'" 11 + " (_id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, img TEXT)"); 12 } 13 14 @Override 15 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 16 17 } 18 }
2.建一个常量类(非必须,可选)Constant,用来存放一些相关的常量,如数据库的名字,版本号等:
1 public class Constant { 2 public static final String DB_NAME = "uu.db";//数据库名称 3 public static final int VERSION = 1;//数据库版本 4 public static final String USER_TABLE = "user";//用户数据表名称 5 }
3.实现对数据表的映射,即Bean类(如果我没记错),用于构造User 对象。
1 public class User { 2 private Long id; 3 private String name; 4 private String img; 5 6 public Long getId() { 7 return id; 8 } 9 10 public void setId(Long id) { 11 this.id = id; 12 } 13 14 public String getName() { 15 return name; 16 } 17 18 public void setName(String name) { 19 this.name = name; 20 } 21 22 public String getImg() { 23 return img; 24 } 25 26 public void setImg(String img) { 27 this.img = img; 28 } 29 30 @Override 31 public String toString() { 32 return "User{" + 33 "id=" + id + 34 ", name='" + name + '\'' + 35 ", img='" + img + '\'' + 36 '}'; 37 } 38 }
4.建立Dao类,即对用户表(user)完成增、删、改、查操作的额方法,其他类在根据需要直接调用方法即可。
/** * Created by Administrator on 2015/8/1. * 用于实现增删改查操作 */ public class UserDao { private DBHelper dbHelper = null; private SQLiteDatabase db = null; private ContentValues values = null; public UserDao(Context context){ dbHelper = new DBHelper(context); } /** * 增加一个用户 * @param user * @return */ public long addUser(User user){ //获取SQLiteDatabase进行数据库操作,打开写操作 db = dbHelper.getWritableDatabase(); //参数绑定对象 values = new ContentValues(); values.put("name",user.getName()); values.put("img", user.getImg()); //存储操作,在此返回的iD并不是实际的ID,只是该记录所在的行号,若从未删除则是正确的 long id = db.insert(Constant.USER_TABLE,null,values); //释放资源 dbHelper.close(); return id; // String sql = "insert into user(name,img) values('"+name+"','"+img+"')"; // SQLiteDatabase db = dbHelper.getWritableDatabase(); // db.execSQL(sql); } /** *根据ID删除一个用户 * @param id * @return */ public void deleteUser(String id){ db = dbHelper.getWritableDatabase(); db.delete(Constant.USER_TABLE,"_id= "+id,null); db.close(); } /** * 更新一个对象 * @param user * @return */ public int updateUser(User user){ db = dbHelper.getWritableDatabase(); ContentValues values = new ContentValues(); values.put("name",user.getName()); values.put("img",user.getImg()); int k= db.update(Constant.USER_TABLE,values,"_id="+user.getId(),null); db.close(); return k; } /** * 根据ID查询用户信息 * @param uesr_id * @return */ public User findUserByUserId(String uesr_id){ return null; } /** * 获取所有用户 * @return */ public List<User> findAllUsers(){ db = dbHelper.getReadableDatabase(); String sql = "select _id,name,img from " + Constant.USER_TABLE + " order by _id desc"; Cursor cursor = db.rawQuery(sql, null); List<User> list = new ArrayList<User>(); //用下面的效果较好,但是要先判断是否有数据。然后数组开辟一定的空间,由cursor.getCount()定 //List<User> list = new ArrayList<User>(cursor.getCount()); while (cursor.moveToNext()) { User user = new User(); user.setId(cursor.getLong(0)); user.setName(cursor.getString(1)); user.setImg(cursor.getString(2)); list.add(user); } cursor.close();//关闭游标 db.close(); return list; } }