从java程序运行我的mongodb命令

时间:2016-02-23 01:43:05

标签: java linux mongodb

如何从java代码运行多个mongodb命令。当我运行java程序时,我需要mongodb命令在后台执行。这个程序抛出一些异常“线程中的异常”主“java.io.IOException:无法运行程序”db.createCollection(“employ”)“:error = 2,java.lang.ProcessBuilder.start中没有这样的文件或目录( ProcessBuilder.java:1029)...“。

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class try1
{

    public static void main(String[] args) throws Exception{

        String command ="mongo";
        String command1="db.createCollection(\"employ\")";
        Process proc = Runtime.getRuntime().exec(command);
        Process proc1 = Runtime.getRuntime().exec(command1);

        BufferedReader reader =  
              new BufferedReader(new InputStreamReader(proc.getInputStream()));
        String line = "";
        while((line = reader.readLine()) != null) {
            System.out.print(line + "\n");
        }
        proc.waitFor();   

        BufferedReader reader1 =  
              new BufferedReader(new InputStreamReader(proc.getInputStream()));
        String line1 = "";
        while((line1 = reader1.readLine()) != null) {
            System.out.print(line1 + "\n");
        }
        proc1.waitFor(); 
    }
}

我需要从java程序运行一组mongo db命令。该程序与其他终端命令一起使用,如“ls”(仅限单个命令)。但是如果我们将command1和命令都指定为“ls”则存在问题。只执行一个ls命令。如果只尝试使用一个mongo db命令,则“mongo”命令不会完全执行(程序不会终止)。是因为“proc.waitFor()”。

2 个答案:

答案 0 :(得分:1)

我得到了代码。 db.eval()函数符合我的目的。它完美地运作。 :) "查询"是存储mongodb查询的String。

 public  void qexecute()
        {
        try{String query="db.products.insert( { item: "card", qty: 15 } )";
              MongoClient mongo = new MongoClient("localhost",27017);
              DB db = mongo.getDB("test");
              DBCollection collection = db.getCollection(tablename);  
              db.eval(query);   
             }
          catch(UnknownHostException e){
              System.out.println(e);
           }
           catch (MongoException.DuplicateKey e) {
              System.out.println("Exception Caught" + e);
           }
    }

答案 1 :(得分:-1)

我强烈建议使用Mongo Spring Data。你可以这样做:

import com.mongodb.MongoClient;
import com.mongodb.MongoException;
import com.mongodb.WriteConcern;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.BasicDBObject;
import com.mongodb.DBObject;
import com.mongodb.DBCursor;
import com.mongodb.ServerAddress;
import java.util.Arrays;

public class MongoDBCollection {

public static void main(String args[]) {

    try {

        //Connect to Database
        MongoClient mongoClient = new MongoClient("localhost",27017);
        DB db = mongoClient.getDB("myDB");
        System.out.println("Your connection to DB is ready for Use::"+db);

        //Create Collection
        DBCollection linked = db.createCollection("employ",new BasicDBObject()); 
        System.out.println("Collection employ created successfully");

    } catch(Exception e) {
        System.out.println(e.getClass().getName() + ": " + e.getMessage());
    }

}

}