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

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

 

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

 

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

 

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

 

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

 

[java] view plain copy

 

 

  1. package monAndMysql;  
  2.    
  3. import java.util.ArrayList;  
  4. import java.util.Date;  
  5. import java.util.List;  
  6. import java.util.Set;  
  7. import org.bson.BsonDocument;  
  8. import org.bson.BsonString;  
  9. import org.bson.Document;  
  10. import org.bson.conversions.Bson;  
  11. import com.mongodb.BasicDBObject;  
  12. import com.mongodb.DB;  
  13. import com.mongodb.DBCollection;  
  14. import com.mongodb.DBCursor;  
  15. import com.mongodb.DBObject;  
  16. import com.mongodb.MongoClient;  
  17. import com.mongodb.MongoCredential;  
  18. import com.mongodb.ServerAddress;  
  19. import com.mongodb.client.FindIterable;  
  20. import com.mongodb.client.MongoCollection;  
  21. import com.mongodb.client.MongoCursor;  
  22. import com.mongodb.client.MongoDatabase;  
  23. import com.mongodb.client.model.Filters;  
  24.    
  25. /** 
  26.  * mongodb和mysql性能测试 
  27.  * 
  28.  * @author tuzongxun123 
  29.  * 
  30.  */  
  31. public class MonAndMysqlTest {  
  32.    
  33.     public static void main(String[] args) {  
  34.        mongodbTest();  
  35.     }  
  36.    
  37.     public static void mongodbTest() {  
  38.        ServerAddress sa = new ServerAddress("192.168.0.7", 27017);  
  39.        List<MongoCredential> mongoCredentialList = newArrayList<MongoCredential>();  
  40.        // java代码连接mongodb3.0数据库验证,userName,dbName,password  
  41.        mongoCredentialList.add(MongoCredential.createMongoCRCredential(  
  42.               "admin", "admin", "123456".toCharArray()));  
  43.        MongoClient client = new MongoClient(sa, mongoCredentialList);  
  44.        // 第一种方式  
  45.        // 第一种方式获取db,该方法已经不建议使用  
  46.        DB mongoDB = client.getDB("mongoTest1");  
  47.        DBCollection collection1 = mongoDB.getCollection("userTest1");  
  48.        // 这里的数据类型是dbobject  
  49.        DBObject document1 = new BasicDBObject();  
  50.        document1.put("name", "mongoTest1");  
  51.        document1.put("createTime", new Date().getTime());  
  52.        // 插入数据  
  53.        collection1.insert(document1);  
  54.        // 查询数据  
  55.        DBCursor cursor1 = collection1.find();  
  56.        System.out.println("第一种方式插入数据的结果:");  
  57.        while (cursor1.hasNext()) {  
  58.            DBObject object = cursor1.next();  
  59.            Set<String> keySet = object.keySet();  
  60.            for (String key : keySet) {  
  61.               System.out.println(key + ":" + object.get(key));  
  62.            }  
  63.        }  
  64.        // 更改数据  
  65.        DBObject query = new BasicDBObject();  
  66.        DBObject update = new BasicDBObject();  
  67.        query.put("name", "mongoTest1");  
  68.        update.put("$set", new BasicDBObject("name", "update1"));  
  69.        collection1.update(query, update);  
  70.        System.out  
  71.            .println("--------------------------------------------------------------------------------------");  
  72.        System.out.println("第一种方式修改数据的结果:");  
  73.        DBCursor cursor11 = collection1.find();  
  74.        while (cursor11.hasNext()) {  
  75.            DBObject object = cursor11.next();  
  76.            Set<String> keySet = object.keySet();  
  77.            for (String key : keySet) {  
  78.               System.out.println(key + ":" + object.get(key));  
  79.            }  
  80.        }  
  81.        // 删除数据  
  82.        DBObject query1 = new BasicDBObject();  
  83.        query1.put("name", "update1");  
  84.        collection1.remove(query1);  
  85.        System.out  
  86.            .println("--------------------------------------------------------------------------------------");  
  87.        System.out.println("第一种方式删除数据的结果:");  
时间: 2024-08-03 04:31:44

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

javaweb-java根据ip判断网络连接情况(i除Java执行ping命令和InetAddress这两种方式)

问题描述 java根据ip判断网络连接情况(i除Java执行ping命令和InetAddress这两种方式) 因为ava执行ping命令和InetAddress这两种方式执行速度太慢了,有没有更好的解决方法??? 解决方案 获得客户端真实IP地址的方法一: public String getRemortIP(HttpServletRequest request) { if (request.getHeader("x-forwarded-for") == null) { return r

Java 连接Access数据库的两种方式_java

java连接MS Access的两种方式: 1.JDBC-ODBC Java连接Access可以使用MS自带的管理工具-->数据源(ODBC)设置建立连接,这样就不需要导入jar.但是,如此一来程序部署的每个机器上都要进行设置不方面.所以现在不会使用啦. 2.JDBC java也可以和连接其他数据库一样连接MS Access,导入数据库相应的jar包,进行连接. 复制代码 代码如下: java Access JDBC jar包:Access_JDBC30.jar 具体连接,参考下面代码: 复制代

mysql下创建数据库的两种方式

mysql|创建|数据|数据库 1.命令创建 首先以root用户登录 sql>create database databasename; 2.如何你想在没登录mysql情况下创建mysql数据库,那在mysql的data目录下创建一个userbase目录即可.在连上mysql后,show databases;就可以看见你所创建的userbase库了 注:删除数据库 sql>drop database databasename;

Java基础使用技巧:深拷贝的两种方式

⑴浅复制(浅克隆) 被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象.换言之,浅复制仅仅复制所考虑的对象,而不复制它所引用的对象. ⑵深复制(深克隆) 被复制对象的所有变量都含有与原来的对象相同的值,除去那些引用其他对象的变量.那些引用其他对象的变量将指向被复制过的新对象,而不再是原有的那些被引用的对象.换言之,深复制把要复制的对象所引用的对象都复制了一遍. Java的clone()方法 ⑴clone方法将对象复制了一份并返回给调用者.一般而言,clon

Java创建线程的两种方式_java

前言 多线程是我们开发过程中经常遇到的,也是必不可少需要掌握的.当我们知道需要进行多线程开发时首先需要知道的自然是如何实现多线程,也就是我们应该如何创建线程. 在Java中创建线程和创建普通的类的对象操作是一样的,我们可以通过两种方式来创建线程: 1.继承Thread类,并重写run()方法. 2.实现Runnable接口,并实现run()方法. 方法一:继承Thread类 代码非常简单 首先重载一个构造函数,以便我们可以给线程命名. 重写run()方法. 这里我们先让线程输出线程名+start

在已知某一平台硬件功率的情况下,计算android代码的总能耗

问题描述 在已知某一平台硬件功率的情况下,计算android代码的总能耗 如果已知一段开源代码 ,通过什么办法在计算出所消耗的能耗呢,或者说怎样看出每条代码对应调用了什么硬件和调用时间,有研究过的前辈么,求救 解决方案 调用了什么硬件是不能看到的因为Android基于java,java不能直接调用硬件,可以通过汇编语言.计算机组成原理和操作系统这些课程大概知道是怎么调用的.调用时间可以通过前后获取系统时间相减大概知道花了多少时间. 解决方案二: 这个还真挺偏的.我也想知道,同关注. 解决方案三:

java多线程总结一:线程的两种创建方式及优劣比较

http://blog.csdn.net/touch_2011/article/details/6891026 1.通过实现Runnable接口线程创建 (1).定义一个类实现Runnable接口,重写接口中的run()方法.在run()方法中加入具体的任务代码或处理逻辑. (2).创建Runnable接口实现类的对象. (3).创建一个Thread类的对象,需要封装前面Runnable接口实现类的对象.(接口可以实现多继承) (4).调用Thread对象的start()方法,启动线程 示例代码

Spring加载properties文件的两种方式

版权声明:尊重博主原创文章,转载请注明出处哦~http://blog.csdn.net/eson_15/article/details/51365707 目录(?)[+]         在项目中如果有些参数经常需要修改,或者后期可能需要修改,那我们最好把这些参数放到properties文件中,源代码中读取properties里面的配置,这样后期只需要改动properties文件即可,不需要修改源代码,这样更加方便.在spring中也可以这么做,而且Spring有两种加载properties文件

Java文件编译的两种方式以及在SpringMVC传参中带来的问题

一.基本概念 java编译成.class 有两种方式.使用javac,默认使用的release方式,而使用的MyEclipse工具,用的是debug模式.值得注意的是使用release模式下对于函数参数会改变. public class Test{  private static void sayHello(){   System.out.println("Hello world");  }  public static void main(String[] args){   sayH