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 ...
随机推荐
- 用javascript操作xml(三)关于Jquery的html()不兼容IE的解决办法
当 $("#xxx").html(data); 不兼容,方法替换为 document.getElementById("xxx").innerHTML=data;
- Class TBoundlabel not found and so on..
Class TBoundlabel not found when you put a labeledit into a panel of CategoryPanel then you'll found ...
- C++ static全局变量与全局变量的区别/static全局函数与全局函数的区别
全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量.全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式.这两者在存储方式上并无不同.这两者的区别虽在于非静态全局变量 ...
- 从头搭建Spring MVC
1.拷贝jar文件 2.填充Web.xml 在/WEB-INF/web.xml中写入如下内容: <?xml version="1.0" encoding="UTF- ...
- 一些.net开源项目
强大的插件系统,通过Addin构建成一个功能齐全的.net开发IDE.核心是AddInTree.跟随这个项目开发许多有用的组件,比如功能文本编辑器(ICSharpCode.TextEditor),Sh ...
- docker下使用caffe的命令记录
查看所有的images sudo docker images 利用某个image生成container sudo docker run -it --net=host -v /home/tingting ...
- Android之单复选框及Spinner实现二级联动
一.基础学习 1.图形学真的很神奇啊....查了些资料做出了3D云标签,哈哈...其实直接拿来用的,我们要效仿鲁迅先生的拿来主义,嘿嘿~~3D标签云就是做一个球面,然后再球面上取均匀分布的点,把点坐标 ...
- 不同框架实现的WebService的服务端获取HttpServletRequest的方法
一. 基于xfire实现的WebService HttpServletRequest request = XFireServletController.getRequest(); 二. 基于axis实 ...
- OA学习笔记-001-项目介绍
基本知识 框架工具 解决方案(经典应用) 项目 12天 ========================================== OA项目, 12天 BBS 一.什么是OA? 辅助管理.提 ...
- Visual Studio统计有效代码行数
在网上看到别人用的方法: 按CTRL+SHIFT+F (Find in files),勾上支持正则表达式,然后输入搜索内容: ^:b*[^:b#/]+.*$ 以上表达式的统计可做到:#开头和/开头或者 ...