【问题标题】:code to connect to mongoDB error, imported jar not recognized连接mongoDB错误的代码,无法识别导入的jar
【发布时间】:2014-04-08 07:19:45
【问题描述】:

我正在尝试连接到 mogoDB 数据库,我按照

中的说明安装了 mongoDB

http://docs.mongodb.org/manual/tutorial/install-mongodb-on-debian/

并在 ubuntu 终端中通过 mongoshell 玩 mongo,一切都很精明,然后我尝试在 android 应用程序中实现它。我参考了这个教程

http://www.mkyong.com/mongodb/java-mongodb-insert-a-document/

并对其进行编辑以创建下面列出的代码

包 com.example.test1;

import java.net.UnknownHostException;
import java.text.MessageFormat;
import java.util.Set;

import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;

import com.mongodb.DB;
import com.mongodb.MongoClient;

public class InsertDocumentApp extends ActionBarActivity {
private Button btnRestart;
private Button btnCancel = null;
private TextView txtMessage =  null;
private TextView txt=null;
private ProgressBar mProgressBar =  null;
private HugeWork task = null;
private static final int MAX_PROGRESS = 10;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.showdata);

    btnRestart = (Button) findViewById(R.id.btnRestart);
    btnCancel = (Button) findViewById(R.id.btnCancel);
    txtMessage = (TextView) findViewById(R.id.txtMessage);
    mProgressBar = (ProgressBar) findViewById(R.id.progressBar);
    txt =  (TextView) findViewById(R.id.textViewname);
    // set an arbitrary max value for the progress bar
    mProgressBar.setMax(MAX_PROGRESS);
    // start the async task
    start();
}


public void cancelOnclick(View v) {
    task.cancel(true);
    btnCancel.setEnabled(false);
    btnRestart.setEnabled(true);
}

// Restart the process execution. This is the listener to the Restart button.
public void restartOnclick(View v) {
    start();
}


private void start() {

    task = new HugeWork();

    task.execute(0);

    mProgressBar.setProgress(0);

    btnCancel.setEnabled(true);
    btnRestart.setEnabled(false);
}


private void executeHardWork() 
{
    MongoClient mongoClient;
    DB db;
    try {
        try
        { 
        mongoClient = new MongoClient(); //connects to mongo server locally (seems to work)
        // mongoClient = new MongoClient("localhost",27017); //connects to mongo server locally (seems to work)
        mongoClient = new MongoClient("localhost",27017); // connects to mongo server locally
        db = mongoClient.getDB("mydb"); // connect to a database --implicitly creates database if none exists
        Set<String> colls = db.getCollectionNames();
        for (String s : colls)
            System.out.println(s);

        mongoClient.close();

        } catch (UnknownHostException ex) {
        ex.printStackTrace();
        }
    }
    catch(Exception e)
    {
        System.out.println(e);
    }
} 

        @Override
    protected void onPreExecute() {
        txtMessage.setText("Executing async task...");
        super.onPreExecute();
    }


    @Override
    protected Integer doInBackground(Integer... params) {


        int progress = ((Integer[])params)[0];

        do {

                            if (!this.isCancelled()) {
                // execute hard work - sleep
                executeHardWork();
            }
            else {
                                    break;
            }


            progress++;
            publishProgress(progress);
        } while (progress <= MAX_PROGRESS);

        return progress;
    }


    @Override
    protected void onProgressUpdate(Integer... values) {
        int progress = ((Integer[])values)[0];
        mProgressBar.setProgress(progress);
        super.onProgressUpdate(values);
    }


    @Override
    protected void onCancelled(Integer result) {
        txtMessage.setText(MessageFormat.format
        ("Async task has been cancelled at {0} seconds.", result - 1));
        super.onCancelled(result);
    }


    @Override
    protected void onPostExecute(Integer result) {
        txtMessage.setText(MessageFormat.format
        ("Async task execution finished in {0} seconds.", result - 1));
        btnCancel.setEnabled(false);
        btnRestart.setEnabled(true);
        super.onPostExecute(result);
    }
}

}

我注意到,即使在我导入了从这个链接获得的 jar 文件后,本教程中的一些导入也没有出现在 ADT 中

