//此系列博文是《第一行Android代码》的学习笔记,如有错漏,欢迎指正!

  Android 为了让我们能够更加方便地管理数据库,专门提供了一个 SQLiteOpenHelper帮助类, 借助这个类我们可以方便地对数据库进行创建和升级。首先,由于SQLiteOpenHelpe是一个抽象类,所以我们需要创建一个类来继承它。SQLiteOpenHelper 中有两个抽象方法,分别是onCreate()和 onUpgrade(),我们必须在自己的帮助类里面重写这两个方法,然后分别在这两个方法中去实现创建、升级数据库的逻辑。SQLiteOpenHelper 中 还 有 两 个 非 常 重 要 的 实 例 方 法 , getReadableDatabase() 和getWritableDatabase()。这两个方法都可以创建或打开一个现有的数据库(如果数据库已存在则直接打开,否则创建一个新的数据库) ,并返回一个可对数据库进行读写操作的对象。不同的是,当数据库不可写入的时候(如磁盘空间已满)getReadableDatabase()方法返回的对象将以只读的方式去打开数据库,而 getWritableDatabase()方法则将出现异常。

  SQLiteOpenHelper中有两个构造方法可供重写, 一般使用参数少一点的那个构造方法即可。这个构造方法中接收四个参数,第一个参数是 Context,这个没什么好说的,必须要有它才能对数据库进行操作。第二个参数是数据库名,创建数据库时使用的就是这里指定的名称。第三个参数允许我们在查询数据的时候返回一个自定义的 Cursor,一般都是传入 null。第四个参数表示当前数据库的版本号,可用于对数据库进行升级操作。下面我们来试一试数据库的使用。

一、新建 MyDatabaseHelper类继承自 SQLiteOpenHelper:

 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)";
private Context mContext;
public MyDatabaseHelper(Context context, String name, SQLiteDatabase.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) {
}
}

  我们把建表语句定义成了一个字符串常量,然后在 onCreate()方法中又调用了 SQLiteDatabase 的 execSQL()方法去执行这条建表语句,并弹出一个 Toast提示创建成功,这样就可以保证在数据库创建完成的同时还能成功创建 Book 表。

二、编写布局文件:

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"> <Button
android:id="@+id/create_database"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Create database"
/>
</RelativeLayout>

  我们在界面中加入了一个按钮,用于创建数据库。

