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 ...
随机推荐
- mysql统计表的大小
如下是sql语句: SELECT TABLE_NAME as name,DATA_LENGTH+INDEX_LENGTH as len,TABLE_ROWS as rows FROM informat ...
- python 三分钟入门
1.Python环境配置(2.7版本): Python官网:https://www.python.org/ Pycharm官网 http://www.jetbrains.com/pycharm/dow ...
- Python的面向对象1
今天,我们来介绍Python的面向对象编程,其实面向对象并不陌生,在C++ ,Java ,PHP中也有大量使用! 好了,我们来步入正题! 那什么是面向对象编程呢? 1. 面向对象编程是一种程序设计 ...
- OrderedDict
OrderedDict 使用dict时,Key是无序的.在对dict做迭代时,我们无法确定Key的顺序. 如果要保持Key的顺序,可以用OrderedDict: >>> from c ...
- uublog在线测试demo
http://demo.uublog.me/ 后台 http://demo.uublog.me/admin/ 用户名/密码:admin/admin
- 基于u-boot源码的简单shell软件实现
一.概述 1.shell概念 Shell(命令解析器),它用于接收用户输入的命令,进行解析,然后调用相应的应用程序,为使用者提供了使用软件的界面. shell是操作系统最外面的一层.shell管理你与 ...
- arm-linux-gcc编译器定义寄存器变量
uboot代码中有这么一句话“#define DECLARE_GLOBAL_DATA_PTR register volatile gd_t *gd asm ("r8")”, ...
- 一个matlab数字图像处理程序的解释
clc; %clc是清除command window里的内容 clear all; %clear是清除workspace里的变量 close all; %close all来关闭所有已经打开的图像窗口 ...
- UI控件切圆角
1. xib下设置View圆角 这个很简单, 只需要重写 - (void)drawRect:(CGRect)rect 方法就行了 1 2 3 4 5 6 - (void)drawRect:(CGRe ...
- APNs推送, 处理通知
设备接到apns发来的通知,应用处理通知有以下几种情况: 1. 应用还没有加载 这时如果点击通知的显示按钮,会调用didFinishLaunchingWithOptions,不会调用didReceiv ...