1. 程式人生 > >【HelloMongoDB】MongoDB首個java程式及除錯

【HelloMongoDB】MongoDB首個java程式及除錯

程式

package lsq.HelloMongoDb;

import java.util.ArrayList;
import java.util.List;

import org.bson.Document;

import com.mongodb.MongoClient;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;

public class Demo {
 
   public static void main( String args[] ){
      try{   
       // 連線到 mongodb 服務
         @SuppressWarnings("resource")
		MongoClient mongoClient = new MongoClient( "localhost" , 27017 );
       
         // 連線到資料庫
         MongoDatabase mongoDatabase = mongoClient.getDatabase("Demo");  
       System.out.println(" --- 連線到資料庫 Demo 成功");       
       
       
		//建立集合 
       mongoDatabase.createCollection("test");
       System.out.println(" --- 集合 Demo.test 建立成功");
       
       MongoCollection<Document> collection = mongoDatabase.getCollection("test");
       System.out.println(" --- 集合 Demo.test 選擇成功");
		
		// 插入文件
		Document document = new Document("title", "MongoDB").  
		         append("description", "database").  
		         append("likes", 100).  
		         append("by", "Fly");  
		         List<Document> documents = new ArrayList<Document>();  
		         documents.add(document);  
		         collection.insertMany(documents);  
		         System.out.println(" --- 文件  Demo.test.MongoDB 插入成功");  

         //檢索所有文件  
         /** 
         * 1. 獲取迭代器FindIterable<Document> 
         * 2. 獲取遊標MongoCursor<Document> 
         * 3. 通過遊標遍歷檢索出的文件集合 
         * */  
         FindIterable<Document> findIterable = collection.find();  
         MongoCursor<Document> mongoCursor = findIterable.iterator();  
         while(mongoCursor.hasNext()){  
            System.out.println("檢索結果:"+mongoCursor.next());  
         }  
		  
      }catch(Exception e){
        System.err.println( e.getClass().getName() + ": " + e.getMessage() );
     }
   }
}

除錯過程

問題#1 缺少依賴包

新增所需要的依賴包 mongo-java-driver.jar mongodb-driver.jar mongodb-driver-sync.jar  

編輯 pom.xml, 引入依賴 :

    <dependency>
    	<groupId>org.mongodb</groupId>
    	<artifactId>mongo-java-driver</artifactId>
    	<version>3.6.3</version>
    </dependency>
    <dependency>
    	<groupId>org.mongodb</groupId>
    	<artifactId>mongodb-driver</artifactId>
    	<version>3.6.3</version>
    </dependency>
    
        <dependency>
        <groupId>org.mongodb</groupId>
        <artifactId>mongodb-driver-sync</artifactId>
        <version>3.8.2</version>
    </dependency>
    

問題#2 找不到主類

$ java -jar HelloMongoDb-0.0.1-SNAPSHOT.jar 
HelloMongoDb-0.0.1-SNAPSHOT.jar中沒有主清單屬性

解決方案1)編輯 pom.xml,指定主類

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>2.6</version>
                <configuration>
                    <archive>
                        <manifest>
                            <mainClass>lsq.HelloMongoDb.Demo</mainClass> 
                        </manifest>
                    </archive>
                </configuration>
                <executions>
                    <execution>
                        <id>default</id>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                        <phase>package</phase>
                    </execution>
                </executions>
            </plugin>

對應的執行指令:

$ java -jar HelloMongoDb-0.0.1-SNAPSHOT.jar

解決方案2)java指令中指定主類

$ java -classpath HelloMongoDb-0.0.1-SNAPSHOT.jar  lsq.HelloMongoDb.Demo

解決方案3) hadoop jar 指令指定主類

$ hadoop jar HelloMongoDb-0.0.1-SNAPSHOT.jar lsq.HelloMongoDb.Demo

 問題#3 找不到依賴類

Exception in thread "main" java.lang.NoClassDefFoundError: com/mongodb/MongoClient
	at lsq.HelloMongoDb.Chapter5.main(Chapter5.java:12)
Caused by: java.lang.ClassNotFoundException: com.mongodb.MongoClient
	at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
	... 1 more

