Android中数据库常见操作实例分析

本文实例讲述了Android中数据库常见操作。分享给大家供大家参考,具体如下:

android中数据库操作是非常常见了,我们会经常用到,操作的方法也有很多种形式,这里我就把最常见的两种形式记录下来了,以备以后用到方便查看。我就不写注释和解释了,因为android数据库的操作和其它数据库操作本质上都是一样的,大同小异。需要的一些基本解释都在代码中,直接上代码了。

简单的代码文件目录:

首先这个类是数据库帮助类,DBHelper.java,代码如下:

package net.loonggg.db;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
/**
 * 数据库帮助类,继承android自带的SQLiteOpenHelper 主要用于数据库的创建与更新
 *
 * @author loonggg
 *
 */
public class DBHelper extends SQLiteOpenHelper {
 public DBHelper(Context context) {
  super(context, DBInfo.DB.DB_NAME, null, DBInfo.DB.DB_VERSION);
 }
 @Override
 public void onCreate(SQLiteDatabase db) {
  db.execSQL(DBInfo.Table.USER_INFO_CREATE);
 }
 @Override
 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
  db.execSQL(DBInfo.Table.USER_INFO_DROP);
  onCreate(db);
 }
}

其次是数据库信息类,DBInfo.java,代码如下:

package net.loonggg.db;
/**
 * 数据库信息类,主要是保存一些数据库的版本,名字,及数据库表的创建语句和表的信息等,通过这个类记录,方便操作
 *
 * @author loonggg
 *
 */
public class DBInfo {
 /**
  * 数据库信息
  *
  * @author loonggg
  *
  */
 public static class DB {
  // 数据库名称
  public static final String DB_NAME = "test.db";
  // 数据库的版本号
  public static final int DB_VERSION = 1;
 }
 /**
  * 数据库表的信息
  *
  * @author loonggg
  *
  */
 public static class Table {
  public static final String USER_INFO_TB_NAME = "user_table";
  public static final String USER_INFO_CREATE = "CREATE TABLE IF NOT EXISTS "
    + USER_INFO_TB_NAME
    + " ( _id INTEGER PRIMARY KEY,userId text,userName text)";
  public static final String USER_INFO_DROP = "DROP TABLE"
    + USER_INFO_TB_NAME;
 }
}

再次是数据库操作类,DBService.java,代码如下:

package net.loonggg.service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import net.loonggg.db.DBHelper;
import net.loonggg.db.DBInfo.Table;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
/**
 * 数据库操作类,这个类主要的功能是:存放数据库操作的一些方法 这里有一些例子:包含数据库的增删改查,分别有两种方法的操作,各有优缺点,都在解释中
 *
 * @author loonggg
 *
 */
public class DBService {
 private DBHelper dbHelper = null;
 public DBService(Context context) {
  dbHelper = new DBHelper(context);
 }
 /**
  * 添加一条记录到数据库
  *
  * @param id
  * @param name
  */
 public void add(String id, String name) {
  SQLiteDatabase db = dbHelper.getWritableDatabase();
  // 不好之处:无返回值,无法判断是否插入成功
  db.execSQL("insert into user_table (userId,userName) values (?,?)",
    new Object[] { id, name });
  db.close();
 }
 public long addAndroid(String id, String name) {
  SQLiteDatabase db = dbHelper.getWritableDatabase();
  ContentValues values = new ContentValues();
  values.put("userId", id);
  values.put("userName", name);
  // 好处:有返回值
  long result = db.insert(Table.USER_INFO_TB_NAME, null, values);// 返回值是插入的是第几行,大于0代表添加成功
  db.close();
  return result;
 }
 /**
  * 查询某条记录是否存在
  *
  * @param name
  * @return
  */
 public boolean find(String name) {
  SQLiteDatabase db = dbHelper.getReadableDatabase();
  Cursor cursor = db.rawQuery(
    "select * from user_table where userName = ?",
    new String[] { name });
  boolean result = cursor.moveToNext();
  db.close();
  return result;
 }
 public boolean findAndroid(String name) {
  SQLiteDatabase db = dbHelper.getReadableDatabase();
  Cursor cursor = db.query(Table.USER_INFO_TB_NAME, null, "userName = ?",
    new String[] { name }, null, null, null);
  boolean result = cursor.moveToNext();// true代表查找到了
  db.close();
  return result;
 }
 /**
  * 修改一条记录
  *
  * @param id
  * @param name
  */
 public void update(String id, String name) {
  SQLiteDatabase db = dbHelper.getWritableDatabase();
  // 缺点无返回值
  db.execSQL("update user_table set userName = ? where userId = ?",
    new Object[] { name, id });
  db.close();
 }
 public int updateAndroid(String id, String name) {
  SQLiteDatabase db = dbHelper.getWritableDatabase();
  ContentValues values = new ContentValues();
  values.put("userName", name);
  // 返回值大于0代表修改更新成功
  int result = db.update(Table.USER_INFO_TB_NAME, values, "userId = ?",
    new String[] { id });
  db.close();
  return result;
 }
 /**
  * 删除一条记录
  *
  * @param name
  */
 public void delete(String name) {
  SQLiteDatabase db = dbHelper.getWritableDatabase();
  db.execSQL("delete from user_table where userName = ?",
    new String[] { name });
  db.close();
 }
 public int deleteAndroid(String name) {
  SQLiteDatabase db = dbHelper.getWritableDatabase();
  int result = db.delete(Table.USER_INFO_TB_NAME, "userName = ?",
    new String[] { name });// 返回值为受影响的行数,大于0代表成功
  db.close();
  return result;
 }
 /**
  * 返回所有的数据库信息
  *
  * @return
  */
 public List<HashMap<String, String>> findAll() {
  List<HashMap<String, String>> list = null;
  SQLiteDatabase db = dbHelper.getReadableDatabase();
  Cursor cursor = db.rawQuery("select * from user_table", null);
  if (cursor.getCount() > 0) {
   list = new ArrayList<HashMap<String, String>>();
   while (cursor.moveToNext()) {
    String id = cursor.getString(cursor.getColumnIndex("userId"));
    String name = cursor.getString(cursor
      .getColumnIndex("userName"));
    HashMap<String, String> map = new HashMap<String, String>();
    map.put("id", id);
    map.put("name", name);
    list.add(map);
   }
  }
  cursor.close();
  db.close();
  return list;
 }
 public List<HashMap<String, String>> findAllAndroid() {
  List<HashMap<String, String>> list = null;
  SQLiteDatabase db = dbHelper.getReadableDatabase();
  Cursor cursor = db.query(Table.USER_INFO_TB_NAME, new String[] {
    "userId", "userName" }, null, null, null, null, null);
  if (cursor.getCount() > 0) {
   list = new ArrayList<HashMap<String, String>>();
   while (cursor.moveToNext()) {
    String id = cursor.getString(cursor.getColumnIndex("userId"));
    String name = cursor.getString(cursor
      .getColumnIndex("userName"));
    HashMap<String, String> map = new HashMap<String, String>();
    map.put("id", id);
    map.put("name", name);
    list.add(map);
   }
  }
  cursor.close();
  db.close();
  return list;
 }
}

