概述
之前不想写博客,觉得麻烦,每次要用的时候去网上查一下一大堆,但是有时候想去翻一下某个知识点的时候,有时候又觉得每次都去找,还是浪费时间,所以觉得还是写一下,以后用起来方便一些。
今天想试下数据库,之前都写烂了,但是,几个月的RN下来,一直都是用的AsyncStorage这个类,所以数据库就有点遗忘了,然后自己写了一遍常用方法,运行的时候直接就炸了,这个错误提示是查询方法错误,然后去看了一下自己的代码,发现是这样的“Cursor cursor=database.rawQuery("select * from (where name =?),new String[]{name})”,看了一下,觉得这个括号有点怪怪的,然后就把括号删除了,然后查询就没有问题,其他的功能也没有什么问题,觉得记忆还是可以,还记得八九分。
先看下SQLiteOpenHelper这个类吧,我们需要自己定义一个类去实现这个抽象类,里面有两个方法需要我们重写1、onCreate方法用于创建表,可以根据需要创建多个表,2、onUpgrade方法是用于版本更新,可以不做处理。此外还有一个需要说明的地方是,SQLiteOpenHelper这个类,没有无参构造,所以需要创建一个构造函数,不过会有自动提示,为了使用方便,我们选择一个四参构造函数,本来构造函数是四参的,被我简化过后就只剩一个上下文对象。在super中可以看出这里面的四个参数本应该与上面对应,我只是把上面的后三个参数去掉了,第二个参数是数据库名称,第三个参数本来是CursorFactory游标对象,我们使用null代替,第四个参数是版本号。好了,SQLiteOpenHelper的继承就搞定了。
package trypost.dafeng.com.studyforever.sql; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; /** * Created by asus on 2017/8/21. */ public class MySql extends SQLiteOpenHelper { public static String TB_NAME="LiuZhiDan.db"; public MySql(Context context) { super(context, TB_NAME, null, 1); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL("create table user(name text,password text)"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } }
下面再来看下实际的用法,
1:增加对象,
/** * * @param user 新增的对象 */ public void addUser(User user){ ArrayList<User> list=searchAllUser();//下文的查询数据库全部数据的方法,如果没有查询到对象,那么list长度为0 if (list.contains(user)){//关于User类中已经重写了hashCode和equal方法,并且只认定了name,即用户名作为唯一标识。 Toast.makeText(context,"你所添加的用户已经存在",Toast.LENGTH_SHORT).show(); return;//用于去重 } values.put("name",user.getName()); values.put("password",user.getPassword()); database.insert("user",null,values); values.clear(); }
2、删除对象
/** * * @param name 删除对象的名称 */ public void deleteUser(String name){ database.delete("user","name=?",new String[]{name}); }
3、修改对象
/** * * @param oldName 要修改的名称 * @param newName 修改后的名称 */ public void updateUser(String oldName,String newName){ User user=searchUser(oldName); values.put("name",newName); values.put("password",user.getPassword()); database.update("user",values,"name=?",new String[]{oldName}); values.clear(); }
4、查询某个对象
/** * * @param name 要查询对象的名称 * @return 查询单个对象,查询不到数据,返回空对象 */ public User searchUser(String name){ Cursor cursor=database.rawQuery("select * from user where name = ?",new String[]{name}); //Cursor cursor=database.query("user",new String[]{"name","password"},"name = ?",new String[]{"张三"},null,null,null); if (cursor!=null){ while (cursor.moveToNext()){ String userName=cursor.getString(cursor.getColumnIndex("name")); String userPassword=cursor.getString(cursor.getColumnIndex("password")); return new User(userName,userPassword); } } return null; }
5、查询整张表的数据
/** * * @return 查询所有对象,若user表为空,返回的集合不为空,但长度为0. */ public ArrayList<User> searchAllUser(){ ArrayList<User> list=new ArrayList<>(); Cursor cursor=database.rawQuery("select * from user",null); if (cursor!=null){ while (cursor.moveToNext()){ String name=cursor.getString(cursor.getColumnIndex("name")); String password=cursor.getString(cursor.getColumnIndex("password")); list.add(new User(name,password)); } } return list; }
结束语,基本功能就这些了,愿你有所收获。
最后
以上就是潇洒小馒头为你收集整理的android关于数据库SQLite的简单使用的全部内容,希望文章能够帮你解决android关于数据库SQLite的简单使用所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复