解決方案1)

將mongo-java-driver.jar中的com/ org/ 兩個子目錄提取之後,加入 HelloMongoDb-0.0.1-SNAPSHOT.jar 包中。

解決方案2)

編輯pom.xml , 要求複製所需依賴包:

  <plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-dependency-plugin</artifactId>
	<version>3.1.0</version>
	<executions>
	    <execution>
	        <id>copy-dependencies</id>
	        <phase>prepare-package</phase>
	        <goals>
	            <goal>copy-dependencies</goal>
	        </goals>
	        <configuration>
	            <!-- ${project.build.directory}為Maven內建變數,預設為target -->
	            <outputDirectory>${project.build.directory}/classes/lib</outputDirectory>
	   			 <!-- 表示是否不包含間接依賴的包  -->
	            <excludeTransitive>true</excludeTransitive>
	    		<!-- 表示複製的jar檔案去掉版本資訊 -->
	         	<stripVersion>true</stripVersion>
	       </configuration>
	  </execution>
	</executions>
</plugin>

則相關依賴jar包會進入 應用jar包的lib 目錄下, 對應的執行指令:

$ hadoop jar HelloMongoDb-0.0.1-SNAPSHOT.jar lsq.HelloMongoDb.Demo

註明:應用jar包的lib目錄下有依賴包,但是 java 執行指令還是無法找到, hadoop jar 指令可以找到。

問題#4 MongoSocketOpenException

driver.cluster: Exception in monitor thread while connecting to server idx022:27017
com.mongodb.MongoSocketOpenException: Exception opening socket
    at com.mongodb.connection.SocketStream.open(SocketStream.java:62)

[[email protected] ~/data]$ hadoop jar HelloMongoDb-0.0.1-SNAPSHOT.jar lsq.HelloMongoDb.Demo
18/11/01 11:42:41 INFO driver.cluster: Cluster created with settings {hosts=[idx022:27017], mode=
SINGLE, requiredClusterType=UNKNOWN, serverSelectionTimeout='30000 ms', maxWaitQueueSize=500}
Connect to database successfully
Authentication:false
18/11/01 11:42:41 INFO driver.cluster: Exception in monitor thread while connecting to server idx022:27017
com.mongodb.MongoSocketOpenException: Exception opening socket
	at com.mongodb.connection.SocketStream.open(SocketStream.java:62)
	at com.mongodb.connection.InternalStreamConnection.open(InternalStreamConnection.java:126)
	at com.mongodb.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMon
itor.java:114)	at java.lang.Thread.run(Thread.java:745)
Caused by: java.net.ConnectException: 拒絕連線
	at java.net.PlainSocketImpl.socketConnect(Native Method)
	at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
	at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
	at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
	at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
	at java.net.Socket.connect(Socket.java:589)
	at com.mongodb.connection.SocketStreamHelper.initialize(SocketStreamHelper.java:59)
	at com.mongodb.connection.SocketStream.open(SocketStream.java:57)
	... 3 more

編輯原始碼:

-- MongoClient mongoClient = new MongoClient( "idx022" , 27017 );
 ++MongoClient mongoClient = new MongoClient( "localhost" , 27017 );

備註:啟動 mongd 所用指令: $ mongod --dbpath ~/data/mongodb

最終執行結果

$ hadoop jar HelloMongoDb-0.0.1-SNAPSHOT.jar lsq.HelloMongoDb.Demo

