zoukankan      html  css  js  c++  java
  • Android学习——创建数据库

    创建数据库

        Android为了让我们能够更加方便地管理数据库,专门提供了一个 SQLiteOpenHelper帮助类, 借助这个类就可以非常简单地对数据库进行创建和升级。

        SQLiteOpenHelper是一个抽象类,其中有两个抽象方法分别是onCreate()和onUpgrade(),分别在这两个方法中实现创建和升级数据库的逻辑。

        SQLiteOpenHelper还有两个十分重要的实例方法,getReadableDatabase()和getWritableDatabase()。这两个方法都可以创建或打开一个现有的数据库(如果数据库已存在则直接打开,如果不存在则创建一个),并返回一个可对数据库进行读写操作的对象。不同的是,当数据库不可写入的时候(如磁盘空间已满)getReadableDatabase()方法返回的对象将以只读的方式去打开数据库,而getWritableDatabase()将抛出异常。

        SQLiteOpenHelper中有两个构造方法可以重写,一般使用参数少的那个构造方法即可。这个构造方法接收四个参数,第一个是Context 。第二个是数据库名。第三个参数允许我们在查询数据的时候返回一个自定义的Cursor,一般都是传入null。第四个参数是当前数据库的版本号,可用于对数据库进行升级操作。构建出SQLiteOpenHelper的实例之后,再调用它的getReadableDatabase()或getWritableDatabase()方法就能够创建数据库了,数据库文件会存放在/data/data/<package name>/databases/目录下。此时重写的onCreate()方法也会得到执行,所以通常会在这里去处理一些创建表的逻辑。


     创建一个项目DatabaseDemo,新建MyDatabaseHelper类从SQLiteOpenHelper继承:

     1 package ga.orlion.databasedemo;
     2 
     3 
     4 import android.content.Context;
     5 
     6 import android.database.sqlite.SQLiteDatabase;
     7 
     8 import android.database.sqlite.SQLiteDatabase.CursorFactory;
     9 
    10 import android.widget.Toast;
    11 
    12 import android.database.sqlite.SQLiteOpenHelper;
    13 
    14  
    15 
    16 public class MyDatabaseHelper extends SQLiteOpenHelper {
    17  
    18 
    19  
    20 
    21         public static final String CREATE_BOOK = "create table book ("
    22 
    23 + "id integer primary key autoincrement, "
    24 
    25 + "author text, "
    26 
    27 + "price real, "
    28 
    29 + "pages integer, "
    30 
    31 + "name text)";
    32 
    33  
    34 
    35 private Context mContext;
    36 
    37  
    38 
    39 public MyDatabaseHelper(Context context, String name, CursorFactory factory, int version) {
    40 
    41 super(context, name, factory, version);
    42 
    43 mContext = context;
    44 
    45 }
    46 
    47  
    48 
    49 @Override
    50 
    51 public void onCreate(SQLiteDatabase db) {
    52 
    53  
    54 
    55 db.execSQL(CREATE_BOOK);
    56 
    57 Toast.makeText(mContext, "数据库创建了", Toast.LENGTH_SHORT).show();
    58 
    59 }
    60 
    61  
    62 
    63 @Override
    64 
    65 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    66 
    67  
    68 
    69 }
    70 
    71 }

        SQLite不像其他的数据库拥有众多繁杂的数据类型, 它的数据类型很简单, integer表示整型,real表示浮点型,text表示文本类型,blob表示二进制类型。另外,上述建表语句中我们还使用了 primary key将 id列设为主键,并用 autoincrement关键字表示 id列是自增长的。

        我们把建表语句定义成了一个字符串常量,然后在 onCreate()方法中又调用了 SQLiteDatabase的 execSQL()方法去执行这条建表语句,并弹出一个 Toast提示创建成功。

    修改activity_main.xml:

     1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     2 
     3     android:layout_width="match_parent"
     4 
     5 android:layout_height="match_parent"
     6 
     7 android:orientation="vertical" >
     8 
     9     
    10 
    11     <Button
    12 
    13         android:id="@+id/create_database"
    14 
    15         android:layout_width="match_parent"
    16 
    17         android:layout_height="wrap_content"
    18 
    19         android:text="创建数据库" />
    20 
    21 </LinearLayout>

      布局文件很简单,就是加入了一个按钮,用于创建数据库。最后修改 MainActivity中的代码:

     super.onCreate(savedInstanceState);
    
    setContentView(R.layout.activity_main);
    
    dbHelper = new MyDatabaseHelper(this , "BookStore.db" , null , 1);
    
    Button button = (Button) findViewById(R.id.create_database);
    
    button.setOnClickListener(new View.OnClickListener() {
    
     
    
    @Override
    
    public void onClick(View v) {
    
    dbHelper.getWritableDatabase();
    
    }
    
    });

    我们在 onCreate()方法中构建了一个 MyDatabaseHelper对象,并且通过构造函数的参数将数据库名指定为 BookStore.db,版本号指定为 1,然后在 Create database按钮的点击事件里调用了getWritableDatabase()方法。这样当第一次点击Create database按钮时,就会检测到当前程序中并没有BookStore.db这个数据库, 于是会创建该数据库并调用MyDatabaseHelper中的 onCreate()方法,这样 Book表也就得到了创建,然后会弹出一个 Toast提示创建成功。再次点击 Create database按钮时,会发现此时已经存在 BookStore.db数据库了,因此不会再创建一次。

  • 相关阅读:
    LoadRunner 技巧之 集合点设置
    LoadRunner 技巧之 IP欺骗 (推荐)
    JMeter 聚合报告之 90% Line 参数说明
    python基础学习笔记(二)
    LoadRunner 技巧之HTML 与 URL两种录制模式分析
    LoadRunner 技巧之 检查点
    LoadRunner 技巧之 思考时间设置
    一个JSlider的例子
    JApplet添加图片
    java.util.Arrays.asList 的小问题
  • 原文地址:https://www.cnblogs.com/znjy/p/14908092.html
Copyright © 2011-2022 走看看