最后是MainActivity,简单的调用了一下,这些操作,代码如下:

package net.loonggg.test;
import net.loonggg.service.DBService;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends Activity {
 private Button queryOne;
 private Button insert;
 private Button update;
 private Button delete;
 private Button findAll;
 private DBService service;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  queryOne = (Button) findViewById(R.id.queryOne);
  insert = (Button) findViewById(R.id.insert);
  update = (Button) findViewById(R.id.update);
  delete = (Button) findViewById(R.id.delete);
  findAll = (Button) findViewById(R.id.findAll);
  queryOne.setOnClickListener(new ButtonListener());
  insert.setOnClickListener(new ButtonListener());
  update.setOnClickListener(new ButtonListener());
  delete.setOnClickListener(new ButtonListener());
  findAll.setOnClickListener(new ButtonListener());
  service = new DBService(this);
 }
 class ButtonListener implements View.OnClickListener {
  @Override
  public void onClick(View v) {
   switch (v.getId()) {
   case R.id.queryOne:
    // service.find("loonggg");
    service.findAndroid("loonggg");
    break;
   case R.id.insert:
    // service.add("1", "loonggg");
    service.addAndroid("2", "heihei");
    break;
   case R.id.update:
    // service.update("1", "timmy");
    service.updateAndroid("1", "haha");
    break;
   case R.id.delete:
    // service.delete("timmy");
    service.deleteAndroid("heihei");
    break;
   case R.id.findAll:
    // service.findAll();
    service.findAllAndroid();
    break;
   default:
    break;
   }
  }
 }
}

还有MainActivity对应的布局文件,activity_main.xml:

<LinearLayout 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:orientation="vertical" >
 <Button
  android:id="@+id/queryOne"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:text="查询一条记录" />
 <Button
  android:id="@+id/insert"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:text="添加" />
 <Button
  android:id="@+id/update"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:text="修改" />
 <Button
  android:id="@+id/delete"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:text="删除" />
 <Button
  android:id="@+id/findAll"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:text="查询全部" />
</LinearLayout>

到这里就介绍完了,这些代码并不高深,之所以记录下来,是留着以后用到的时候方便查看,当然这个代码对于初学者,还是非常有帮助的。

希望本文所述对大家Android程序设计有所帮助。

(0)

