mongodb数据库连接池(java版)
- mongodb数据库接口的设计

package storm.db;
import java.util.ArrayList;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBObject;
/**
* 类名: MongoDBDao
* 作者:lky
*/
public interface MongoDBDao {
/**
*
* 方法名:getDb
* 作者:lky
* 描述:获取指定的mongodb数据库
* @param dbName
* @return
*/
public DB getDb(String dbName);
/**
*
* 方法名:getCollection
* 作者:lky
* 描述:获取指定mongodb数据库的collection集合
* @param dbName 数据库名
* @param collectionName 数据库集合名
* @return
*/
public DBCollection getCollection(String dbName, String collectionName);
/**
*
* 方法名:inSert
* 作者:lky
* 描述:向指定的数据库中添加给定的keys和相应的values
* @param dbName
* @param collectionName
* @param keys
* @param values
* @return
*/
public boolean inSert(String dbName, String collectionName, String keys, Object values);
/**
*
* 方法名:delete
* 作者:lky
* 描述:删除数据库dbName中,指定keys和相应values的值
* @param dbName
* @param collectionName
* @param keys
* @param values
* @return
*/
public boolean delete(String dbName, String collectionName, String keys, Object values);
/**
*
* 方法名:find
* 作者:lky
* 描述:从数据库dbName中取出相应数目的数据
* @param dbName
* @param collectionName
* @param keys
* @param values
* @param num
* @return
*/
public ArrayList<DBObject> find(String dbName, String collectionName, int num);
/**
*
* 方法名:update
* 作者:lky
* 描述:更新数据库dbName,用指定的newValue更新oldValue
* @param dbName
* @param collectionName
* @param oldValue
* @param newValue
* @return
*/
public boolean update(String dbName, String collectionName, DBObject oldValue, DBObject newValue);
/**
*
* 方法名:isExit
* 作者:lky
* 描述:判断给定的keys和相应的values在指定的dbName的collectionName集合中是否存在
* @param dbName
* @param collectionName
* @param keys
* @param values
* @return
*/
public boolean isExit(String dbName, String collectionName, String key, Object value);
}

- 数据库连接池的实现

