当前位置:Gxlcms > 数据库问题 > Java连接,操作MongoDB

Java连接,操作MongoDB

时间:2021-07-01 10:21:17 帮助过:22人阅读

.yc.mongodb; import java.util.Iterator; import java.util.Set; import com.mongodb.BasicDBObject; import com.mongodb.DB; import com.mongodb.DBCollection; import com.mongodb.DBCursor; import com.mongodb.DBObject; import com.mongodb.Mongo; import com.mongodb.WriteResult; public class MongoLink2 { public static void main(String[] args) { Mongo mongo=null; DB db=null; try { //链接mongo服务器 mongo=new Mongo("127.0.0.1",27017); //根据mongodb数据库的名称获得DB对象,连接数据库yc db=mongo.getDB("yc"); //发送获得请求 db.requestStart(); //获得其集合 Set<String> collections=db.getCollectionNames(); Iterator itr=collections.iterator(); //迭代输出信息 while(itr.hasNext()){ System.out.println(itr.next()); } DBCollection dbObject=db.getCollection("yc"); DBObject object=null; //添加 object=new BasicDBObject(); object.put("_id", 1003); object.put("name","张三"); object.put("sex","男"); WriteResult rs=dbObject.insert(object); object.put("_id", 1002); //移除 dbObject.remove(new BasicDBObject()); //查询所有 DBCursor cursor=dbObject.find(); while(cursor.hasNext()){ object=cursor.next(); System.out.println(object); } } catch (Exception e) { e.printStackTrace(); }finally{ if(mongo!=null){ mongo.close(); } } } }

运行的结果如下:
技术分享
至此,其实已经可以使用,代码的耦合太高,功能捆绑的太严重,不方便调用,
接着对其进行封装。

先定义一个属性文件:
技术分享
里面定义了一些基本的配置,例如用户名,数据库名,ip,端口等。
接着定义一个类去读取其文件.这里文件的话最好被定义为单例,

package com.yc.mongodb;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

@SuppressWarnings("serial")
public class MyPro extends Properties{

    private static MyPro instanece=new MyPro();

    private MyPro(){
        InputStream is=MyPro.class.getResourceAsStream("/db.properties");
        try {
            this.load(is);
        } catch (IOException e) {
            e.printStackTrace();
        }finally{
            if(is!=null){
                try {
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    public static MyPro getInstance(){
        return instanece;
    }

}

像操作oracle一样定义一个DBHelper类,实现对数据操作的封装:
如下:

package com.yc.mongodb;

import java.net.UnknownHostException;

import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.Mongo;
import com.mongodb.MongoException;

public class DBHelper {
    private static Mongo mongo=null;
    private DB db=null;
    private DBCollection collection=null;

    static{
            try {
                mongo=new Mongo(MyPro.getInstance().getProperty("ip"),Integer.parseInt(MyPro.getInstance().getProperty("port")));
            } catch (NumberFormatException e) {
                e.printStackTrace();
            } catch (UnknownHostException e) {
                e.printStackTrace();
            } catch (MongoException e) {
                e.printStackTrace();
            }
            System.out.println(mongo);
    }

    /**
     * 
     * @param dbName
     * @param name
     * @param pwd
     * @return
     */
    public boolean getDB(String dbName,String name,String pwd){
        db=mongo.getDB(dbName);
        if(name!=null&&!"".equals(name)&&pwd!=null&&!"".equals(pwd)){
            if(db.authenticate(name, pwd.toCharArray())){
                return true;
            }else{
                return false;
            }
        }else{
            //查看配置文件中是否给定了用户名和密码
            String uname=MyPro.getInstance().getProperty("uname");
            String pwds=MyPro.getInstance().getProperty("password");
            if(uname!=null&&!"".equals(uname)&&pwds!=null&&!"".equals(pwds)){
                if(db.authenticate(uname, pwds.toCharArray())){
                    return true;
                }else{
                    return false;
                }
            }
        }
        return true;
    }
    /**
     * 关闭连接
     * @param mongo
     */
    public void closeAll(Mongo mongo){
        if(mongo!=null){
            mongo.close();
        }
    }

}
//利用方法重载实现不同情况的传参
/**
     * 获取指定的集合
     * @param collectionName :要链接的集合
     * @param dbName:集合所在的数据库
     * @return
     */
    public DBCollection getDBCollection(String collectionName,String dbName){
        DBCollection dBCollection=null;
        if(getDB(dbName,null, null)){
            db.requestStart();
            if(collectionName==null){//如果为空则从配置文件中查找
                collectionName=MyPro.getInstance().getProperty("collectionName");
            }
            dBCollection=db.getCollection(collectionName);
        }else{
            //抛出异常
            throw new RuntimeException("数据库连接失败");
        }
        return dBCollection;
    }
    /**
     * 
     * @param collectionName
     * @param dbName
     * @param name
     * @param password
     * @return
     */
    public DBCollection getDBCollection(String collectionName,String dbName,String name,String password){
        DBCollection dBCollection=null;
        if(getDB(dbName,name, password)){
            db.requestStart();
            if(collectionName==null){//如果为空则从配置文件中查找
                collectionName=MyPro.getInstance().getProperty("collectionName");
            }
            dBCollection=db.getCollection(collectionName);
        }else{
            //抛出异常
            throw new RuntimeException("数据库连接失败");
        }
        return dBCollection;
    }
    /**
     * 只传递集合名字
     * @param collectionName
     * @return
     */
    public DBCollection getDBCollection(String collectionName){
        DBCollection dBCollection=null;
        String dbName=MyPro.getInstance().getProperty("dbName");
        if(getDB(dbName,null, null)){
            db.requestStart();
            if(collectionName==null){//如果为空则从配置文件中查找
                collectionName=MyPro.getInstance().getProperty("collectionName");
            }
            dBCollection=db.getCollection(collectionName);
        }else{
            //抛出异常
            throw new RuntimeException("数据库连接失败");
        }
        return dBCollection;
    }

版权声明:本文为博主原创文章,未经博主允许不得转载。

Java连接,操作MongoDB

标签:mongodb   java   class   

人气教程排行