http://central.maven.org/maven2/org/mongodb/mongo-java-driver/2.11.3/

这是我下载的jar文件mongo-java-driver-2.11.3.jar 我通过项目/构建路径/添加外部 jar 导入它 到处都显示有“mongo items”的错误。 是因为 Eclipse 无法识别我添加到构建路径的 jar 文件吗? 这是正确的 jar 文件吗?我需要做更多的事情来让我的应用程序运行吗?

这是我在终端中输入 mongo 时出现的终端提示

mukund@mukund-ThinkPad-Edge-E431:~$ mongo
MongoDB shell version: 2.4.10
connecting to: test
Server has startup warnings: 
Wed Apr  9 10:03:04.513 [initandlisten] 
Wed Apr  9 10:03:04.513 [initandlisten] ** NOTE: This is a 32 bit MongoDB binary.
Wed Apr  9 10:03:04.513 [initandlisten] **       32 bit builds are limited to less than 2GB of data (or less with --journal). 
Wed Apr  9 10:03:04.513 [initandlisten] **       Note that journaling defaults to off for 32 bit and is currently off.
Wed Apr  9 10:03:04.513 [initandlisten] **       See http://dochub.mongodb.org/core/32bit
Wed Apr  9 10:03:04.513 [initandlisten] 
> 

我可以通过终端进入数据库,但是现在在 ADT 中显示以下错误。

使用32位ubuntu有什么问题吗?

logcat 是