18/11/01 15:35:43 INFO driver.cluster: Cluster created with settings {hosts=[localhost:27017], mode=SINGLE, requiredClusterType=UNKNOWN, serverSelectionTimeout='30000 ms', maxWaitQueueSize=500} 
--- 連線到資料庫 Demo 成功
2018-11-01T15:35:43.979+0800 I NETWORK  [listener] connection accepted from 127.0.0.1:42122 #22 (1 connection now open)
18/11/01 15:35:43 INFO driver.cluster: Cluster description not yet available. Waiting for 30000 ms before timing out
2018-11-01T15:35:43.992+0800 I NETWORK  [conn22] received client metadata from 127.0.0.1:42122 conn22: { driver: { name: "mongo-java-driver", version: "3.6.3" }, os: { type: "Linux", name: "Linux", architecture: "amd64", version: "2.6.32-358.el6.x86_64" }, platform: "Java/Oracle Corporation/1.8.0_60-b27" }
18/11/01 15:35:44 INFO driver.connection: Opened connection [connectionId{localValue:1, serverValue:22}] to localhost:27017
18/11/01 15:35:44 INFO driver.cluster: Monitor thread successfully connected to server with description ServerDescription{address=localhost:27017, type=STANDALONE, state=CONNECTED, ok=true, version=ServerVersion{versionList=[4, 0, 3]}, minWireVersion=0, maxWireVersion=7, maxDocumentSize=16777216, logicalSessionTimeoutMinutes=30, roundTripTimeNanos=6518364}
2018-11-01T15:35:44.046+0800 I NETWORK  [listener] connection accepted from 127.0.0.1:42123 #23 (2 connections now open)
2018-11-01T15:35:44.047+0800 I NETWORK  [conn23] received client metadata from 127.0.0.1:42123 
conn23: { driver: { name: "mongo-java-driver", version: "3.6.3" }, os: { type: "Linux", name: "Linux", architecture: "amd64", version: "2.6.32-358.el6.x86_64" }, platform: "Java/Oracle Corporation/1.8.0_60-b27" }
18/11/01 15:35:44 INFO driver.connection: Opened connection [connectionId{localValue:2, serverValue:23}] to localhost:27017
2018-11-01T15:35:44.062+0800 W COMMAND  [conn23] the autoIndexId option is deprecated and will be removed in a future release
2018-11-01T15:35:44.062+0800 I STORAGE  [conn23] createCollection: Demo.test with generated UUID: 19ef07c0-d55d-44de-b0f4-a4170c41f139 
--- 集合 Demo.test 建立成功
 --- 集合 Demo.test 選擇成功
 --- 文件  Demo.test.MongoDB 插入成功
檢索結果:Document{{_id=5bdaacd0e6a7bf1578ea4ae6, title=MongoDB, description=database, likes=100, by=Fly}}
2018-11-01T15:35:44.196+0800 I NETWORK  [conn22] end connection 127.0.0.1:42122 (1 connection now open)
2018-11-01T15:35:44.196+0800 I NETWORK  [conn23] end connection 127.0.0.1:42123 (0 connections now open)

原始碼參考

相關推薦

HelloMongoDBMongoDBjava程式除錯

程式 package lsq.HelloMongoDb; import java.util.ArrayList; import java.util.List; import org.bson.Document; import com.mongodb.MongoCl

練習題構造方法 編寫Java程式,模擬簡單的計算器。

