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


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

     

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

     

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

     

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

     

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

     

    [java] view plain copy
     在CODE上查看代码片派生到我的代码片
    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("第一种方式删除数据的结果:");  
    88.        DBCursor cursor12 = collection1.find();  
    89.        while (cursor12.hasNext()) {  
    90.            DBObject object = cursor12.next();  
    91.            Set<String> keySet = object.keySet();  
    92.            for (String key : keySet) {  
    93.               System.out.println(key + ":" + object.get(key));  
    94.            }  
    95.        }  
    96.        // 另外一种方式  
    97.        System.out  
    98.                .println("****************************************************************************");  
    99.        // 另外一种方式获取db及插入数据和查询操作。推荐方式  
    100.        MongoDatabase database = client.getDatabase("mongoTest2");  
    101.        // 注意这里的数据类型是document  
    102.        Document document2 = new Document();  
    103.        document2.put("name""mongoTest2");  
    104.        document2.put("createTime"new Date().getTime());  
    105.        MongoCollection collection2 = database.getCollection("userTest2");  
    106.        // 插入数据  
    107.        collection2.insertOne(document2);  
    108.        // 查询数据,注意这里直接查询出的结果不是游标,还须要转换  
    109.        FindIterable<Document> findIterable = collection2.find();  
    110.        MongoCursor<Document> cursor2 = findIterable.iterator();  
    111.        System.out.println("另外一种方式插入数据的结果:");  
    112.        while (cursor2.hasNext()) {  
    113.            Document document = cursor2.next();  
    114.            Set<String> keySet = document.keySet();  
    115.            for (String key : keySet) {  
    116.               System.out.println(key + ":" + document.get(key));  
    117.            }  
    118.        }  
    119.        // 更改数据  
    120.    
    121.        Bson filter = Filters.eq("name""mongoTest2");  
    122.        BsonDocument update2 = new BsonDocument();  
    123.        update2.put("$set"new BsonDocument("name"new BsonString("update2")));  
    124.        collection2.updateOne(filter, update2);  
    125.        System.out  
    126.            .println("--------------------------------------------------------------------------------------");  
    127.        MongoCursor<Document> cursor21 = findIterable.iterator();  
    128.        System.out.println("另外一种方式更改数据的结果:");  
    129.        while (cursor21.hasNext()) {  
    130.            Document document = cursor21.next();  
    131.            Set<String> keySet = document.keySet();  
    132.            for (String key : keySet) {  
    133.               System.out.println(key + ":" + document.get(key));  
    134.            }  
    135.        }  
    136.        // 删除数据  
    137.        Bson filter2 = Filters.eq("name""update2");  
    138.        collection2.deleteOne(filter2);  
    139.        System.out  
    140.            .println("--------------------------------------------------------------------------------------");  
    141.        MongoCursor<Document> cursor22 = findIterable.iterator();  
    142.        System.out.println("另外一种方式删除数据的结果:");  
    143.        while (cursor22.hasNext()) {  
    144.            Document document = cursor22.next();  
    145.            Set<String> keySet = document.keySet();  
    146.            for (String key : keySet) {  
    147.               System.out.println(key + ":" + document.get(key));  
    148.            }  
    149.        }  
    150.        // 关闭数据库连接  
    151.        client.close();  
    152.     }  
    153.    
    154. }  


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

  • 相关阅读:
    使用Chrome开发者工具研究JavaScript的垃圾回收机制
    Java JDK目录下的jmap和jhat工具的使用方式
    Java注解@Cacheable的工作原理
    使用Java JUnit框架里的@Rule注解的用法举例
    使用Java JUnit框架里的@SuiteClasses注解管理测试用例
    Java JUnit框架里@Category注解的工作原理
    使用SAP CRM mock框架进行单元测试的设计
    将ABAP透明表的定义(元数据)解析出来导入到剪切板(clipboard)里
    SAP ABAP Netweaver里的胖接口(fat interface)
    关于STM32的FLASH操作【转载】
  • 原文地址:https://www.cnblogs.com/cynchanpin/p/7402592.html
Copyright © 2020-2023  润新知