首页 > 数据库 >Android数据库学习123

Android数据库学习123

时间:2022-11-11 13:02:26浏览次数:41  
标签:数据库 db 123 import Android create public 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(因为它只出现一次,也就是数据库只创建一次,自行测试吧):

Android数据库学习123_Android

二、更新数据库:

创建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");
}
});

}
}

运行如下:

Android数据库学习123_Android_02

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

Android数据库学习123_android_03

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

Android数据库学习123_数据库_04

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

Android数据库学习123_数据库_05

键入sqlite3 BookStore.db:

Android数据库学习123_android_06

然后键入:.table:

Android数据库学习123_android_07

 

标签:数据库,db,123,import,Android,create,public,android
From: https://blog.51cto.com/u_15866446/5844736

相关文章