04-09 10:03:47.175: W/com.mongodb.tcp(2682): Exception executing isMaster command on localhost/127.0.0.1:27017
04-09 10:03:47.175: W/com.mongodb.tcp(2682): java.net.ConnectException: failed to connect to localhost/127.0.0.1 (port 2 7017) after 10000ms: isConnected failed: ECONNREFUSED (Connection refused)
04-09 10:03:47.175: W/com.mongodb.tcp(2682):    at libcore.io.IoBridge.isConnected(IoBridge.java:223)
04-09 10:03:47.175: W/com.mongodb.tcp(2682):    at libcore.io.IoBridge.connectErrno(IoBridge.java:161)
04-09 10:03:47.175: W/com.mongodb.tcp(2682):    at libcore.io.IoBridge.connect(IoBridge.java:112)
04-09 10:03:47.175: W/com.mongodb.tcp(2682):    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
04-09 10:03:47.175: W/com.mongodb.tcp(2682):    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:459)
04-09 10:03:47.175: W/com.mongodb.tcp(2682):    at java.net.Socket.connect(Socket.java:843)
04-09 10:03:47.175: W/com.mongodb.tcp(2682):    at com.mongodb.DBPort._open(DBPort.java:223)
04-09 10:03:47.175: W/com.mongodb.tcp(2682):    at com.mongodb.DBPort.go(DBPort.java:125)
04-09 10:03:47.175: W/com.mongodb.tcp(2682):    at com.mongodb.DBPort.go(DBPort.java:106)
04-09 10:03:47.175: W/com.mongodb.tcp(2682):    at com.mongodb.DBPort.findOne(DBPort.java:162)
04-09 10:03:47.175: W/com.mongodb.tcp(2682):    at com.mongodb.DBPort.runCommand(DBPort.java:170)
04-09 10:03:47.175: W/com.mongodb.tcp(2682):    at   co m.mongodb.DBTCPConnector.initDirectConnection(DBTCPConnector.java:547)
04-09 10:03:47.175: W/com.mongodb.tcp(2682):    at com.mongodb.DBTCPConnector.checkMaster(DBTCPConnector.java:526)
04-09 10:03:47.175: W/com.mongodb.tcp(2682):    at com.mongodb.DBTCPConnector.innerCall(DBTCPConnector.java:236)
04-09 10:03:47.175: W/com.mongodb.tcp(2682):    at com.mongodb.DBTCPConnector.call(DBTCPConnector.java:216)
04-09 10:03:47.175: W/com.mongodb.tcp(2682):    at com.mongodb.DBApiLayer$MyCollection.__find(DBApiLayer.java:288)
04-09 10:03:47.175: W/com.mongodb.tcp(2682):    at com.mongodb.DBApiLayer$MyCollection.__find(DBApiLayer.java:273)
04-09 10:03:47.175: W/com.mongodb.tcp(2682):    at com.mongodb.DB.getCollectionNames(DB.java:400)
04-09 10:03:47.175: W/com.mongodb.tcp(2682):    at com.example.test1.InsertDocumentApp.executeHardWork(InsertDocumentApp.java:87)
04-09 10:03:47.175: W/com.mongodb.tcp(2682):    at com.example.test1.InsertDocumentApp.access$1(InsertDocumentApp.java:76)
04-09 10:03:47.175: W/com.mongodb.tcp(2682):    at com.example.test1.InsertDocumentApp$HugeWork.doInBackground(InsertDocumentApp.java:151)
04-09 10:03:47.175: W/com.mongodb.tcp(2682):    at com.example.test1.InsertDocumentApp$HugeWork.doInBackground(InsertDocumentApp.java:1)
04-09 10:03:47.175: W/com.mongodb.tcp(2682):    at android.os.AsyncTask$2.call(AsyncTask.java:288)
04-09 10:03:47.175: W/com.mongodb.tcp(2682):    at java.util.concurrent.FutureTask.run(FutureTask.java:237)
04-09 10:03:47.175: W/com.mongodb.tcp(2682):    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
04-09 10:03:47.175: W/com.mongodb.tcp(2682):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
04-09 10:03:47.175: W/com.mongodb.tcp(2682):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
04-09 10:03:47.175: W/com.mongodb.tcp(2682):    at java.lang.Thread.run(Thread.java:841)
04-09 10:03:47.175: W/com.mongodb.tcp(2682): Caused by: libcore.io.ErrnoException: isConnected failed: ECONNREFUSED (Connection refused)
04-09 10:03:47.175: W/com.mongodb.tcp(2682):    at libcore.io.IoBridge.isConnected(IoBridge.java:208)
04-09 10:03:47.175: W/com.mongodb.tcp(2682):    ... 27 more
04-09 10:03:47.175: W/com.mongodb(2682): emptying DBPortPool to localhost/127.0.0.1:27017 b/c of error
04-09 10:03:47.175: W/com.mongodb(2682): java.net.ConnectException: failed to connect to localhost/127.0.0.1 (port 27017) after 10000ms: isConnected failed: ECONNREFUSED (Connection refused)
04-09 10:03:47.175: W/com.mongodb(2682):    at libcore.io.IoBridge.isConnected(IoBridge.java:223)
04-09 10:03:47.175: W/com.mongodb(2682):    at libcore.io.IoBridge.connectErrno(IoBridge.java:161)
04-09 10:03:47.175: W/com.mongodb(2682):    at libcore.io.IoBridge.connect(IoBridge.java:112)
04-09 10:03:47.175: W/com.mongodb(2682):    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
04-09 10:03:47.175: W/com.mongodb(2682):    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:459)
04-09 10:03:47.175: W/com.mongodb(2682):    at java.net.Socket.connect(Socket.java:843)
04-09 10:03:47.175: W/com.mongodb(2682):    at com.mongodb.DBPort._open(DBPort.java:223)
04-09 10:03:47.175: W/com.mongodb(2682):    at com.mongodb.DBPort.go(DBPort.java:125)
04-09 10:03:47.175: W/com.mongodb(2682):    at com.mongodb.DBPort.call(DBPort.java:92)
04-09 10:03:47.175: W/com.mongodb(2682):    at com.mongodb.DBTCPConnector.innerCall(DBTCPConnector.java:244)
04-09 10:03:47.175: W/com.mongodb(2682):    at com.mongodb.DBTCPConnector.call(DBTCPConnector.java:216)
04-09 10:03:47.175: W/com.mongodb(2682):    at com.mongodb.DBApiLayer$MyCollection.__find(DBApiLayer.java:288)
04-09 10:03:47.175: W/com.mongodb(2682):    at com.mongodb.DBApiLayer$MyCollection.__find(DBApiLayer.java:273)
04-09 10:03:47.175: W/com.mongodb(2682):    at com.mongodb.DB.getCollectionNames(DB.java:400)
04-09 10:03:47.175: W/com.mongodb(2682):    at com.example.test1.InsertDocumentApp.executeHardWork(InsertDocumentApp.java:87)
 04-09 10:03:47.175: W/com.mongodb(2682):   at com.example.test1.InsertDocumentApp.access$1(InsertDocumentApp.java:76)
