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

本文实例讲述了Android编程连接MongoDB及增删改查等基本操作。分享给大家供大家参考,具体如下:

MongoDB简介

Mongodb,分布式文档存储数据库,由C++语言编写,旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB是一个高性能,开源,无模式的文档型数据库,是当前NoSql数据库中比较热门的一种。它在许多场景下可用于替代传统的关系型数据库或键/值存储方式。Mongo使用C++开发。

Mongo安装参考

1)下载安装包文件,解压到某一文件夹下。
官方下载地址:http://www.mongodb.org/downloads
2)配置环境变量:在path后添加安装路径。
3)启动Mongo数据库:
进入“cmd”->键入“mongod --dbpath D:\amp\MongoDBDATA”
D:\amp\MongoDBDATA 表示数据库文件存储路径
4)启动Mongo客户端:
mongo 127.0.0.1:27017/admin

Android 连接MongoDB

步骤1:下载并导入jar包到工程
步骤2:安装MongoDB到PC端(参见MongoDB安装)
步骤3:编写代码连接MongoDB实现简单操作(增删改查)

代码参考(Android端,也适用于java等工程)

1.  MongoDBUtil.java

package com.hills.happytest.utils;
import java.util.List;
import org.bson.types.ObjectId;
import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.DBObject;
import com.mongodb.Mongo;
/**
 * Class Name: MongoDBUtil.java
 * Function:
 *     The Util that MongoDB Operate.
 *   Modifications:
 *
 * @author Gym Yung.
 * @DateTime 2014-10-29 下午1:56:49
 * @version 1.0
 */
public class MongoDBUtil {
  static Mongo connection = null;
  static DB db = null;
  public MongoDBUtil(String dbName) throws Exception
  {
    connection = new Mongo("10.0.2.2:27017");
    db = connection.getDB(dbName);
  }
  public static Mongo getConnection() {
    return connection;
  }
  /**
   * Create a blanket collection.
   * @param collName :collection name.
   */
  public void createCollection(String collName)
  {
    DBObject dbs = new BasicDBObject();
    dbs.put("test", "test");
    db.createCollection(collName, dbs);
  }
  /**
   * Insert dbObject into collection.
   * @param dbObject
   * @param collName
   */
  public void insert(DBObject dbObject,String collName)
  {
    DBCollection collection = db.getCollection(collName);
    collection.insert(dbObject);
  }
  /**
   * Insert dbObject list into collection.
   * @param dbObjects
   * @param collName
   */
  public void insertBatch(List<DBObject> dbObjects,String collName)
  {
    DBCollection collection = db.getCollection(collName);
    collection.insert(dbObjects);
  }
  /**
   * Delete data By Id.
   * @param id
   * @param collName
   * @return
   */
  public int deleteById(String id,String collName)
  {
    DBCollection collection = db.getCollection(collName);
    DBObject dbs = new BasicDBObject("_id", new ObjectId(id));
    int counts = collection.remove(dbs).getN();
    return counts;
  }
  /**
   * Delete data By Condition.
   * @param dbObject
   * @param collName
   * @return
   */
  public int deleteByDbs(DBObject dbObject,String collName)
  {
    DBCollection collection = db.getCollection(collName);
    int count = collection.remove(dbObject).getN();
    return count;
  }
  /**
   * Update Data.
   * @param find
   * @param update
   * @param upsert
   * @param multi
   * @param collName
   * @return
   */
  public int update(DBObject find,DBObject update,boolean upsert,boolean multi,String collName)
  {
    DBCollection collection = db.getCollection(collName);
    int count = collection.update(find, update, upsert, multi).getN();
    return count;
  }
  /**
   * Find Data With Page.
   * @param ref
   * @param keys
   * @param start
   * @param limit
   * @param collName
   * @return
   */
  public DBCursor findWithPage(DBObject where,DBObject selection,int start,int limit,String collName)
  {
    DBCursor cursor = findNoPage(where, selection, collName);
    return cursor.limit(limit).skip(start);
  }
  /**
   * Find Data No Page.
   * @param ref
   * @param keys
   * @param collName
   * @return
   */
  public DBCursor findNoPage(DBObject where,DBObject selection,String collName)
  {
    DBCollection collection = db.getCollection(collName);
    DBCursor cursor = collection.find(where, selection);
    return cursor;
  }
}

