我个人感觉安卓自带的数据库用的不是太多的,毕竟现在很多应用都直接和服务器数据库进行交互,或者直接API获取一些接口的数据,但是不可否认自带的数据库还是有一些作用的,所以我们还是需要对自带的数据库进行一定的学习和研究。(前面都是废话)进入正题:

一、创建数据库

Android为了让我们更好的管理数据库,专门提供了一个SQLiteOpenHelper帮助类,借助这个类就可以简单地对数据库进行创建和升级。SQLiteOpenHelper是一个抽象类,啥是抽象类?抽象类就像领导,一般自己不干活(实例化),只发号司令,所以要想用这个类就必须自己创建一个类去继承它。此外这个类里面还有两个抽象方法,onCreate()和onUpgrade(),我们必须在自己的帮助类里重写这两个方法,然后用这两个方法去创建和升级数据库。

这个类里还有两个重要的实例方法,getReadableDatabase()和getWritableDatabase()。这两个方法都可以创建或打开一个现有的数据库(如果数据库存在则打开,如果不存在则创建一个新的数据库)话说这两个方法有啥不同呢?当数据库不可写入的时候(比如磁盘已满)第一个方法以只读的方式打开,第二个方法就会出现异常。

废话理论不多说了,下面看一下建表语句:

create table Book(id integer primary key autoincrement,author text,price real,pages integer, name text)


假如上面的看不懂,那你要稍微对SQL语句了解一下,这个不难。

下面编写代码:

package org.lxh.demo;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteDatabase.CursorFactory;import android.database.sqlite.SQLiteOpenHelper;import android.widget.Toast;public class MyDatabaseHelper extends SQLiteOpenHelper {public static final String CREATE_BOOK = "create table Book("+ "id integer primary key autoincrement," + "author text, "+ "price real," + "pages integer," + "name text)";// SQL语句自己写吧private Context mcontext;// 上下文对象,这玩意很多地方用得到public MyDatabaseHelper(Context context, String name,// 构造方法也自动生成了CursorFactory factory, int version) {super(context, name, factory, version);mcontext = context;}@Overridepublic void onCreate(SQLiteDatabase db) {// 自动覆写了db.execSQL(CREATE_BOOK);// 创建数据库Toast.makeText(mcontext, "Create succeeded", Toast.LENGTH_SHORT).show();}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {// 自动覆写了// TODO Auto-generated method stub}}


然后我们在布局文件中搞一个按钮:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    android:orientation="vertical" >    <LinearLayout        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:orientation="horizontal" >        <Button            android:id="@+id/btn"            android:layout_width="fill_parent"            android:layout_height="wrap_content"            android:text="创建数据库" />    </LinearLayout></LinearLayout>


最后创建一个按钮监听在MainActivity里

package org.lxh.demo;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;public class MainActivity extends Activity {private Button create;private MyDatabaseHelper myDatabaseHelper;public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState); // 生命周期方法super.setContentView(R.layout.main); // 设置要使用的布局管理器create = (Button) findViewById(R.id.btn);myDatabaseHelper = new MyDatabaseHelper(this, "BookStore", null, 1);//构造方法里有四个参数哎,填好create.setOnClickListener(new OnClickListener() {// 匿名内部类public void onClick(View v) {myDatabaseHelper.getWritableDatabase();// 调用实例方法getWritableDatabase()创建数据库}});}}


点击创建按钮就成功创建了,没来的及截图到Toast(因为它只出现一次,也就是数据库只创建一次,自行测试吧):

二、更新数据库:

创建MyDatabaseHelper 中还有一个覆写的方法没用呢,就是onUpgrade()是用于对数据库进行更新的。比如数据库已有一张Book表了,我们现在还想创建一个Catagory表:

package org.lxh.demo;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteDatabase.CursorFactory;import android.database.sqlite.SQLiteOpenHelper;import android.util.Log;import android.widget.Toast;public class MyDatabaseHelper extends SQLiteOpenHelper {public static final String CREATE_BOOK = "create table Book("+ "id integer primary key autoincrement," + "author text, "+ "price real," + "pages integer," + "name text)";// SQL语句自己写吧public static final String CREATE_CATEGORY = "create table Category ("//再創建一張表+ "id integer primary key autoincrement, "+ "category_name text, "+ "category_code integer)";private Context mcontext;// 上下文对象,这玩意很多地方用得到public MyDatabaseHelper(Context context, String name,// 构造方法也自动生成了CursorFactory factory, int version) {super(context, name, factory, version);mcontext = context;}@Overridepublic void onCreate(SQLiteDatabase db) {// 自动覆写了db.execSQL(CREATE_BOOK);db.execSQL(CREATE_CATEGORY);Toast.makeText(mcontext, "Create succeeded", Toast.LENGTH_SHORT).show();}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {// 自动覆写了db.execSQL("drop table if exists Book");//先刪除db.execSQL("drop table if exists Category");onCreate(db);//最後再創建}}


MainActivity.java:

package org.lxh.demo;import android.app.Activity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;public class MainActivity extends Activity {private Button create;private MyDatabaseHelper myDatabaseHelper;public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState); // 生命周期方法super.setContentView(R.layout.main); // 设置要使用的布局管理器create = (Button) findViewById(R.id.btn);myDatabaseHelper=new MyDatabaseHelper(this, "BookStore", null, 2);// 這裡版本號改成2create.setOnClickListener(new OnClickListener() {// 匿名内部类public void onClick(View v) {myDatabaseHelper.getWritableDatabase();// 调用实例方法getWritableDatabase()创建数据库Log.d("Success", "chenggong");}});}}


运行如下:

下面我们怎么知道自己创建的数据库有木有成功呢?在哪儿能看到他们呢?我们要通过adb了,这是Android SDK自带的一个调试工具,怎么用嫩?首先你要将你的platform_tools目录配置到环境变量中去:

然后在DOS界面下输入:adb shell,进入到设备的控制台:

然后键入:cd /data/data/org.lxh.demo/databases/下:

键入sqlite3 BookStore.db:

然后键入:.table:

更多相关文章

  1. 浅析Android中MVP及Demo
  2. Android(安卓)里的对话框Dialog 实现机制基础
  3. Android上获得系统root权限的方法
  4. 更新Android(安卓)SDK 访问谷歌等无需代理方法
  5. Handler内存泄漏和解决方法
  6. 网络获取图片的方法的重写--较简洁(如果手机缓存里面有就从缓存
  7. service(改)
  8. 基于 Android(安卓)NDK 的学习之旅-----Java 调用C(附源码)
  9. 深入剖析Android消息机制原理

随机推荐

  1. Android系统中调试动态链接库.so文件的步
  2. 高德地图自定义Marker点击时出现的InfoWi
  3. 详解Android中自定义View的invalidate,Ha
  4. Android 图片手势缩放自定义View
  5. android中通过"反射"的到android隐藏的AP
  6. gradle更新 build:gradle出错
  7. Android 9.0 (P版本) 亮度控制接口变更
  8. get installed apps info on android and
  9. android 音量获取和设置总结
  10. Android(安卓)JUnit单元测试基础实例