相关推荐

  • Android中操作SQLite数据库快速入门教程

    SQLite是Android平台软件开发中会经常用到的数据库产品,作为一款轻型数据库,SQLite的设计目标就是是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够.下面我们一起来看看针对Android平台的SQlite 3的使用. 以下概念都是在Android平台的SQlite限制下的理解: 数据库基础概念 1.SQlite 通过文件来保存数据库,一个文件就是一个数据库. 2.数据库里又包含数个表格: 3.每个表格里面包含了多个记录

  • android通过jxl读excel存入sqlite3数据库

    复制代码 代码如下: package com.demo.day20140228; import java.io.File;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.SQLException;import java.sql.Statement; import jxl.Cell;import jxl.Sheet;import jx

  • Android通过Webservice操作sqlserver数据库实例代码

    首页在AndroidManifest.xml中添加访问数据库权限 <uses-sdk android:minSdkVersion="7" /> <uses-permission android:name="android.permission.INTERNET" /> 在src中新建一个连接webservice的类,名字随意,这里叫做"HttpConnSoap".基本上这个类是固定的,要改的大多数就是webservice端

  • Android操作SQLite数据库(增、删、改、查、分页等)及ListView显示数据的方法详解

    本文实例讲述了Android操作SQLite数据库(增.删.改.查.分页等)及ListView显示数据的方法.分享给大家供大家参考,具体如下: 由于刚接触android开发,故此想把学到的基础知识记录一下,以备查询,故此写的比较啰嗦: 步骤如下: 一.介绍: 此文主要是介绍怎么使用android自带的数据库SQLite,以及把后台的数据用ListView控件显示 二.新建一个android工程--DBSQLiteOperate 工程目录: 三.清单列表AndroidManifest.xml的配置

  • Android SQLite数据库增删改查操作的案例分析

    Person实体类 复制代码 代码如下: package com.ljq.domain; public class Person {    private Integer id;    private String name;    private String phone; public Person() {        super();    } public Person(String name, String phone) {        super();        this.n

  • Android编程连接MongoDB及增删改查等基本操作示例

    本文实例讲述了Android编程连接MongoDB及增删改查等基本操作.分享给大家供大家参考,具体如下: MongoDB简介 Mongodb,分布式文档存储数据库,由C++语言编写,旨在为WEB应用提供可扩展的高性能数据存储解决方案.MongoDB是一个高性能,开源,无模式的文档型数据库,是当前NoSql数据库中比较热门的一种.它在许多场景下可用于替代传统的关系型数据库或键/值存储方式.Mongo使用C++开发. Mongo安装参考 1)下载安装包文件,解压到某一文件夹下. 官方下载地址:htt

  • Android使用SQLite数据库的简单实例

    先画个图,了解下Android下数据库操作的简单流程: 1.首先,写一个自己的数据库操作帮助类,这个类继承自Android自带的SQLiteOpenHelper. 2.在自己的DAO层借助自己的Helper写数据库操作的一些方法 3.Activity调用DAO层的数据库操作方法进行操作 下面例子是: 1.Helper 复制代码 代码如下: package cn.learn.db.util; import android.content.Context;import android.databas

  • Android学习笔记-保存数据到SQL数据库中(Saving Data in SQL Databases)

    知识点: 1.使用SQL Helper创建数据库 2.数据的增删查改(PRDU:Put.Read.Delete.Update) 背景知识: 上篇文章学习了android保存文件,今天学习的是保存数据到SQL数据库中.相信大家对数据库都不陌生.对于大量重复的,有特定结构的数据的保存,用 SQL数据库 来保存是最理想不过了. 下面将用一个关于联系人的数据库Demo来具体学习. 具体知识: 1.定义Contract类 在创建SQL数据库之前,要创建Contract类.那什么是Contract类呢? 复

  • Android 数据库打包随APK发布的实例代码

    其实很简单,就是把我们的数据库文件放到我们的手机里,所以不必局限在哪个地方写这个代码,在第一次创建数据库的时候可以,我觉得在软件起动页里效果更好一点,首先我们应该把事先写好的数据库文件比如 test.db放到res文件夹里的raw文件夹里,也可以放到assets里,因为这两个文件夹不会在生成APK的时候不会被压缩. 1,DataBaseUtil用于将raw中的db文件copy到手机中,代码如下 复制代码 代码如下: import java.io.File;import java.io.FileO

  • Android SQLite数据库增删改查操作的使用详解

    一.使用嵌入式关系型SQLite数据库存储数据 在Android平台上,集成了一个嵌入式关系型数据库--SQLite,SQLite3支持NULL.INTEGER.REAL(浮点数字). TEXT(字符串文本)和BLOB(二进制对象)数据类型,虽然它支持的类型只有五种,但实际上sqlite3也接受varchar(n). char(n).decimal(p,s) 等数据类型,只不过在运算或保存时会转成对应的五种数据类型. SQLite最大的特点是你可以把各种类型的数据保存到任何字段中,而不用关心字段

  • Android开发中的数据库事务用法分析

    本文实例讲述了Android开发中的数据库事务用法.分享给大家供大家参考,具体如下: 在android应用程序开发中,在使用到数据库的时候,事务处理是非常重要的. 首先Android数据库操作(特别是写操作)是非常慢的,将所有操作打包成一个事务能大大提高处理速度. 其次是保证数据的一致性,让一个事务中的所有操作都成功执行,或者失败,或者所有操作回滚. 如果您喜欢使用其他平台(如PHP + MySQL),代码通常在一个功能强大的服务器上运行,一般不会被意外中止,但在android平台上,您将会因为

随机推荐