SQLite数据库创建、更新入门
发布时间:2020-12-12 19:35:21 所属栏目:百科 来源:网络整理
导读:简述: SQLiteOpenHelper 是一个抽象类,就是说如果我们想要使用它的话,就需要创建一个自己的帮助类去继承它。 SQLiteOpenHelper 中有两个抽象方法,分别是 onCreate()和 onUpgrade(), 我们必须在自己的帮助类里面重写这两个方法,然后分别在这两个方法中去
简述: SQLiteOpenHelper 是一个抽象类,就是说如果我们想要使用它的话,就需要创建一个自己的帮助类去继承它。 使用SQLite数据库步骤:一、创建自己的类,继承SQLiteOpenHelper,重写构造方法,onCreate()和 onUpgrade()。SQLiteOpenHelper 中有两个构造方法可供重写, 一般使用参数少一点的那个构造方法即可。 public MyDatabaseHelper(Context context,String name,CursorFactoryfactory,int version) { super(context,name,factory,version); mContext = context; } 这个构造方法中接收四个参数, 1)、第一个参数是上下文 Context,有它才能对数据库进行操作。 2)、第二个参数是数据库名,创建数据库时的名称。 3)、第三个参数查询数据的时候返回一个自定义的 Cursor,一般都是传入 null。 4)、第四个参数表示当前数据库的版本号,可用于对数据库进行升级操作。 二、实例化继承了SQLiteOpenHelper抽象类的类,调用它的 getReadableDatabase()或 getWritableDatabase()方法 构建出SQLiteOpenHelper 的实例之后,再调用它的 getReadableDatabase()或 getWritableDatabase()方法就能够创建数据库了, 【数据库文件会存放在/data/data/<package name>/databases/目录下】 此时,重写SQLiteOpenHelper抽象类的onCreate()方法会得到执行,所以通常会在这里去处理一些创建表的逻辑。
代码:MySQLiteOpenHelper.java中的代码:public class MySQLiteOpenHelper extends SQLiteOpenHelper { /** * 创建数据库表book语句 解析: 1)integer 表示整型, 2)real 表示浮点型, 3)text 表示文本类型, 4)blob * 表示二进制类型。 5)primary key 将 id 列设为主键,并用 autoincrement关键字表示 id 列是自增长的。 */ public static final String CREATE_BOOK = "create table book (" + "id integer primary key autoincrement," + "author text," + "price real," + "pages integer," + "name text)"; /** * 创建数据库表Category 语句 */ public static final String CREATE_CATEGORY = "create table Category (" + "id integer primary key autoincrement," + "category_name text," + "category_code integer)"; /** * 上下文对象 */ private Context context; /** * 重写SQLiteOpenHelper的构造方法,这个构造方法中接收四个参数: * * @param context * (上下文 Context,有它才能对数据库进行操作) * @param name * (是数据库名,创建数据库时的名称) * @param factory * (查询数据的时候返回一个自定义的 Cursor,一般都是传入 null) * @param version * (当前数据库的版本号,可用于对数据库进行升级操作) */ public MySQLiteOpenHelper(Context context,CursorFactory factory,int version) { super(context,version); this.context = context; } /** * 实例化SQLiteOpenHelper类之后 ,调用getReadableDatabase()或 getWritableDatabase()方法。 * 如果是要创建的数据库不存在,就执行oncreate()方法,创建数据库; 如果已经存在要创建的数据库,则不执行oncreate()方法 */ @Override public void onCreate(SQLiteDatabase db) { db.execSQL(CREATE_BOOK);// 执行sql语句 Toast.makeText(context,"数据库创建成功",1).show(); } /** * 对数据库进行升级,注意: switch 中每一个 case的最后都是没有使用 break , * 这是为了保证在跨版本升级的时候,每一次的数据库修改都能被全部执行到 */ @Override public void onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion) { switch (oldVersion) { case 1: db.execSQL(CREATE_CATEGORY); Toast.makeText(context,"更新数据库,旧版本是" + oldVersion,1).show(); case 2: Toast.makeText(context,"更新数据库,旧版本是" + oldVersion,1).show(); default: } } } MainActivity.java中的代码: public class MainActivity extends Activity { private MySQLiteOpenHelper helper; private Button create_sqliteDataBase; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); /** * 实例化MySQLiteOpenHelper,指定数据库名:Book.db,和版本号 1 * 如果此次执行的版本号,比上次的版本号大(如,上次是1.这次是2),则执行MySQLiteOpenHelper类中的重写的onUpgrade()方法 */ helper = new MySQLiteOpenHelper(this,"Book.db",null,1); create_sqliteDataBase = (Button) findViewById(R.id.create_sqliteDataBase); create_sqliteDataBase.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub /** * 当第一次点击 按钮时,会检测 到当前程序中并没有 Book.db这个数据库, * 于是会创建该数据库并调用 MySQLiteOpenHelper中的 onCreate()方法,这样 Book表也就得到了创建。 * 再次点击 按钮时,会发现此时已经存在 BookStore.db 数据库了,因此不会重复创建一次。 */ helper.getWritableDatabase(); } }); } } 下载链接: SQLite数据库创建、更新入门下载地址 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |