由于更改了mongodb3.0数据库的密码,导致这几天storm组对数据进行处理的时候,一直在报mongodb数据库连接不上的异常。

 

主要原因实际上是和mongodb本身无关的,因为他们改的是配置文件的密码,而实际上这个密码在代码中根本就没有使用,他们在代码中已经把用户验证信息写死。

 

在协助他们解决这个问题的时候,我看到他们代码中在和mongodb数据库交互时使用了已经不被建议使用的方法,于是便抽时间尝试了一下另一种被建议的方式实现各功能。

 

当然了,生产环境中用的是mongodb集群,验证时的写法和单机时会略有不同,我这里就只拿单机试验。

 

使用原生的Java代码操作mongodb数据库,就不需要和spring集成的那些jar包,只用到了mongodb-java-driver3.0.3.jar,代码如下,一些需要注意的地方也都写在注释中:

 

  1. package monAndMysql;
  2. import java.util.ArrayList;
  3. import java.util.Date;
  4. import java.util.List;
  5. import java.util.Set;
  6. import org.bson.BsonDocument;
  7. import org.bson.BsonString;
  8. import org.bson.Document;
  9. import org.bson.conversions.Bson;
  10. import com.mongodb.BasicDBObject;
  11. import com.mongodb.DB;
  12. import com.mongodb.DBCollection;
  13. import com.mongodb.DBCursor;
  14. import com.mongodb.DBObject;
  15. import com.mongodb.MongoClient;
  16. import com.mongodb.MongoCredential;
  17. import com.mongodb.ServerAddress;
  18. import com.mongodb.client.FindIterable;
  19. import com.mongodb.client.MongoCollection;
  20. import com.mongodb.client.MongoCursor;
  21. import com.mongodb.client.MongoDatabase;
  22. import com.mongodb.client.model.Filters;
  23. /**
  24. * mongodb和mysql性能测试
  25. *
  26. * @author tuzongxun123
  27. *
  28. */
  29. public class MonAndMysqlTest {
  30. public static void main(String[] args) {
  31. mongodbTest();
  32. }
  33. public static void mongodbTest() {
  34. ServerAddress sa = new ServerAddress("192.168.0.7", 27017);
  35. List<MongoCredential> mongoCredentialList = newArrayList<MongoCredential>();
  36. // java代码连接mongodb3.0数据库验证,userName,dbName,password
  37. mongoCredentialList.add(MongoCredential.createMongoCRCredential(
  38. "admin", "admin", "123456".toCharArray()));
  39. MongoClient client = new MongoClient(sa, mongoCredentialList);
  40. // 第一种方式
  41. // 第一种方式获取db,该方法已经不建议使用
  42. DB mongoDB = client.getDB("mongoTest1");
  43. DBCollection collection1 = mongoDB.getCollection("userTest1");
  44. // 这里的数据类型是dbobject
  45. DBObject document1 = new BasicDBObject();
  46. document1.put("name", "mongoTest1");
  47. document1.put("createTime", new Date().getTime());
  48. // 插入数据
  49. collection1.insert(document1);
  50. // 查询数据
  51. DBCursor cursor1 = collection1.find();
  52. System.out.println("第一种方式插入数据的结果:");
  53. while (cursor1.hasNext()) {
  54. DBObject object = cursor1.next();
  55. Set<String> keySet = object.keySet();
  56. for (String key : keySet) {
  57. System.out.println(key + ":" + object.get(key));
  58. }
  59. }
  60. // 更改数据
  61. DBObject query = new BasicDBObject();
  62. DBObject update = new BasicDBObject();
  63. query.put("name", "mongoTest1");
  64. update.put("$set", new BasicDBObject("name", "update1"));
  65. collection1.update(query, update);
  66. System.out
  67. .println("--------------------------------------------------------------------------------------");
  68. System.out.println("第一种方式修改数据的结果:");
  69. DBCursor cursor11 = collection1.find();
  70. while (cursor11.hasNext()) {
  71. DBObject object = cursor11.next();
  72. Set<String> keySet = object.keySet();
  73. for (String key : keySet) {
  74. System.out.println(key + ":" + object.get(key));
  75. }
  76. }
  77. // 删除数据
  78. DBObject query1 = new BasicDBObject();
  79. query1.put("name", "update1");
  80. collection1.remove(query1);
  81. System.out
  82. .println("--------------------------------------------------------------------------------------");
  83. System.out.println("第一种方式删除数据的结果:");
  84. DBCursor cursor12 = collection1.find();
  85. while (cursor12.hasNext()) {
  86. DBObject object = cursor12.next();
  87. Set<String> keySet = object.keySet();
  88. for (String key : keySet) {
  89. System.out.println(key + ":" + object.get(key));
  90. }
  91. }
  92. // 第二种方式
  93. System.out
  94. .println("****************************************************************************");
  95. // 第二种方式获取db及插入数据和查询操作。推荐方式
  96. MongoDatabase database = client.getDatabase("mongoTest2");
  97. // 注意这里的数据类型是document
  98. Document document2 = new Document();
  99. document2.put("name", "mongoTest2");
  100. document2.put("createTime", new Date().getTime());
  101. MongoCollection collection2 = database.getCollection("userTest2");
  102. // 插入数据
  103. collection2.insertOne(document2);
  104. // 查询数据,注意这里直接查询出的结果不是游标,还需要转换
  105. FindIterable<Document> findIterable = collection2.find();
  106. MongoCursor<Document> cursor2 = findIterable.iterator();
  107. System.out.println("第二种方式插入数据的结果:");
  108. while (cursor2.hasNext()) {
  109. Document document = cursor2.next();
  110. Set<String> keySet = document.keySet();
  111. for (String key : keySet) {
  112. System.out.println(key + ":" + document.get(key));
  113. }
  114. }
  115. // 更改数据
  116. Bson filter = Filters.eq("name", "mongoTest2");
  117. BsonDocument update2 = new BsonDocument();
  118. update2.put("$set", new BsonDocument("name", new BsonString("update2")));
  119. collection2.updateOne(filter, update2);
  120. System.out
  121. .println("--------------------------------------------------------------------------------------");
  122. MongoCursor<Document> cursor21 = findIterable.iterator();
  123. System.out.println("第二种方式更改数据的结果:");
  124. while (cursor21.hasNext()) {
  125. Document document = cursor21.next();
  126. Set<String> keySet = document.keySet();
  127. for (String key : keySet) {
  128. System.out.println(key + ":" + document.get(key));
  129. }
  130. }
  131. // 删除数据
  132. Bson filter2 = Filters.eq("name", "update2");
  133. collection2.deleteOne(filter2);
  134. System.out
  135. .println("--------------------------------------------------------------------------------------");
  136. MongoCursor<Document> cursor22 = findIterable.iterator();
  137. System.out.println("第二种方式删除数据的结果:");
  138. while (cursor22.hasNext()) {
  139. Document document = cursor22.next();
  140. Set<String> keySet = document.keySet();
  141. for (String key : keySet) {
  142. System.out.println(key + ":" + document.get(key));
  143. }
  144. }
  145. // 关闭数据库连接
  146. client.close();
  147. }
  148. }

执行main方法后,控制台打印结果如下图所示,证明操作都是没有问题的:

不使用spring的情况下原生java代码两种方式操作mongodb数据库的更多相关文章

  1. 不使用spring的情况下用java原生代码操作mongodb数据库的两种方式

    由于更改了mongodb3.0数据库的密码,导致这几天storm组对数据进行处理的时候,一直在报mongodb数据库连接不上的异常.   主要原因实际上是和mongodb本身无关的,因为他们改的是配置 ...

  2. 【Spring】SpringMVC非注解配置的两种方式

    目录结构: contents structure [+] SpringMVC是什么 Spring MVC的设计原理 SpringMVC配置的第一种方式 1,复制Jar包 2,Web.xml文件 3,M ...

  3. Springboot 创建的maven获取resource资源下的文件的两种方式

    Springboot 创建的maven项目 打包后获取resource下的资源文件的两种方式: 资源目录: resources/config/wordFileXml/wordFileRecord.xm ...

  4. 依赖Spring的情况下,Java Web项目如何在启动时加载数据库中的数据?

    原文:https://blog.csdn.net/u012345283/article/details/39558537 原文:https://blog.csdn.net/wandrong/artic ...

  5. Spring MVC框架下在java代码中访问applicationContext.xml文件中配置的文件(可以用于读取配置文件内容)

    <bean id="propertyConfigurer" class="com.****.framework.core.SpringPropertiesUtil& ...

  6. linux 下部署nodejs(两种方式)

    本次博客的编写时用的系统环境,刚装好的Centos 6.4  64位虚拟机. 另外关于linux 其他系统的安装 可以参考https://github.com/joyent/node/wiki/Ins ...

  7. ubuntu下安装PyCharm的两种方式

    PyCharm一个是Python集成开发环境,它既提供收费的专业版,也提供免费的社区版本.PyCharm带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如调试.语法高亮.Proj ...

  8. ubuntu下创建定时任务的两种方式及常见问题解决方案

    创建定时任务的目的就是摆脱人为对程序重复性地运行. 0. 首先用下面的指令检查你是否安装crontab, crontab -l 如果本身就有的话,那么出现如下指令 LC_CTYPE="zh_ ...

  9. Spring中使用属性文件properties的两种方式

    实际项目中,通常将可配置的参数放到属性文件中,例如数据库连接信息.redis连接信息等,便于统一管理.然后通过IoC框架spring将其加载到上下文中,使得程序可以直接使用. 创建mysql.prop ...