2. MongoDBDao.java

package com.hills.happytest.utils;
import java.util.ArrayList;
import java.util.List;
import com.mongodb.BasicDBObject;
import com.mongodb.DBCursor;
import com.mongodb.DBObject;
/**
 * Class Name: MongoDBDao.java
 * Function:
 *     The Data Dao that MongoDB Operate.
 *   Modifications:
 *
 * @author Administrator
 * @DateTime 2014-10-29 下午1:57:58
 * @version 1.0
 */
public class MongoDBDao {
  private static MongoDBUtil mongoDb;
  // Init. MongoDBUtil.
  static{
    try {
      mongoDb = new MongoDBUtil("test");
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
  /**
   * Test Create a blanket collection.
   * @param collName :collection name.
   */
  public void createCollectionTest(String collName)
  {
    mongoDb.createCollection(collName);
  }
  /**
   * Test Insert dbObject into collection.
   * @param collName Collection Name.
   */
  public void insertTest(String collName)
  {
    DBObject dbs = new BasicDBObject();
    dbs.put("name", "gymyung");
    dbs.put("age", 20);
    List<String> books = new ArrayList<String>();
    books.add("EXTJS");
    books.add("MONGDB");
    books.add("JAVA");
    dbs.put("books", books);
    mongoDb.insert(dbs, collName);
  }
  /**
   * Test Insert dbObject list into collection.
   * @param collName Collection Name.
   */
  public void insertBatchTest(String collName)
  {
    List<DBObject> dbObjects = new ArrayList<DBObject>();
    DBObject jim2 = new BasicDBObject("name", "jim2");
    DBObject liuting = new BasicDBObject();
    liuting.put("name", "liuting");
    liuting.put("age", "22");
    dbObjects.add(jim2);
    dbObjects.add(liuting);
    mongoDb.insertBatch(dbObjects, collName);
  }
  /**
   * Test Delete data By Id.
   * @param collName Collection Name.
   * @return Operate Result Code.
   */
  public int deleteByIdTest(String collName)
  {
    int counts = mongoDb.deleteById("54507d19cbbd7a385c129ef5", collName);
    return counts;
  }
  /**
   * Test Delete data By Condition.
   * @param collName Collection Name.
   * @return Operate Result Code.
   */
  public int deleteByDbsTest(String collName)
  {
    DBObject jim2 = new BasicDBObject("name", "jim2");
    int count = mongoDb.deleteByDbs(jim2, collName);
    return count;
  }
  /**
   * Test Update Data.
   * @param collName Collection Name.
   * @return Operate Result Code.
   */
  public int updateTest(String collName)
  {
    DBObject liuting = new BasicDBObject();
    DBObject liuting2 = new BasicDBObject();
    liuting2.put("$set", new BasicDBObject("gender", "female"));
    int count = mongoDb.update(liuting, liuting2, false, true, collName);
    return count;
  }
  /**
   * Test Find Data With Page.
   * @param collName Collection Name.
   * @return String List Result.
   */
  public List<String> findWithPageTest(String collName)
  {
    DBCursor cursor = mongoDb.findWithPage(null, null, 0, 3, collName);
    return convertCursorToList(cursor);
  }
  /**
   * Test Find Data With Condition.
   * @param collName Collection Name.
   * @return String List Result.
   */
  public List<String> findWithConditionTest(String collName)
  {
    DBObject where = new BasicDBObject();
    where.put("age", new BasicDBObject("$lte", 26));
    where.put("gender", "female");
    DBCursor cursor = mongoDb.findNoPage(where, null,collName);
    return convertCursorToList(cursor);
  }
  /**
   * Test Find Data No Page.
   * @param collName Collection Name.
   * @return String List Result.
   */
  public List<String> findNoPageTest(String collName)
  {
    DBObject keys = new BasicDBObject();
    keys.put("_id", false);
    keys.put("name", true);
    keys.put("age", true);
    DBCursor cursor = mongoDb.findNoPage(null, keys, collName);
    return convertCursorToList(cursor);
  }
  /**
   * Convert Cursor To List.
   * @param cursor Required DBCursor.
   * @return String List Result.
   */
  private List<String> convertCursorToList(DBCursor cursor)
  {
    List<String> results = new ArrayList<String>();
    while(cursor.hasNext())
    {
      DBObject dbObject = cursor.next();
      for(String key : dbObject.keySet())
      {
        results.add("{"+key+":"+dbObject.get(key)+"}");
      }
    }
    return results;
  }
}

3. TestActivity.java

package com.hills.happytest;
import java.util.List;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import com.hills.happytest.utils.MongoDBDao;
import com.hills.happytest.utils.MongoDBUtil;
/**
 * Class Name: TestActivity.java
 * Function:
 *     Test MongoDB Operate on Android device.
 *   Modifications:
 *
 * @author Gym Yung.
 * @DateTime 2014-10-29 下午1:53:40
 * @version 1.0
 */
public class TestActivity extends Activity implements OnClickListener{
  /************** Component in Layout. ***************/
  private Button mongoTestBtn1;
  private Button mongoTestBtn2;
  private Button mongoTestBtn3;
  private Button mongoTestBtn4;
  private Button mongoTestBtn5;
  private Button mongoTestBtn6;
  private Button mongoTestBtn7;
  private Button mongoTestBtn8;
  // The Object use to MongoDB Operate.
  private MongoDBDao mongoDbDao;
  // The Collection Name in MongoDB.
  private String collName = "androidDB";
  /************** Operate Code ********************/
  private final int CREATE_COLLECTION_TEST = 100;
  private final int INSERT_TEST = 101;
  private final int INSERT_BATCH_TEST = 102;
  private final int DELETE_BY_ID_TEST = 103;
  private final int DELETE_BY_DBS_TEST = 104;
  private final int UPDATE_TEST = 105;
  private final int FIND_WITH_PAGE_TEST = 106;
  private final int FIND_NOPAGE_TEST = 107;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.mongodb_test);
    findViewAndSetListener();
    mongoDbDao = new MongoDBDao();
  }
  /**
   * Function:
   *   Find View And Set Listener.
   * @author Administrator
   * @DateTime 2014-10-29 下午1:08:50
   */
  private void findViewAndSetListener() {
    mongoTestBtn1 = (Button) findViewById(R.id.mongodb_btn1);
    mongoTestBtn2 = (Button) findViewById(R.id.mongodb_btn2);
    mongoTestBtn3 = (Button) findViewById(R.id.mongodb_btn3);
    mongoTestBtn4 = (Button) findViewById(R.id.mongodb_btn4);
    mongoTestBtn5 = (Button) findViewById(R.id.mongodb_btn5);
    mongoTestBtn6 = (Button) findViewById(R.id.mongodb_btn6);
    mongoTestBtn7 = (Button) findViewById(R.id.mongodb_btn7);
    mongoTestBtn8 = (Button) findViewById(R.id.mongodb_btn8);
    mongoTestBtn1.setOnClickListener(this);
    mongoTestBtn2.setOnClickListener(this);
    mongoTestBtn3.setOnClickListener(this);
    mongoTestBtn4.setOnClickListener(this);
    mongoTestBtn5.setOnClickListener(this);
    mongoTestBtn6.setOnClickListener(this);
    mongoTestBtn7.setOnClickListener(this);
    mongoTestBtn8.setOnClickListener(this);
  }
  @Override
  public void onClick(View v) {
    MyAsyncTast myAsyncTast = new MyAsyncTast();
    switch(v.getId()){
    case R.id.mongodb_btn1:
      myAsyncTast.execute(CREATE_COLLECTION_TEST);
      break;
    case R.id.mongodb_btn2:
      myAsyncTast.execute(INSERT_TEST);
      break;
    case R.id.mongodb_btn3:
      myAsyncTast.execute(INSERT_BATCH_TEST);
      break;
    case R.id.mongodb_btn4:
      myAsyncTast.execute(DELETE_BY_ID_TEST);
      break;
    case R.id.mongodb_btn5:
      myAsyncTast.execute(DELETE_BY_DBS_TEST);
      break;
    case R.id.mongodb_btn6:
      myAsyncTast.execute(UPDATE_TEST);
      break;
    case R.id.mongodb_btn7:
      myAsyncTast.execute(FIND_WITH_PAGE_TEST);
      break;
    case R.id.mongodb_btn8:
      myAsyncTast.execute(FIND_NOPAGE_TEST);
      break;
    }
  }
  /**
   * Class Name: TestActivity.java
   * Function:
   *     Execute Internet Task by Async...
   *   Modifications:
   *
   * @author Administrator
   * @DateTime 2014-10-29 下午1:54:34
   * @version 1.0
   */
  class MyAsyncTast extends AsyncTask<Object, Object, Object>{
    @Override
    protected Object doInBackground(Object... params) {
      Object result = null;
      switch(Integer.parseInt(params[0].toString()))
      {
        case CREATE_COLLECTION_TEST:
          mongoDbDao.createCollectionTest(collName);
          break;
        case INSERT_TEST:
          mongoDbDao.insertTest(collName);
          break;
        case INSERT_BATCH_TEST:
          mongoDbDao.insertBatchTest(collName);
          break;
        case DELETE_BY_ID_TEST:
          result = mongoDbDao.deleteByIdTest(collName);
          break;
        case DELETE_BY_DBS_TEST:
          result = mongoDbDao.deleteByDbsTest(collName);
          break;
        case UPDATE_TEST:
          result = mongoDbDao.updateTest(collName);
          break;
        case FIND_WITH_PAGE_TEST:
          result = mongoDbDao.findWithPageTest(collName);
          break;
        case FIND_NOPAGE_TEST:
          result = mongoDbDao.findNoPageTest(collName);
          break;
      }
      return result;
    }
    @SuppressWarnings("unchecked")
    @Override
    protected void onPostExecute(Object result) {
      if(result instanceof Integer)
      {
        showDialogWithText("操作结果码:"+result.toString());
      }else if(result instanceof List)
      {
        String resText = "";
        for(String res : ((List<String>) result))
        {
          resText += res + "\n";
        }
        showDialogWithText("操作结果\n:"+resText);
      }
      super.onPostExecute(result);
    }
  }
  /**
   * Function:
   *   Show Dialog With Text.
   * @author Administrator
   * @DateTime 2014-10-29 下午1:21:34
   * @param text
   */
  private void showDialogWithText(String text)
  {
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setIcon(R.drawable.ic_launcher);
    builder.setTitle("MongoDB操作结果");
    builder.setMessage(text);
    builder.setNeutralButton("确定", new DialogInterface.OnClickListener()
    {
      @Override
      public void onClick(DialogInterface dialog, int which)
      {
        dialog.dismiss();
      }
    });
    builder.create().show();
  }
  @Override
  protected void onDestroy() {
    // Close MongoDB Connection If It is Not Null.
    if(MongoDBUtil.getConnection() != null)
    {
      MongoDBUtil.getConnection().close();
    }
    super.onDestroy();
  }
}

4.  添加权限

<uses-permission Android:name="android.permission.INTERNET"/>

更多关于Android相关内容感兴趣的读者可查看本站专题:《Android数据库操作技巧总结》、《Android编程之activity操作技巧总结》、《Android开发入门与进阶教程》、《Android资源操作技巧汇总》、《Android视图View技巧总结》及《Android控件用法总结》

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

(0)

相关推荐

  • 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数据库增删改查操作的使用详解

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

  • 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中数据库常见操作实例分析

    本文实例讲述了Android中数据库常见操作.分享给大家供大家参考,具体如下: android中数据库操作是非常常见了,我们会经常用到,操作的方法也有很多种形式,这里我就把最常见的两种形式记录下来了,以备以后用到方便查看.我就不写注释和解释了,因为android数据库的操作和其它数据库操作本质上都是一样的,大同小异.需要的一些基本解释都在代码中,直接上代码了. 简单的代码文件目录: 首先这个类是数据库帮助类,DBHelper.java,代码如下: package net.loonggg.db;

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

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

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

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

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

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

  • 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 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

随机推荐