三、修改 MainActivity中的代码:

 public class MainActivity extends AppCompatActivity {

     private MyDatabaseHelper dbHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
dbHelper = new MyDatabaseHelper(this, "BookStore.db", null, 1);
Button createDatabase = (Button) findViewById(R.id.create_database);
createDatabase.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数据库了,因此不会再创建一次。

  程序运行如下:

  

  此时进入到com.mycompany.database/databases 中可看到BookStore已被创建了:

  aaarticlea/png;base64,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" alt="" />

  这个目录下出现了两个数据库文件,一个正是我们创建的 BookStore.db,而另一个BookStore.db-journal 则是为了让数据库能够支持事务而产生的临时日志文件,通常情况下这个文件的大小都是 0 字节。

  //End.

Android学习笔记(十六)——数据库操作(上)的更多相关文章

  1. python学习笔记(十)完善数据库操作

    1.cur = coon.cursor(cursor=pymysql.cursors.DictCursor)的用法 建立游标,指定cursor类型返回的是字典,如果不指定类型,返回的是元组类型数据 i ...

  2. python3.4学习笔记(十六) windows下面安装easy_install和pip教程

    python3.4学习笔记(十六) windows下面安装easy_install和pip教程 easy_install和pip都是用来下载安装Python一个公共资源库PyPI的相关资源包的 首先安 ...

  3. Android学习笔记进阶之在图片上涂鸦(能清屏)

    Android学习笔记进阶之在图片上涂鸦(能清屏) 2013-11-19 10:52 117人阅读 评论(0) 收藏 举报 HandWritingActivity.java package xiaos ...

  4. python3.4学习笔记(十五) 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)

    python3.4学习笔记(十五) 字符串操作(string替换.删除.截取.复制.连接.比较.查找.包含.大小写转换.分割等) python print 不换行(在后面加上,end=''),prin ...

  5. 【转】 Pro Android学习笔记(六九):HTTP服务(3):HTTP POST MultiPart

    目录(?)[-] 建立测试环境 开发环境导入第三方JAR HTTP Post Multipart小例子 HTTP POST不仅可以通过键值对传递参数,还可以携带更为复杂的参数,例如文件.HTTP Po ...

  6. 【转】 Pro Android学习笔记(六七):HTTP服务(1):HTTP GET

    目录(?)[-] HTTP GET小例子 简单小例子 出现异常NetworkOnMainThreadException 通过StrictMode进行处理 URL带键值对 Andriod应用可利用ser ...

  7. python 学习笔记十六 django深入学习一 路由系统,模板,admin,数据库操作

    django 请求流程图 django 路由系统 在django中我们可以通过定义urls,让不同的url路由到不同的处理函数 from . import views urlpatterns = [ ...

  8. python学习笔记(十 二)、操作数据库

    每一种语言都少不了多数据库进行各种操作. python支持多种数据库.有关python支持的数据库清单,请参阅:https://wiki.python.org/moin/DatabaseInterfa ...

  9. 【转】 Pro Android学习笔记(六十):Preferences(4):MultiSelect List Preference

    目录(?)[-] XML文件 在设备中保存 读出信息 ListPreference提供单选列表,我们可以通过CheckBoxPreference提供多选列表.此外,Android在3.0后提供Mult ...

  10. 【转】 Pro Android学习笔记(六八):HTTP服务(2):HTTP POST

    目录(?)[-] 找一个测试网站 HTTP POST小例子 上次学习了HTTP GET请求,这次学习一下HTTP POST. 找一个测试网站 小例子好写,但要找个测试网站就有些麻烦,一下子无从入手,都 ...

随机推荐

  1. 9.12 其他样式;JS

    Display 显示block和隐藏none,不占位置Visbility 显示visible和隐藏hidden,占位置Overflow 超出范围 hidden隐藏透明圆角 Js脚本语言(JavaScr ...

  2. matlab和C/C++混合编程--调用opencv

    最近的我们已经将整个项目搭起来了,项目比较复杂.由于我们做的是检索系统,所以我们用asp.net(c#)做了网页,但是算法的实现是在matlab下,所以我们不得不用matlab生成动态链接库dll,然 ...

  3. strcpy函数的实现

    strcpy函数的实现 大家一般认为名不见经传strcpy函数实现不是很难,流行的strcpy函数写法是: char *my_strcpy(char *dst,const char *src) { a ...

  4. 通过KUDU获取Azure网站的日志

    部署到Azure上的website,由于无法通过RDP的方式去登录查看log,所以我们只能通过FTP的方式或者kudu的方式进行查看,具体如下: 1.使用FTP账户和密码登录网站的KUDU界面: 如您 ...

  5. C++ Reflection

    http://www.vollmann.com/en/pubs/meta/meta/meta.html http://www.extreme.indiana.edu/reflcpp/ http://w ...

  6. ecshop 订单-》订单状态 2

    // 判断订单状态 public function get_order_status($os,$ps,$ss){ $arr = array('已取消','待付款','待发货','待收货','确认收货' ...

  7. php字符串常用算法--字符串加密解密

    /** * 加密.解密字符串 * * @global string $db_hash * @global array $pwServer * @param $string 待处理字符串 * @para ...

  8. .NET软件开发与常用工具清单(转)

    http://www.cnblogs.com/smileberry/p/4047835.html

  9. authorization配置

    在 Web.config 文件的<configuration>标记的子标记<authorization>和</authorization>之间用于设置应用程序的授权 ...

  10. yii2.0-advanced 高级版项目搭建

    (一) 原文地址:http://www.yii-china.com/post/detail/1.html (二) 原文地址:http://www.yii-china.com/post/detail/2 ...