随机推荐

  1. winform app.config文件的动态配置

    获取 获取应用程序exe.config文件中  节点value值 /// <summary> /// 功能: 读取应用程序exe.config文件中 /// appSettings节点下 ...

  2. 编程之美--2. Trie树 (Trie图)

    #1014 : Trie树 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助, ...

  3. Nginx reopen reload作用及工作过程

    http://www.iigrowing.cn/nginx-reopen-reload-zuo-yong-ji-gong-zuo-guo-cheng.html Nginx reopen reload作 ...

  4. Objective-C( 语法二)

     分类(Category):可以给某一个类扩充一些方法(不修改原来类的代码)  作用:在不改变原来类内容基础上,可以为类增加一些方法  使用注意: 1. 只能增加方法,不能增加成员变量 2. 分类方法 ...

  5. to my friends-Don't give up so fast

    早上听到大学挺要好的朋友突然说要换行,心情就一股莫名的哀伤,因为当初是三个人一起约定好的,要朝着我们共同的目标而努力奋斗的,这股热情怎能这么轻易地被现实的冷水浇灭.没错,我们是刚出社会的毛头小子,我们 ...

  6. ASP.NET Web API 入门示例详解

    REST服务已经成为最新的服务端开发趋势,ASP.NET Web API即为.NET平台的一种轻量级REST架构. ASP.NET Web API直接借鉴了ASP.NET MVC的设计,两者具有非常类 ...

  7. Android Listview & Adapter

    Listview主要有两个职责: 将数据填充到布局 处理用户的选择点击等操作 列表的显示需要三个元素: ListVeiw 用来展示列表的View 适配器(Adapter) 用来把数据映射到ListVi ...

  8. 5、Linux下面桌面的安装

    搭建本地yum仓库的方法 http://www.cnblogs.com/lql123/p/5952788.html 1.yum grouplist        (列出yum仓库里的软件组列表) .y ...

  9. Android webservice的用法详细讲解

    Android webservice的用法详细讲解 看到有很多朋友对WebService还不是很了解,在此就详细的讲讲WebService,争取说得明白吧.此文章采用的项目是我毕业设计的webserv ...

  10. Objective-C学习笔记-第二天(1)

    Objective-C中,调用方法采用的是一种消息传递机制. 参考文章:http://blog.csdn.net/xingyevc/article/details/39397873 如果向某个对象传递 ...