«

Android数据库学习123

时间:2024-3-2 17:45     作者:韩俊     分类: Android


我个人感觉安卓自带的数据库用的不是太多的,毕竟现在很多应用都直接和服务器数据库进行交互,或者直接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;

    }

    @Override
    public void onCreate(SQLiteDatabase db) {// 自动覆写了
        db.execSQL(CREATE_BOOK);// 创建数据库
        Toast.makeText(mcontext, "Create succeeded", Toast.LENGTH_SHORT).show();

    }

    @Override
    public 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;

    }

    @Override
    public void onCreate(SQLiteDatabase db) {// 自动覆写了
        db.execSQL(CREATE_BOOK);
        db.execSQL(CREATE_CATEGORY);
        Toast.makeText(mcontext, "Create succeeded", Toast.LENGTH_SHORT).show();

    }

    @Override
    public 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);// 這裡版本號改成2
        create.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:

标签: android

热门推荐