MySqliteHelper
「一句话经典」Android创建SQLite数据库:
创建SQLiteHelper子类MySqliteHelper 并将数据库版本与数据库名保存在常量类Contant中,然后创建数据库操作工具类DBManger用一个单例来创建MySQLiteHelper,最后在在MainActivity类中创建数据库类MySqliteHelper并使用DBManager.getInstance(Context) 获取或初始化数据库单例。
附--方案详见优快云下载链接:http://download.youkuaiyun.com/detail/z00238082/9748372
1: 布局文件
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.crazy.caz.t170206.sqlitedemo.MainActivity">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#ffbbff"
android:onClick="createDb"
android:text="创建数据库" />
</RelativeLayout>
2: 工具类 Constant
package com.crazy.caz.t170206.utils; /** * Created by caz on 2017/2/6. */ //Todo 为MySqliteHelper等类提供数据库常量支持 public class Constant { public static final String DATABASE_NAME="info.db"; //数据库名称 public static final int DATABASE_VERSION=1; //数据库版本号 public static final String TABLE_NAME="";//表名 }
package com.crazy.caz.t170206.utils;
/**
* Created by caz on 2017/2/6.
*/
//Todo 为MySqliteHelper等类提供数据库常量支持
public class Constant {
public static final String DATABASE_NAME="info.db"; //数据库名称
public static final int DATABASE_VERSION=1; //数据库版本号
public static final String TABLE_NAME="";//表名
}
3: 数据库帮助类 MySqliteHelper
package com.crazy.caz.t170206.utils;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
/**
* sqliteOpenHelper
* 1:提供onCreate() onUpgrade() 等创建数据库更新数据库的方法
* 2:提供了获取数据库对象的函数
* Created by caz on 2017/2/6.
*/
public class MySqliteHelper extends SQLiteOpenHelper {
/**
* 构造函数
* @param context 上下文对象
* @param name 数据库名
* @param factory 工厂
* @param version 数据库版本 >=1
*/
public MySqliteHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
public MySqliteHelper (Context context){
super(context,Constant.DATABASE_NAME,null,Constant.DATABASE_VERSION);
}
/**
* 当数据库创建时回调的函数
* @param db
*/
@Override
public void onCreate(SQLiteDatabase db) {
}
/**
* 当数据库版本更新时回调的函数
* @param db 数据库对象
* @param oldVersion 数据旧版本
* @param newVersion 数据库新版本
*/
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
/**
* 当数据库打开时回调的函数
* @param db
*/
@Override
public void onOpen(SQLiteDatabase db) {
super.onOpen(db);
}
}
4: 数据库操作工具类 DbManager
package com.crazy.caz.t170206.utils;
import android.content.Context;
/** 主要是对数据库操作的工具类,主要是用单例li的形式
* sqlite数据库:就相当于一个持久化的数据库
* Activity:是相当于整个页面数据的展示、
* 数据处理工具类: 正常的为了降低耦合度,一般都会在utils包下创建一个单独处理业务逻辑的类
* Created by caz on 2017/2/6.
*/
public class DbManager {
/*
思路:现构建一个SQLite帮助类的对象,
然后使用 getIntance()中判断
*/
private static MySqliteHelper helper;
//public static MySqliteHelper helper;
public static MySqliteHelper getIntance(Context context){
if (helper==null){
helper=new MySqliteHelper(context);
}
return helper;
}
}
5: 活动类 MainActivity
package com.crazy.caz.t170206.sqlitedemo;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import com.crazy.caz.t170206.R;
import com.crazy.caz.t170206.utils.DbManager;
import com.crazy.caz.t170206.utils.MySqliteHelper;
public class MainActivity extends AppCompatActivity {
private MySqliteHelper helper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
helper= DbManager.getIntance(this);
}
/**
* 点击按钮创建数据库
* @param view
*/
public void createDb(View view){
/**
* getReadableDatabase() \getWritableDatabase():创建或者打开数据库
* 如果数据库不存在则创建数据库,如果存在则直接打开数据库
* 默认情况下两个函数都表示打开或者创建可读可写的数据库对象,
* 如果磁盘已满或者是数据库本身权限等情况下getReadableDatabase()打开的是只读数据库
*/
SQLiteDatabase db = helper.getReadableDatabase();
// helper.getWritableDatabase();
Toast.makeText(this, "数据库路径: " + db.getPath(), Toast.LENGTH_SHORT).show();
System.out.println("数据库路径:" + db.getPath());
}}