package day09; /*1.【練習題】構造方法 編寫Java程式,模擬簡單的計算器。 定義名為Number的類,其中有兩個整型資料成員n1和n2,應宣告為私有。編寫構造方法,賦予n1和n2初始值,再為該類定義加(addition)、減(subtration)、乘(

演算法給定兩字串,確定一個字串重新排列後能否變成另一個字串(java實現)

分析:兩個字串的長度都不相同時,不可能是變位詞 package com.billkang.algorithm; import java.util.Arrays; /** * 給定兩個字串,確

MongoDB配置文件說明

details 5.0 key 第一個 pen log data 端口 this 啟動MongoDB有2種方式,一是直接指定配置參數,二是指定配置文件。這裏先介紹配置文件,啟動方式如下: mongod --config /etc/mongodb.conf 配置如下:ve

BioCode將多蛋白質序列分成單個的txt文檔

span package bsp -1 http println != show ade 代碼說明: fasta格式的蛋白質序列,一個txt裏面有很多蛋白質序列,計算ss、pssm或disorder score時候都需要單條計算,需要分開。 分割前: 分割後: show

MongoDB管理之副本集

bottom reference mil 沒有 options 過程 新版 會有 滿足 一、復制介紹 所謂的復制就是在多個主機之間同步數據的過程。 1、數據冗余及可用性 復制技術提供數據冗余及可用性,在不同的數據庫服務器上使用多個數據副本,復制技術防止單個數據庫服務器出現數

MongoDB管理之安全性

方法 開啟 oot backup 由於 alt 集群管理 失敗 exec 要保證一個安全的MongoDB運行環境,DBA需要實施一些控制保證用戶或應用程序僅僅訪問它們需要的數據。這些措施包括但不限於: 認證機制 基於角色的訪問控制 加密 審計 一、認證機制 認證是驗證客

MongoDB文檔的CURD操作

其中 iat options match imu 可選 不能 dal 多個 一、插入文檔 使用insert方法插入文檔到一個集合中,如果集合不存在創建集合,有以下幾種方法: db.collection.insertOne({}):(v3.2 new) #插入一個文檔到集

MongoDB安裝配置

.org root 終端 配置 conn tin serve cal 數據文件 一、MongoDB安裝 1、下載並解壓 wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel62-3.2.0.tgz

MongoDB入門

ger 劃分 lob .com 字符 help further 如果 keys 下面是mongodb的一些基本概念: 文檔是MongoDB中數據的基本單元,類似關系數據庫中的行。 集合,是存儲文檔的容器,類似關系數據庫中的表。 MongoDB的單個實例容納多個數據庫,每個

MongoDB索引管理

過期 則無 面向 ssa 距離 comment fields 字段名 不包含 一、索引介紹 在mongodb中,索引用來支持高效查詢。如果沒有索引,mongodb必須在整個集合中掃描每個文檔來查找匹配的文檔。但是如果建立合適的索引,mongodb就可以通過索引來限制檢查的文

JavaScript MD5 與 Java MessageDigest 加密後的值相同

cda padding highlight xe7 net abs algorithm urn -a function integer(n) { return n%(0xffffffff+1); } function shr(a,b) { a=integer(a);

XSY1295calc n點n條邊無向連通圖計數 prufer序列

ring pre end ctime 節點 splay 按順序 sin algorithm 題目大意   求\(n\)個點\(n\)條邊的無向連通圖的個數   \(n\leq 5000\) 題解   顯然是一個環上有很多外向樹。   首先有一個東西:\(n\)個點選\(k\

MongoDB學習筆記(查詢)

順序 god ... ive HR 操作 方式 mar obj 原文地址 MongoDB學習筆記(查詢) 基本查詢: 構造查詢數據。 > db.test.findOne() { "_id" : ObjectId("4fd58ecbb9ac507e96276f1a")

NOI9272 偶數

pla 數字 原理 OS 動態 sin 多少 xxxx 遍歷 題目鏈接:bajdcc/ACM描述在所有的N位數中,有多少個數中有偶數個數字3?結果模12345。(1<=N<=10000) 樣例輸入2 樣例輸出73 方法一:窮舉評價:最簡單又是效率最低的方法。缺陷

PATB1023 組最小數(20 分)

最小數 [1] ace pac 存儲位置 bool algorithm tdi include #include<stdio.h> #include<algorithm> using namespace std; struct number{

PATB1006 換格式輸出整數(15 分)

pac sca printf alloc sin clu malloc main () #include<cstdio> #include<malloc.h> #include<algorithm> using namespace std

JMeter完成一個java請求的壓測

span 依賴 壓測 雙擊 led long urn 相關 記錄 JMeter完成java請求的壓力測試詳解以及問題總結 原文地址:http://www.cnblogs.com/zhaoxd07/p/4895224.html 作者:KK_Yolan

實戰MongoDB 分片原理概述 + 部署 MongoDB 分片群集 +源碼包

balancer test 概述 b- 使用 說明 中一 瓶頸 標記 目錄: 1· MongoDB 分片概述2· 部署 MongoDB 分片群集3· MongoDB 分片管理4· 推薦 MongoDB 、MySQL 基礎文章5· 文章總結 MongoDB 分片概述 1)什

轉載linux作業系統與應用程式的main函式

來源:https://blog.csdn.net/h542723151/article/details/52154871   這幾天一直在糾結: main函式是程式的入口,一個程式啟動後,經過bootloader的初始化就該經main函式進入C語言的世界,但是linux中每個應用程式的開始都是