04-09 10:03:47.175: W/com.mongodb(2682):    at com.example.test1.InsertDocumentApp$HugeWork.doInBackground(InsertDocumentApp.java:151)
04-09 10:03:47.175: W/com.mongodb(2682):    at com.example.test1.InsertDocumentApp$HugeWork.doInBackground(InsertDocumentApp.java:1)
04-09 10:03:47.175: W/com.mongodb(2682):    at android.os.AsyncTask$2.call(AsyncTask.java:288)
04-09 10:03:47.175: W/com.mongodb(2682):    at java.util.concurrent.FutureTask.run(FutureTask.java:237)
04-09 10:03:47.175: W/com.mongodb(2682):    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
04-09 10:03:47.175: W/com.mongodb(2682):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
04-09 10:03:47.175: W/com.mongodb(2682):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
04-09 10:03:47.175: W/com.mongodb(2682):    at java.lang.Thread.run(Thread.java:841)
04-09 10:03:47.175: W/com.mongodb(2682): Caused by: libcore.io.ErrnoException: isConnected failed: ECONNREFUSED (Connection refused)
04-09 10:03:47.175: W/com.mongodb(2682):    at libcore.io.IoBridge.isConnected(IoBridge.java:208)
04-09 10:03:47.175: W/com.mongodb(2682):    ... 23 more
04-09 10:03:47.255: D/dalvikvm(2682): GC_FOR_ALLOC freed 215K, 1% free 117331K/117612K, paused 36ms, total 36ms
04-09 10:03:47.315: D/dalvikvm(2682): GC_FOR_ALLOC freed 27K, 1% free 119327K/119424K, paused 32ms, total 32ms
 04-09 10:03:47.375: D/dalvikvm(2682): GC_FOR_ALLOC freed 27K, 1% free 121338K/121432K, paused 34ms, total 34ms
04-09 10:03:47.375: I/System.out(2682): com.mongodb.MongoException$Network: Read operation to server localhost/127.0.0.1:27017 failed on database mydb

【问题讨论】:

  • 尝试将jar复制到你的eclipse项目的libs文件夹中,然后重新添加
  • 尝试提供您计算机的 ip 而不是 localhost。

标签: java android eclipse mongodb maven


【解决方案1】:

我不认为你可以在 android 内部使用 MongoDb。参考这个链接 MongoDB on Android

您所指的链接,即http://www.mkyong.com/mongodb/java-mongodb-insert-a-document/ 是在java 应用程序中工作,而不是在android 内部。

我认为你的解决方案是使用 sqlite 或 couchbase 如果你想在你的 android 设备中使用数据库,或者你可以在服务器中安装一个 MongoDb 数据库(或使用像 https://mongolab.com/ 这样的数据库)并从安装在 Web 服务器中的 Web 服务。所以设计可能看起来像这样。 你有你的 android 应用程序--> 调用 web 服务--> 调用 Mongodb

【讨论】:

  • 好的,但是,我想知道我的应用程序中出现错误的原因是什么?如果我至少导入 jar 文件,应用程序应该编译 ri8?这里的错误甚至在应用程序运行之前就发生了,所以我想我下载的 java-mongo-driver 不支持 android?
  • 嗯,我认为你是对的,MongoDb 驱动程序现在支持 android,但我仍然不知道这是否是个好主意。看看这些链接。 stackoverflow.com/questions/17913641/…stackoverflow.com/questions/11433091/…
  • 当你把 MongoDb 导入像 import com.mongodb.DBCollection;您在这些导入中看到错误了吗?
  • 我没有那样做,让我检查一下
  • 我做了,现在所有的错误都消失了,它的编译和运行,但是发生了异常04-09 05:27:59.671: W/System.err(1236): Caused by: java.net.ConnectException: failed to connect to localhost/127.0.0.1 (port 27017) after 10000ms: isConnected failed: ECONNREFUSED (Connection refused)
猜你喜欢
  • 2021-03-04
  • 2017-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-21
  • 1970-01-01
  • 2019-09-11
  • 1970-01-01
相关资源
最近更新 更多