package storm.db;
import java.net.UnknownHostException;
import java.util.ArrayList;
import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.DBObject;
import com.mongodb.MongoClient;
import com.mongodb.MongoClientOptions;
import com.mongodb.ServerAddress;
import com.mongodb.WriteResult;
/*
* mongodb数据库链接池
*/
public class MongoDBDaoImpl implements MongoDBDao
{
private MongoClient mongoClient = null;
private static final MongoDBDaoImpl mongoDBDaoImpl = new MongoDBDaoImpl();// 饿汉式单例模式
private MongoDBDaoImpl()
{
if (mongoClient == null)
{
MongoClientOptions.Builder buide = new MongoClientOptions.Builder();
buide.connectionsPerHost(100);// 与目标数据库可以建立的最大链接数
buide.connectTimeout(1000 * 60 * 20);// 与数据库建立链接的超时时间
buide.maxWaitTime(100 * 60 * 5);// 一个线程成功获取到一个可用数据库之前的最大等待时间
buide.threadsAllowedToBlockForConnectionMultiplier(100);
buide.maxConnectionIdleTime(0);
buide.maxConnectionLifeTime(0);
buide.socketTimeout(0);
buide.socketKeepAlive(true);
MongoClientOptions myOptions = buide.build();
try
{
mongoClient = new MongoClient(new ServerAddress("127.0.0.1", 27017), myOptions);
} catch (UnknownHostException e)
{
e.printStackTrace();
}
}
}
public static MongoDBDaoImpl getMongoDBDaoImpl()
{
return mongoDBDaoImpl;
}
@Override
public DB getDb(String dbName)
{
return mongoClient.getDB(dbName);
}
@Override
public DBCollection getCollection(String dbName, String collectionName)
{
DB db = mongoClient.getDB(dbName);
return db.getCollection(collectionName);
}
@Override
public boolean inSert(String dbName, String collectionName, String keys, Object values)
{
DB db = mongoClient.getDB(dbName);
DBCollection dbCollection = db.getCollection(collectionName);
long num = dbCollection.count();
BasicDBObject doc = new BasicDBObject();
doc.put(keys, values);
dbCollection.insert(doc);
if (dbCollection.count() - num > 0)
{
System.out.println("添加数据成功!!!");
return true;
}
return false;
}
@Override
public boolean delete(String dbName, String collectionName, String keys, Object values)
{
WriteResult writeResult = null;
DB db = mongoClient.getDB(dbName);
DBCollection dbCollection = db.getCollection(collectionName);
BasicDBObject doc = new BasicDBObject();
doc.put(keys, values);
writeResult = dbCollection.remove(doc);
if (writeResult.getN() > 0)
{
System.out.println("删除数据成功!!!!");
return true;
}
return false;
}
@Override
public ArrayList<DBObject> find(String dbName, String collectionName, int num)
{
int count=num;
ArrayList<DBObject> list = new ArrayList<DBObject>();
DB db = mongoClient.getDB(dbName);
DBCollection dbCollection = db.getCollection(collectionName);
DBCursor dbCursor = dbCollection.find();
if (num == -1)
{
while (dbCursor.hasNext())
{
list.add(dbCursor.next());
}
} else
{
while(dbCursor.hasNext())
{
if(count==0) break;
list.add(dbCursor.next());
count--;
}
}
return list;
}
@Override
public boolean update(String dbName, String collectionName, DBObject oldValue, DBObject newValue)
{
WriteResult writeResult = null;
DB db = mongoClient.getDB(dbName);
DBCollection dbCollection = db.getCollection(collectionName);
writeResult = dbCollection.update(oldValue, newValue);
if (writeResult.getN() > 0)
{
System.out.println("数据更新成功");
return true;
}
return false;
}
@Override
public boolean isExit(String dbName, String collectionName, String key, Object value)
{
DB db = mongoClient.getDB(dbName);
DBCollection dbCollection = db.getCollection(collectionName);
BasicDBObject doc = new BasicDBObject();
doc.put(key, value);
if (dbCollection.count(doc) > 0)
{
return true;
}
return false;
}
public static void main(String args[])
{
MongoDBDaoImpl mongoDBDaoImpl=MongoDBDaoImpl.getMongoDBDaoImpl();
ArrayList<DBObject> list=new ArrayList<DBObject>();
list=mongoDBDaoImpl.find("jd", "phone",-1);
System.out.println(list.size());
}
}
注:数据库连接池的实现是用的单例模式(懒汉式)
mongodb数据库连接池(java版)的更多相关文章
- java 数据库连接池 Oracle版
首先应加入连接池和数据库连接的配置文件:数据库连接包:ojdbc6.jar数据库连接池包:commons-pool2-2.2.jar commons-dbc ...
- [数据库连接池] Java数据库连接池--DBCP浅析.
前言对于数据库连接池, 想必大家都已经不再陌生, 这里仅仅设计Java中的两个常用数据库连接池: DBCP和C3P0(后续会更新). 一. 为何要使用数据库连接池假设网站一天有很大的访问量,数据库服务 ...
- 一个经试用效果非常不错的数据库连接池--JAVA
前言: 虽说现在许多企业级的应用服务器均自己带有数据库连接池功能,就连 Tomcat 也支持了这种功能.然而在许多时候,我们还是要使用数据库连接池,如:访问数据库的 Java 桌面应用程序等.这个数据 ...
- 资源池模式和单例模式实现的自定义数据库连接池java实现版
在企业级开发中,我们往往不会直接使用原生的JDBC操作来实现与数据库得连接.因为数据库的连接是一个很宝贵的资源且耗时,我们往往会在内存中引入一个资源池来统一管理数据库的连接.这个模式也被总结为一种设计 ...
- java之数据库连接池-dbcp&c3p0&dbutils
介绍 因为数据库连接对象的创建比较消耗性能,所以可以在应用程序启动时就在内存中开辟一片空间(集合)存放多个数据库连接对象,后面需要连接时直接从该空间中取而不用新创建:使用完毕后归还连接(将连接重新放回 ...
- Java第三方数据库连接池库-DBCP-C3P0-Tomcat内置连接池
连接池原理 数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”.预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去.我们可以通过设定连接池 ...
- 从零开始学 Java - 数据库连接池的选择 Druid
我先说说数据库连接 数据库大家都不陌生,从名字就能看出来它是「存放数据的仓库」,那我们怎么去「仓库」取东西呢?当然需要钥匙啦!这就是我们的数据库用户名.密码了,然后我们就可以打开门去任意的存取东西了. ...
- java web学习总结(十六) -------------------数据库连接池
一.应用程序直接获取数据库连接的缺点 用户每次请求都需要向数据库获得链接,而数据库创建连接通常需要消耗相对较大的资源,创建时间也较长.假设网站一天10万访问量,数据库服务器就需要创建10万次连接,极大 ...
- 【Java EE 学习 16 上】【dbcp数据库连接池】【c3p0数据库连接池】
一.回顾之前使用的动态代理的方式实现的数据库连接池: 代码: package day16.utils; import java.io.IOException; import java.lang.ref ...
随机推荐
- 读取xml文件(可执行文件根目录debug)
xml文件格式如下 <?xml version="1.0" encoding="utf-8" ?> <root> <appKey& ...
- 青瓷qici - H5小游戏 抽奖机 2 界面布局
背景图片 首先我们需要在当前场景下面创建UI的根节点,这个根节点决定了我们整个游戏的元素布局,以及适应多分辨率的缩放布局问题,所以我们其他的元素都要放在UIRoot下面. 考虑到我自己测试的时候在PC ...
- Spring Cloud Eureka Server例子程序
Spring-Cloud-Eureka-Server 及Client 例子程序 参考源代码:https://github.com/spring-cloud-samples/eureka 可以启动成功, ...
- PHP学习笔记(2) - 对PHP的印象
一.PHP是一种简单易学的面向过程的弱类型动态脚本语言,本为制作简单的个人网站而开发,现如今经过多个版本的衍变甚至加入了一些面向对象的特性.PHP试图通过发展打进企业级开发,同时也使得它自身也越来越复 ...
- Maven构建灵活配置文件
本文解决以下问题: Maven下面启动Main函数: 配置JDK版本 如何配置文件,在开发部署测试各个不同版本间无缝切换配置文件: 启动Main函数 Maven默认是不支持Main函数程序,需要在po ...
- 文件操作 - NSFileManager
iOS的沙盒机制,应用只能访问自己应用目录下的文件.iOS不像android,没有SD卡概念,不能直接访问图像.视频等内容.iOS应用产生的内容,如图像.文件.缓存内容等都必须存储在自己的沙盒内.默认 ...
- 用 OUTLOOK VBA 生成 自定义文件夹 邮件列表
Option Explicit Sub TestFolder() 'Dim outlookapp, myitem, myfolder 'Dim mailcounts As Integer ' ' 'S ...
- Cordova 设置全屏及退出全屏切换
设置全屏在super.init();之前 最后才退出全屏. 以下为具体代码: package com.agile.ittm; import android.os.Bundle; import andr ...
- LibLinear(SVM包)的MATLAB安装
LibLinear(SVM包)的MATLAB安装 1 LIBSVM介绍 LIBSVM是众所周知的支持向量机分类工具包(一些支持向量机(SVM)的开源代码库的链接及其简介),运用方便简单,其中的核函数( ...
- http://www.ibm.com/developerworks/cn/opensource/os-cn-cas/
http://www.ibm.com/developerworks/cn/opensource/os-cn-cas/