2.1 mongodb使用Java进行数据批量插入
java批量插入数据方法
java批量插入数据方法【实用版2篇】目录(篇1)1.Java 批量插入数据的背景和需求2.Java 批量插入数据的方法3.批量插入数据的优点4.批量插入数据的注意事项正文(篇1)【Java 批量插入数据的背景和需求】在 Java 应用程序中,我们常常需要对数据库进行批量数据插入操作。
比如,在一个电商平台中,我们需要将大量商品信息插入到数据库中;在社交网络应用中,用户发表的信息可能需要批量插入到数据库。
在这种情况下,如何提高插入效率,降低系统资源消耗,成为 Java 开发者面临的一个问题。
【Java 批量插入数据的方法】Java 提供了两种主要的批量插入数据的方法:使用`PreparedStatement`和使用`Batch`语句。
1.使用`PreparedStatement``PreparedStatement`是 Java 中预编译 SQL 语句的一种方式,它能够有效地防止 SQL 注入攻击,并且提高 SQL 执行效率。
使用`PreparedStatement`进行批量插入数据的方法是,将所有要插入的数据按照 SQL 语句的格式组织好,然后使用`addBatch()`方法将这些数据添加到批处理中,最后使用`executeBatch()`方法一次性执行批处理中的所有 SQL 语句。
2.使用`Batch`语句`Batch`语句是 JDBC(Java Database Connectivity)中的一种批量处理语句,它能够将多个 SQL 语句组合在一起,一次性发送到数据库进行执行。
使用`Batch`语句进行批量插入数据的方法是,将所有要插入的数据按照 SQL 语句的格式组织好,然后使用`addBatch()`方法将这些数据添加到批处理中,最后使用`executeBatch()`方法一次性执行批处理中的所有 SQL 语句。
【批量插入数据的优点】批量插入数据有以下几个优点:1.提高插入效率:批量插入数据可以减少数据库的交互次数,从而提高插入效率。
mongodb数据库中插入数据
mongodb数据库中插⼊数据⼀:connection 访问集合;在mongodb数据库中,数据是存储在许多数据集合中,可以使⽤数据库对象的collection⽅法访问⼀个集合。
该⽅法使⽤如下:db.collection(collectionName, [options], [callback]);collectionName参数值是⼀个字符串,⽤于指定需要访问的集合名,该参数是必须填写的。
options参数值为⼀个对象,⽤于指定访问该集合时使⽤的选项,使⽤的属性可以百度搜索下,选项⽐较多,⽤到的时候可以查下。
callback参数⽤于指定访问集合操作执⾏结束时的回调函数,该回调函数的指定⽅法如下:function(err, collection) {}在该回调函数中,可以使⽤⼆个参数,第⼀个参数值为访问对象操作失败时抛出的错误对象,第⼆个参数值为⼀个Collection对象,代表被访问的集合,当访问集合失败时,该参数值为null.⼆:Collection对象insert⽅法我们可以使⽤Collection对象的insert⽅法向该集合中插⼊⼀个数据⽂档,在该数据库中每⼀条数据都是⼀个数据⽂档。
该⽅法使⽤如下:collection.insert(docs, [options], [callback]);在insert⽅法中,有3个参数,docs为必选的参数,该参数值为⼀个JSON对象或⼀个由JSON对象构成的数组,⽤于指定需要插⼊的数据⽂档。
options参数为⼀个对象,⽤于指定插⼊数据时使⽤的选项,该属性具体值可以百度下,选项有点多,这⾥不介绍。
callback参数⽤于指定插⼊数据操作执⾏结束时的回调函数,如下:function(err, docs) {};在该回调函数中,可以使⽤两个参数,第⼀个参数为插⼊数据操作失败时抛出的错误对象,第⼆个参数值为⼀个JSON对象或由⼀个JSON 对象构成的数组,代表被插⼊的数据⽂档,当插⼊数据操作失败时,该参数值为null.下⾯是向数据库插⼊users集合,来插⼊⼀个数据⽂档。
java连接mongoDB并进行增删改查操作实例详解
java连接mongoDB并进⾏增删改查操作实例详解本⽂实例讲述了java连接mongoDB并进⾏增删改查操作。
分享给⼤家供⼤家参考,具体如下:1、安装 MongoDB JDBC驱动程序在java中使⽤mongoDB之前,⾸先需要拥有java连接mongoDB的第三⽅驱动包(jar包)1)maven项⽬可通过在pom.xml中添加依赖<dependencies><dependency><groupId>org.mongodb</groupId><artifactId>mongo-java-driver</artifactId><version>3.0.4</version></dependency></dependencies>2)⾮maven项⽬jar包下载地址:2、连接数据库将mongoDB JDBC驱动加⼊到项⽬之后,就可以对mongoDB进⾏操作了。
1)不通过认证连接mongoDB服务//连接到 mongodb 服务MongoClient mongoClient = new MongoClient("localhost", 27017);这⾥的 "localhost" 表⽰连接的服务器地址,27017 为端⼝号。
可以省略端⼝号不写,系统将默认端⼝号为 27017。
如://连接到 mongodb 服务,默认端⼝号为27017MongoClient mongoClient = new MongoClient("localhost");也可以将服务器地址和端⼝号都省略,系统默认服务器地址为 "localhost",端⼝号为 27017。
如://连接到 mongodb 服务,默认连接到localhost服务器,端⼝号为27017MongoClient mongoClient = new MongoClient();2)通过认证连接mongoDB服务List<ServerAddress> adds = new ArrayList<>();//ServerAddress()两个参数分别为服务器地址和端⼝ServerAddress serverAddress = new ServerAddress("localhost", 27017);adds.add(serverAddress);List<MongoCredential> credentials = new ArrayList<>();//MongoCredential.createScramSha1Credential()三个参数分别为⽤户名数据库名称密码MongoCredential mongoCredential = MongoCredential.createScramSha1Credential("username", "databaseName", "password".toCharArray()); credentials.add(mongoCredential);//通过连接认证获取MongoDB连接MongoClient mongoClient = new MongoClient(adds, credentials);ServerAddress()两个参数 "localhost" , 27017 分别为服务器地址和端⼝。
Java操作mongoDB使用文档
Java Driver for MongoDB开发前准备:1.MongoDB连接url(e.g. localhost:27017)2.mongo-java-driver-2.9.3.jar(目前最新版)(用来查看api和帮助文档)一、连接MongoDB// MongoDB连接对象private Mongo mongoDBServer;// 根据host:port获取MongoDB连接对象mongoDBServer = new Mongo( host, port );// 数据库名private String database;// 从连接对象中获得相应数据库对象DB db = mongoDBServer.getDB( database );至此,我们已经打开了一个mongodb的连接,并且已经获得一个名为database的数据库(mongodb中成为collection集合)。
下面对这个集合进行增删改查操作。
进行操作前。
我们需要先使用数据库对象获取表(mongodb中的集合对象)。
// 获得名为person的表(又称集合)DBCollection dbcol = db.getCollection( "person" );二、新增操作(Add)// 新建一个map对象,将需要保存的数据放入map中map.put("key","value");…….// 用map对象创建一个MongoDB自带的DBObject对象用作插入操作参数DBObject param = new BasicDBObject( map );// 调用数据库集合对象的insert方法,传入DBObject对象执行插入操作WriteResult result = dbcol.insert( param );WriteResult对象是操作返回结果,我们可以用如下方法判断操作是否出错if ( result.getError() != null ){System.out.println( result.getError() );}至此新增操作完成。
mongodb插入数据语法
mongodb插入数据语法MongoDB是一种非关系型数据库,它使用类似于JavaScript的语言进行数据操作。
在MongoDB中,插入数据的基本语法如下:1. 插入单个文档```javascriptdb.collectionName.insertOne({key1: value1, key2: value2, ...})```这个命令将一个包含键值对的文档插入到名为“collectionName”的集合中。
如果集合不存在,MongoDB将自动创建它。
2. 插入多个文档```javascriptdb.collectionName.insertMany([{document1}, {document2}, ...])```这个命令将一个包含多个文档的数组插入到集合中。
与`insertOne`不同,`insertMany`可以一次插入多个文档。
3. 插入文档并指定ID如果你想在插入文档时指定一个唯一的ID,可以使用以下语法:```javascriptdb.collectionName.insertOne({_id: ObjectId("600f58955874f70f79b7e55a"), key1: value1, key2: value2, ...})```在这个例子中,`_id`字段被指定为一个ObjectId类型的值,这是MongoDB中唯一标识符的类型。
如果你不指定`_id`字段,MongoDB会自动生成一个。
请注意,以上语法适用于MongoDB 3.x和更高版本。
如果你使用的是早期版本的MongoDB,可能需要使用不同的语法或方法来插入数据。
Java操作MongoDB插入数据进行模糊查询与in查询功能
Java操作MongoDB插⼊数据进⾏模糊查询与in查询功能由于需要⽤MongoDB缓存数据,所以⾃⼰写了⼀套公共的存放和读取⽅法具体如下:存放mongodb:/*** 公共⽅法:设置Object类型缓存* @author shijing* @param param* @param sysGuid*/public void setObjData(Map<String,Object> param, String sysGuid, String enumBpd){DBObject dbObject = new BasicDBObject();dbObject.putAll(param);String collectionName = EnumBpd.getBpdType(enumBpd) + sysGuid;mongoDao.insertToCol(dbObject,collectionName);}/*** 公共⽅法:设置List缓存* @author shijing* @param paramList* @param sysGuid*/public void setListData(List<Map<String,Object>> paramList, String sysGuid, String enumBpd){List<DBObject> list = new ArrayList<>();if(CollectionUtils.isNotNull(paramList)){for (Map<String,Object> param : paramList){DBObject dbObject = new BasicDBObject();dbObject.putAll(param);list.add(dbObject);}}String collectionName = EnumBpd.getBpdType(enumBpd) + sysGuid;mongoDao.insertToCol(list,collectionName);mongoDao⾥⾯的⽅法:public void insertToCol(DBObject document, String collectionName) {dropCol(collectionName);DBCollection dbCollection = mongoTemplate.createCollection(collectionName);dbCollection.insert(document);}public void insertToCol(List<DBObject> documents, String collectionName) {dropCol(collectionName);DBCollection dbCollection = mongoTemplate.createCollection(collectionName);dbCollection.insert(documents);}读取⽅法/*** 通过关键字模糊查询问题和答案库* @param param* @return*/@Overridepublic List<Map<String, Object>> searchQuestionAndAnswerByKeyword(Map<String, Object> param) {List<Map<String,Object>> searchList = new ArrayList<>();Map<String,Object> userInfo = SessionUtils.getUserInfo();String sysGuid = userInfo.get("sys_guid").toString();String collectionName = EnumBpd.getBpdType(EnumBpd.HELP_PAGE_LIST.getType())+sysGuid;//注释⾥⾯这种⽅式虽然能模糊查询,但是容易漏掉数据,切记切记//Pattern pattern = pile("^.*" + param.get("keyword") +".*$", Pattern.CASE_INSENSITIVE);BasicDBObject query= new BasicDBObject();//模糊查询的字段设置query.put("page_html", pile((String) param.get("keyword")));DBCursor dbCursor = mongoDao.findAll(query,collectionName);List<DBObject> list = dbCursor.toArray();for (DBObject dbObject: list){searchList.add(dbObject.toMap());}//模糊查到的数据进⾏组装return getQuestionAndAnswerList(searchList);}/*** 公共⽅法:批量—— in⽅法查询List数据* @author shijing* @param ids id集合* @param paramMap 其他参数* @param columnName in字段列名* @param collectionName 表名* @return*/@Overridepublic List<Map<String, Object>> batchSearchPageListByIds(List<String> ids, Map<String,Object> paramMap, String columnName, String collectionName) {List<Map<String,Object>> searchList = new ArrayList<>();BasicDBObject query= new BasicDBObject();//批量查询,inif (CollectionUtils.isNotEmpty(ids)){BasicDBList values = new BasicDBList();values.addAll(ids);query.put(columnName, new BasicDBObject("$in",values));}//拼接参数if(MapUtils.isNotEmpty(paramMap)){for (String mapKey: paramMap.keySet()){query.put(mapKey, paramMap.get(mapKey));}}DBCursor dbCursor = mongoDao.findAll(query,collectionName);List<DBObject> list = dbCursor.toArray();if (dbCursor!=null && dbCursor.size()>0){for (DBObject dbObject: list){searchList.add(dbObject.toMap());}}return searchList;}/*** 公共⽅法:通过参数获取List数据* @author shijing* @param paramMap 参数* @param collectionName 表名* @return*/@Overridepublic List<Map<String, Object>> getListByParam(Map<String, Object> paramMap,String collectionName){ List<Map<String,Object>> searchList = new ArrayList<>();BasicDBObject query= new BasicDBObject();//拼接参数if(MapUtils.isNotEmpty(paramMap)){for (String mapKey: paramMap.keySet()){query.put(mapKey, paramMap.get(mapKey));}}DBCursor dbCursor = mongoDao.findAll(query,collectionName);List<DBObject> list = dbCursor.toArray();if (dbCursor!=null && dbCursor.size()>0){for (DBObject dbObject: list){searchList.add(dbObject.toMap());}}return searchList;}/*** 公共⽅法:通过参数获取Object数据* @author shijing* @param paramMap* @param collectionName 表名* @return*/@Overridepublic Map<String, Object> getObjectByParam(Map<String, Object> paramMap, String collectionName) { Map<String,Object> webSiteInfo = new HashMap<>();BasicDBObject query= new BasicDBObject();//拼接参数if(MapUtils.isNotEmpty(paramMap)){for (String mapKey: paramMap.keySet()){query.put(mapKey, paramMap.get(mapKey));}}DBObject dbObject = mongoDao.findOne(query,collectionName);if(dbObject!=null){return dbObject.toMap();}return webSiteInfo;}注意事项:mongodb模糊查询时Pattern pattern = pile("^.*" + param.get("keyword") +".*$"这种⽅式存在bug,容易漏掉数据应该使⽤下⾯这种⽅式:query.put("page_html", pile((String) param.get("keyword")));先记录到这吧,有需要在补充,批量in⽅法也在上述代码⾥⾯。
实例讲解Java批量插入、更新数据
实例讲解Java批量插⼊、更新数据Java的批量添加数据,多个字段同时添加多条数据,我不知道你遇到过没有。
今天我们就以⼀个具体的实例来说⼀下Java的批量添加数据,⾯向的是Oracle数据库。
前台页⾯:<span style="font-size:14px;"><body class="main_body" scroll="no"><div class="employee_gun_dong"><form name="webform" method="post"><div class="main_content_bg"><div class="main_content_title"><div id="baseinfo" onclick="activeTabPanel(1)" style="margin-right:2px;" class="tab1">基本信息</div><div id="semsinfo" onclick="activeTabPanel(2)" style="margin-right:2px;" class="tab1" >页签1</div><div id="changeinfo" onclick="activeTabPanel(3)"style="margin-right:2px;" class="tab1" >页签2</div><div id="familyinfo" onclick="activeTabPanel(4)" style="margin-right:2px;" class="tab1" >页签3</div><div id="changeinfo" onclick="activeTabPanel(5)"style="margin-right:2px;" class="tab1" >页签4</div><div id="familyinfo" onclick="activeTabPanel(6)" style="margin-right:2px;" class="tab1" >页签5</div><div id="familyinfo" onclick="activeTabPanel(7)" style="margin-right:2px;" class="tab2" >页签6</div></div></div><div class="main_content_bg" id="bankCardDiv"><div class="main_middle_bg"><div class="main_content_title">信息展⽰<input id="addBank" type="button" value="新增⼀⾏" class="modul_button_operate" onclick="addNewRow();" /></div><div class="main_table_bg"><table id="parttable" width='100%' border='0' cellspacing='1' cellpadding='0' class='content_table_list'><tr><th class='content_table_number'>序号</th><th class='content_table_thnowarp'>属性1</th><th class='content_table_thnowarp'>属性2</th><th class='content_table_thnowarp'>属性3</th><th class='content_table_thnowarp'>属性4</th><th class='content_table_thnowarp'>属性5</th><th class='content_table_thnowarp'>属性6</th><th class='content_table_thnowarp'>属性7</th><th class='content_table_thnowarp'>属性8</th><th class='content_table_thnowarp'>属性9</th><th class='content_table_thnowarp'>操作</th></tr><c:if test="${fn:length(personFamilyInfoList) > 0}"><c:forEach items="${personFamilyInfoList}" var="personFamilyInfoList" varStatus="st"><tr><!-- 序号 --><td class="content_table_number">${st.count}<input type="hidden" name="personFamilyInfoList[${st.count-1}].SGuid" value="${personFamilyInfoList.SGuid}"/><input type="hidden" name="personFamilyInfoList[${st.count-1}].SPersonGuid" value="${personFamilyInfoList.SPersonGuid}"/><input type="hidden" name="personFamilyInfoList[${st.count-1}].SUnitGuid" value="${personFamilyInfoList.SUnitGuid }"><input type="hidden" name="personFamilyInfoList[${st.count-1}].isEnable" value="${personFamilyInfoList.isEnable }"></td><!-- 属性1--><td class="content_table_td_centernowrap"><input id="sFamilyName${st.count-1}" type="text" name="personFamilyInfoList[${st.count-1}].SFamilyName" class="content_content_input" maxlength="20" value="${personFamilyInfoList.SFamilyName}"></td><!-- 属性2--><td class="content_table_td_centernowrap"><input id="sFamilyIdcardNo${st.count-1}" type="text" name="personFamilyInfoList[${st.count-1}].SFamilyIdcardNo" class="content_content_input" maxlength="20" value="${personFamilyInfoList.SFamilyIdcardNo}"></td><!-- 属性3--><td class="content_table_td_centernowrap"><select id="iFamilySex${st.count-1}" name="personFamilyInfoList[${st.count-1}].IFamilySex"><zw:basedictlist itemCode="<%=Constants.I_PERSON_SEX %>" selectValue="${personFamilyInfoList.IFamilySex}"></zw:basedictlist></select><font color="red">*</font></td><!-- 属性4--><td class="content_table_td_centernowrap"><select id="sFamilyRelation${st.count-1}" name="personFamilyInfoList[${st.count-1}].SFamilyRelation"><zw:basedictlist itemCode="<%=Constants.S_FAMILY_RELATION %>" selectValue="${personFamilyInfoList.SFamilyRelation}"></zw:basedictlist></select><font color="red">*</font></td><!-- 属性5--><td class="content_table_td_centernowrap"><input id="sFamilyInsurancePlace${st.count-1}" type="text" name="personFamilyInfoList[${st.count-1}].SFamilyInsurancePlace" class="content_content_input" maxlength="20" value="${personFamilyInfoList.SFamilyInsurancePlace}"></td><!-- 属性6--><td class='content_table_td_centernowrap'><input id="sFamilyResidencePalce${st.count-1}" type="text" name="personFamilyInfoList[${st.count-1}].SFamilyResidencePalce" class="content_content_input" maxlength="20" value="${personFamilyInfoList.SFamilyResidencePalce}"></td><!-- 属性7--><td class="content_table_td_centernowrap"><input id="sFamilyPhone${st.count-1}" type="text" name="personFamilyInfoList[${st.count-1}].SFamilyPhone" class="content_content_input" maxlength="20" value="${personFamilyInfoList.SFamilyPhone}"></td><!-- 属性8--><td class="content_table_td_centernowrap"><input id="dDentifySucessDate${st.count-1}" type="text" name="personFamilyInfoList[${st.count-1}].DDentifySucessDate" value="${personFamilyInfoList.DDentifySucessDate}" onfocus="WdatePicker()" notnull="true" vdisp="⾸次参保时间" class= <font color="red">*</font></td><!-- 属性9--><td class="content_table_td_centernowrap"><input id="dDentifyLostDate${st.count-1}" type="text" name="personFamilyInfoList[${st.count - 1}].DDentifyLostDate" value="${personFamilyInfoList.DDentifyLostDate}" onfocus="WdatePicker()" notnull="true" vdisp="⾸次参保时间" class="conten </td><td class='content_table_td_centernowrap'>取消</td></tr></c:forEach></c:if></table></div></div></div><div class="main_content_bg"><div class="main_content_title"><table style="width:100%"><tr><td width="100%" align="center"><input id="btnNextstep" type="button" value="上⼀步" class="modul_button_operate" onclick="" /><input id="btnAdd" type="button" value="保存" class="modul_button_operate" onclick="saveOrUpdate()" /><input id="" type="button" value="完成" class="modul_button_operate" onclick="" /><input id="btnReturn" type="button" value="返回" class="modul_button_operate" onclick="" /></td></tr></table></div></div></form></div></body></span>javascript函数:<span style="font-family:KaiTi_GB2312;font-size:14px;"><script type="text/javascript">$(function(){loadCheck();});function loadCheck(){var trs = $('#parttable tr').length;if(trs == 1){addNewRow();}}//初始变量var num = 0;//页⾯计数变量var row = 1;//⾏增加计数变量var index = 2;//List列表计数变量function addNewRow(){var trNum = $('#parttable tr').length;if(trNum>1){row = trNum;num = trNum - 1;}var htmlText ='<tr>'+'<td class="content_table_number">'+row+'</td>'+'<td class="content_table_td_centernowrap">'+'<input id="sFamilyName'+num+'" type="text" name="personFamilyInfoList['+num+'].SFamilyName" class="content_content_input" maxlength="20"></td>'+'<td class="content_table_td_centernowrap">'+'<input id="sFamilyIdcardNo'+num+'" type="text" name="personFamilyInfoList['+num+'].SFamilyIdcardNo" class="content_content_input" maxlength="20"></td>'+'<td class="content_table_td_centernowrap">'+'<select id="iFamilySex'+num+'" name="personFamilyInfoList['+num+'].IFamilySex">'+'<zw:basedictlist itemCode="2000" selectValue="personFamilyInfoList['+num+'].IFamilySex"></zw:basedictlist>'+'</select><font color="red">*</font></td>'+'<td class="content_table_td_centernowrap">'+'<select id="sFamilyRelation'+num+'" name="personFamilyInfoList['+num+'].SFamilyRelation">'+'<zw:basedictlist itemCode="135" selectValue="personFamilyInfoList['+num+'].SFamilyRelation"></zw:basedictlist>'+'</select><font color="red">*</font></td>'+'<td class="content_table_td_centernowrap">'+'<input id="sFamilyInsurancePlace'+num+'" type="text" name="personFamilyInfoList['+num+'].SFamilyInsurancePlace" class="content_content_input" maxlength="20"></td>'+'<td class="content_table_td_centernowrap">'+'<input id="sFamilyResidencePalce'+num+'" type="text" name="personFamilyInfoList['+num+'].SFamilyResidencePalce" class="content_content_input" maxlength="20"></td>'+'<td class="content_table_td_centernowrap">'+'<input id="sFamilyPhone'+num+'" type="text" name="personFamilyInfoList['+num+'].SFamilyPhone" class="content_content_input" maxlength="20"></td>'+'<td class="content_table_td_centernowrap">'+'<input id="dDentifySucessDate'+num+'" type="text" name="personFamilyInfoList['+num+'].DDentifySucessDate" onfocus="WdatePicker()" notnull="true" vdisp="⾸次参保时间" class="content_content_input" size="18" maxlength="18" style="width:70px;" +'<td class="content_table_td_centernowrap">'+'<input id="dDentifyLostDate'+num+'" type="text" name="personFamilyInfoList['+num+'].DDentifyLostDate" onfocus="WdatePicker()" notnull="true" vdisp="⾸次参保时间" class="content_content_input" size="18" maxlength="18" style="width:70px;"/></td> +'<td class="content_table_td_centernowrap">'+'<a onclick="delInsuranceInfo(this);">取消</a>'+'</td>'+'</tr>';$("#parttable").append(htmlText);num = num + 1;row += 1;}//删除动态列表function delInsuranceInfo(t){if(row>0){row=row-1} else{return false;}$(t).parent().parent().remove();}//保存或修改function saveOrUpdate(){$.ajax({url: "personFamilyInfo_addOrUpdatePersonFamilyInfo_include_json.action",type: "POST",data: jQuery(document.forms[0]).serializeArray(),success: function(resObj) {//判断返回值if (resObj.trim() == 'true') {Ext.MessageBox.alert("提⽰","保存成功",function(){});}else if(resObj.trim() == 'update'){Ext.MessageBox.alert("提⽰","更新成功",function(){});} else {Ext.MessageBox.alert("提⽰","保存失败");}}});} </span><span style="font-family:KaiTi_GB2312;font-size:14px;"></script></span>后台添加⽅法:<span style="font-family:KaiTi_GB2312;font-size:14px;">/*** <p>Description: 批量添加多条信息</p>* @param personFamilyInfoList 实体列表* @return 布尔值,true为添加成功,否则为添加失败* @throws Exception* @author : gaoying* @update :* @date : 2015-7-20*/public boolean addPersonFamilyInfo(List<PersonFamilyInfo> personFamilyInfoList) throws Exception{boolean bool = false;if(personFamilyInfoList.size()>0 && personFamilyInfoList != null){for(int i=0; i<personFamilyInfoList.size(); i++){String personFamilyID = UUIDHexGenerator.getUUID();String sunitGuid = "11111111";String spersonGuid = "0000000";if(personFamilyInfoList.get(i) != null){personFamilyInfoList.get(i).setSGuid(personFamilyID);personFamilyInfoList.get(i).setSUnitGuid(sunitGuid);personFamilyInfoList.get(i).setSPersonGuid(spersonGuid);personFamilyInfoList.get(i).setIsEnable(0);personFamilyInfoList.get(i).setDOperateDate(new Date());//设置系统的当前时间为⽣效时间,失效时间置为空personFamilyInfoList.get(i).setDDentifySucessDate(new Date());personFamilyInfoList.get(i).setDDentifyLostDate(null);try {String sGuidString = personFamilyInfoService.saveNeedPk(personFamilyInfoList.get(i)).toString();if(!"".equals(sGuidString)&&sGuidString.length()>0){bool = true;}else{System.out.println("供养亲属信息表第"+i+"条信息存储失败!");bool = false;return bool;}} catch (Exception e) {e.printStackTrace();}}}}return bool;}</span>后台更新⽅法:<span style="font-family:KaiTi_GB2312;font-size:14px;">/*** <p>Description: 批量更新信息</p>* @param personFamilyInfolist 实体列表* @param personId ⼈员id* @return 布尔值,true代表更新成功,否则更新失败* @throws Exception* @author : gaoying* @update :* @date : 2015-7-20*/public void updatePersonFamilyInfo(List<PersonFamilyInfo> personFamilyInfolist, String personId) throws Exception{//根据⼈员id查询页⾯有多少条数据List<PersonFamilyInfo> oldPersonFamilyInfolist = personFamilyInfoService.getPersonFamilyInfoByPersonId(personId);int num = oldPersonFamilyInfolist.size();if(personFamilyInfolist != null&&personFamilyInfolist.size() > 0){//检查页⾯的信息是否有修改,然后更新到数据库for(int i = 0; i<num; i++){try{//设置⼀个布尔值,如果变动字段设置为false,如果不变动则设置为trueboolean bool = true;//判断哪些字段更改过if(!oldPersonFamilyInfolist.get(i).getSFamilyName().equals(personFamilyInfolist.get(i).getSFamilyName())){bool = false;}if(!oldPersonFamilyInfolist.get(i).getSFamilyIdcardNo().equals(personFamilyInfolist.get(i).getSFamilyIdcardNo())){bool = false;}if(!oldPersonFamilyInfolist.get(i).getIFamilySex().equals(personFamilyInfolist.get(i).getIFamilySex())){bool = false;}if(!oldPersonFamilyInfolist.get(i).getSFamilyRelation().equals(personFamilyInfolist.get(i).getSFamilyRelation())){bool = false;}if(!oldPersonFamilyInfolist.get(i).getSFamilyInsurancePlace().equals(personFamilyInfolist.get(i).getSFamilyInsurancePlace())){bool = false;}if(!oldPersonFamilyInfolist.get(i).getSFamilyResidencePalce().equals(personFamilyInfolist.get(i).getSFamilyResidencePalce())){bool = false;}if(!oldPersonFamilyInfolist.get(i).getSFamilyPhone().equals(personFamilyInfolist.get(i).getSFamilyPhone())){bool = false;}System.out.println("未更改前时间:"+oldPersonFamilyInfolist.get(i).getDDentifySucessDate().getTime());System.out.println("更改后的时间:"+personFamilyInfolist.get(i).getDDentifySucessDate().getTime());if(oldPersonFamilyInfolist.get(i).getDDentifySucessDate().getTime() != personFamilyInfolist.get(i).getDDentifySucessDate().getTime()){bool = false;}if(bool == false){//证明字段更改过//更新数据前,要把原来没改动的数据复制⼀条,添加进数据库,把系统的当前时间设为该条数据的失效时间PersonFamilyInfo personFamilyInfo = new PersonFamilyInfo();BeanUtils.copyProperties(oldPersonFamilyInfolist.get(i), personFamilyInfo);System.out.println("该条数据主键:" + personFamilyInfo.getSGuid());personFamilyInfo.setSGuid(UUIDHexGenerator.getUUID());System.out.println("设置主键:" + personFamilyInfo.getSGuid());personFamilyInfo.setDOperateDate(new Date());//将当前保存数据库的是否有效置为1:⽆效personFamilyInfo.setIsEnable(1);personFamilyInfo.setDDentifyLostDate(new Date());personFamilyInfoService.save(personFamilyInfo);//更新该条数据,把系统的当前时间设为系统的⽣效时间和操作时间,是否有效设为0:有效,失效时间为空personFamilyInfolist.get(i).setIsEnable(0);personFamilyInfolist.get(i).setDDentifySucessDate(new Date());personFamilyInfolist.get(i).setDOperateDate(new Date());personFamilyInfolist.get(i).setDDentifyLostDate(null);personFamilyInfoService.merge(personFamilyInfolist.get(i));}}catch (Exception e) {e.printStackTrace();}}}</span>这样,java多字段、多条数据批量添加的例⼦就完成了,主要要注意前台页⾯叠加出现多⾏的js函数和后台的添加和更新⽅法,⽤list接收,循环遍历进⾏添加。
MongoDB插入数据的3种方法
MongoDB插⼊数据的3种⽅法下⾯是在inventory集合中插⼊⼀个三个字段的⽂档:复制代码代码如下:db.inventory.insert( { _id: 10, type: "misc", item: "card", qty: 15 } )在实⽰例中,⽂档有⼀个⽤户指定的值为10的_id字段,这个值必须在inventory集合中唯⼀。
调⽤update()⽅法使⽤upsert标志创建⼀个新⽂档当没有匹配查询条件的⽂档时。
下⾯的例⼦当inventory集合中没有包含{type:"books",item:"journal"}的⽂档时创建⼀个新⽂档:复制代码代码如下:db.inventory.update({ type: "book", item : "journal" },{ $set : { qty: 10 } },{ upsert :true })MongoDB添加_id字段和分配⼀个唯⼀的ObjectId作为它的值。
新⽂档包含来⾃查询<query>条件的item和type字段,和来⾃更新<update>参数的qty字段:复制代码代码如下:{ "_id" : ObjectId("51e8636953dbe31d5f34a38a"), "item" : "journal", "qty" : 10, "type" : "book" }使⽤save()⽅法插⼊⼀个⽂档,通过该⽅法保存⼀个不包含_id字段的⽂档或者包含_id字段但该字段值不存在集合中的⽂档。
下⾯的⽰例创建⼀个新的⽂档在inventory集合:复制代码代码如下:db.inventory.save( { type: "book", item: "notebook", qty: 40 } )MongoDB添加_id字段和分配⼀个唯⼀的ObjectId作为它的值。
java实现mongoDB增加,删除,修改,查看,多条件查询,聚合查询,分组查询,多表关联。。。
java实现mongoDB增加,删除,修改,查看,多条件查询,聚合查询,分组查询,多表关联。
⾸先idea创建⼀⼿springboot项⽬引⼊如下依赖<dependency><groupId>org.mongodb</groupId><artifactId>mongo-java-driver</artifactId><version>3.8.0</version></dependency>下⾯是具体的java对mongod的操作。
需要将data = mongod.getDatabase("runoob");获取的数据库换成⾃⼰的数据库,端⼝为默认端⼝这⾥我写了⼀个@BeforeEach@AfterEach两个注解:分别是在执⾏测试类之前执⾏和在测试类执⾏之后执⾏。
我使⽤的是springboot2,如果是springboot1需要将这两个注解修改为@Before@Afterimport com.mongodb.BasicDBObject;import com.mongodb.MongoClient;import com.mongodb.client.*;import com.mongodb.client.model.Aggregates;import com.mongodb.client.model.Filters;import com.mongodb.client.model.InsertOneModel;import com.mongodb.client.model.UpdateOneModel;import org.bson.Document;import org.bson.conversions.Bson;import org.junit.jupiter.api.AfterEach;import org.junit.jupiter.api.BeforeEach;import org.junit.jupiter.api.Test;import org.springframework.boot.test.context.SpringBootTest;import javax.print.Doc;import java.util.ArrayList;import java.util.Arrays;import java.util.List;import java.util.regex.Pattern;@SpringBootTestpublic class MongodJointTest {private MongoClient mongod;private MongoDatabase data;@BeforeEachpublic void mongoJoint() {mongod = new MongoClient("localhost", 27017);data = mongod.getDatabase("runoob");}@AfterEachpublic void closeMongo() {mongod.close();}//单条插⼊@Testpublic void insertMongo() {MongoCollection<Document> ab1 = data.getCollection("ab1");Document c = new Document();c.append("title", "s标题qq");c.append("encode", 22.0);ab1.insertOne(c);System.out.println("数据插⼊成功");}//多条插⼊@Testpublic void insertManyMongo() {MongoCollection<Document> ab1 = data.getCollection("ab1");Document c0 = new Document();c0.append("title", "标题0");c0.append("encode", 21.0);Document c1 = new Document();c1.append("title", "标题1");c1.append("encode", 22.0);Document c2 = new Document();c2.append("title", "标题2");c2.append("encode", 23.0);List<Document> c = Arrays.asList(c0, c1, c2);ab1.insertMany(c);System.out.println("数据插⼊成功");}//删除@Testpublic void delMongod() {MongoCollection<Document> ab1 = data.getCollection("ab1");Document c = new Document();c.append("title", "a");ab1.deleteOne(c);//两种写法//ab1.deleteOne(Filters.eq("title","b"));}//修改信息@Testpublic void upMongod() {MongoCollection<Document> ab1 = data.getCollection("ab1");ab1.updateOne(Filters.eq("title", "标题"), new Document("$set", new Document("encode", 21.0)));}//批量插⼊,修改,(也可删除)@Testpublic void sumMongod() {MongoCollection<Document> ab1 = data.getCollection("ab1");ab1.bulkWrite(Arrays.asList(new InsertOneModel<>(new Document("title", "p标题1")),new InsertOneModel<>(new Document("title", "p标题2")),new InsertOneModel<>(new Document("title", "p标题3")),new UpdateOneModel<>(new Document("title", "p标题1"), new Document("$set", new Document("title", "p批量修改标题"))) ));}//查询@Testpublic void sendMongod() {MongoCollection<Document> ab1 = data.getCollection("ab1");FindIterable<Document> documents = ab1.find().limit(3).skip(2);for (Document doc : documents) {System.out.println(doc.get("_id") + " " + doc.get("title") + " " + doc.get("encode"));}}//排序@Testpublic void sendSortMongod() {MongoCollection<Document> ab1 = data.getCollection("ab1");Document c = new Document();//c.append("encode",1);c.append("encode", -1);FindIterable<Document> documents = ab1.find().sort(c);for (Document doc : documents) {System.out.println(doc.get("_id") + " " + doc.get("title") + " " + doc.get("encode"));}}//条件查询@Testpublic void conditionMongod() {MongoCollection<Document> ab1 = data.getCollection("ab1");FindIterable<Document> d = ab1.find(Filters.lt("encode", 20));// FindIterable<Document> d = ab1.find(Filters.lte("encode",20));// FindIterable<Document> d = ab1.find(Filters.gt("encode",20));// FindIterable<Document> d = ab1.find(Filters.gte("encode",20));// FindIterable<Document> d = ab1.find(Filters.ne("encode",20));for (Document doc : d) {System.out.println(doc.get("_id") + " " + doc.get("title") + " " + doc.get("encode"));}}//条件查询@Testpublic void conditionMongod1() {MongoCollection<Document> ab1 = data.getCollection("ab1");Bson where = Filters.and(Filters.gt("encode", 20), Filters.eq("title", "标题"));FindIterable<Document> d = ab1.find(where);for (Document doc : d) {System.out.println(doc.get("_id") + " " + doc.get("title") + " " + doc.get("encode"));}}//查询⼀张表中的数据条数@Testpublic void countMongod() {MongoCollection<Document> collection = data.getCollection("ab1");FindIterable<Document> ab1 = collection.find();int i = 0;for (Document doc : ab1) {i++;}System.out.println(i);}//从第⼀条数据开是查询出前五条数据@Testpublic void first5MongodToTitle() {MongoCollection<Document> ab1 = data.getCollection("ab1");FindIterable<Document> skip = ab1.find().limit(5).skip(0);for (Document doc : skip) {System.out.println(doc.get("title"));}}//查询等于18的数据@Testpublic void encodeEq18Mongod() {MongoCollection<Document> ab1 = data.getCollection("ab1");FindIterable<Document> encode = ab1.find(Filters.eq("encode", 18));for (Document doc : encode) {System.out.println(doc.get("title"));}}//查询⼤于等于18的数据@Testpublic void encodeGte18Mongod() {MongoCollection<Document> ab1 = data.getCollection("ab1");FindIterable<Document> encode = ab1.find(Filters.gte("encode", 18));for (Document doc : encode) {System.out.println(doc.get("title"));}}//查询18到22之间的数据@Testpublic void encodeGte18Between22Mongod() {MongoCollection<Document> ab1 = data.getCollection("ab1");FindIterable<Document> encode = ab1.find(Filters.and(Filters.gt("encode", 18), Filters.lt("encode", 22)));for (Document doc : encode) {System.out.println(doc.get("title"));}}//根据标题查询价格@Testpublic void getencodeTotitleMongod() {MongoCollection<Document> ab1 = data.getCollection("ab1");FindIterable<Document> documents = ab1.find(Filters.eq("title", "标题1"));for (Document document : documents) {System.out.println(document.get("encode"));}}//模糊查询@Testpublic void LikeMongod() {MongoCollection<Document> ab1 = data.getCollection("ab1");//固定查询// Pattern pattern = pile("^标题0$", Pattern.CASE_INSENSITIVE);//包含查询// Pattern pattern = pile("^.*标.*$", Pattern.CASE_INSENSITIVE);//左固定// Pattern pattern = pile("^标题.*$", Pattern.CASE_INSENSITIVE);//右固定Pattern pattern = pile("^.*标题$", Pattern.CASE_INSENSITIVE);BasicDBObject obj = new BasicDBObject();obj.put("title", pattern);FindIterable<Document> documents = ab1.find(obj);for (Document document : documents) {System.out.println(document.get("encode"));}}//聚合查询@Testpublic void groupMongod() {MongoCollection<Document> collection = data.getCollection("ab1");//对encode的数量进⾏分组,并且统计出个数Document doc = new Document();doc.append("_id", "$encode");doc.append("count", new Document("$sum", 1));//查找encode字段中数量⼤于18的Document matchDoc = new Document();matchDoc.put("_id", new Document("$gt", 18.0));Document group = new Document("$group", doc);Document match = new Document("$match", matchDoc);//根据encode字段进⾏降序排序Document sort = new Document("$sort", new Document("_id", 1));//将筛选条件添加到⽂本集合中List<Document> doclist = new ArrayList<Document>();doclist.add(group);doclist.add(match);doclist.add(sort);//聚合查询并输出AggregateIterable<Document> aggregate = collection.aggregate(doclist);MongoCursor<Document> iterator = aggregate.iterator();while (iterator.hasNext()) {Document next = iterator.next();double encode = next.getDouble("_id");int count = next.getInteger("count", 0);System.out.println(encode + " " + count);}}//在mongod控制台下执⾏下⾯三句命令/*db.test1.insert([{"title":"java开发⼿册","author":"孤尽","jobnum":"001"},{"title":"mongod由浅⼊深","author":"凉风","jobnum":"002"}]) db.test2.insert([{"jobtitle":"java⼯程师","jobnum":"001"},{"jobtitle":"数据库⼯程师","jobnum":"002"}])db.test3.insert([{"depart":"开发1部","jobnum":"001"},{"depart":"开发2部","jobnum":"002"}])*///三表带筛选条件关联查询关键字:lookup@Testpublic void lookupMongod() {MongoCollection<Document> test1 = data.getCollection("test1");List<Bson> aggregateList = new ArrayList<>(1);aggregateList.add(Aggregates.lookup("test2", "jobnum", "jobnum", "result"));aggregateList.add(Aggregates.match(Filters.ne("result", new ArrayList<String>(0))));aggregateList.add(Aggregates.lookup("test3", "jobnum", "jobnum", "results"));aggregateList.add(Aggregates.match(Filters.ne("results", new ArrayList<String>(0))));aggregateList.add(Aggregates.match(Filters.eq("jobnum", "002")));AggregateIterable<Document> aggregateIterable = test1.aggregate(aggregateList);//对应得到的json结果参考下⽅for (Document document : aggregateIterable) {Object result = document.get("result");String[] split = result.toString().split(",");System.out.println(split[1].substring(split[1].indexOf("=") + 1));Object results = document.get("results");String[] splits = results.toString().split(",");System.out.println(splits[1].substring(splits[1].indexOf("=") + 1));}}// { "_id" : { "$oid" : "5eba18b5108d9caa7dba842a" },// "title" : "java开发⼿册",// "author" : "孤尽",// "jobnum" : "001",// "result" : [{// "_id" : { "$oid" : "5eba1aa2108d9caa7dba8430" },// "jobtitle" : "java⼯程师",// "jobnum" : "001"// }],// "results" : [{// "_id" : { "$oid" : "5eba3333108d9caa7dba8432" }, // "depart" : "开发1部",// "jobnum" : "001"// }]// }}。
java 常用的连接mongodb的方法
java 常用的连接mongodb的方法连接MongoDB是Java开发中常见的操作,本文将介绍一些常用的连接MongoDB的方法。
1. 使用MongoDB官方提供的Java驱动连接MongoDB MongoDB官方提供了一个Java驱动程序,可以直接使用它来连接MongoDB数据库。
首先需要在项目中引入相关的依赖,然后使用以下代码来连接MongoDB数据库:```javaimport com.mongodb.MongoClient;import com.mongodb.client.MongoDatabase;public class MongoDBConnection {public static void main(String[] args) {// 连接到MongoDB数据库MongoClient mongoClient = new MongoClient("localhost", 27017);// 选择数据库MongoDatabase database = mongoClient.getDatabase("mydb");System.out.println("成功连接到数据库");}}```上述代码中,通过MongoClient类来连接MongoDB数据库。
其中,`localhost`表示MongoDB数据库所在的主机地址,`27017`是MongoDB默认的端口号。
然后,使用getDatabase方法选择要连接的数据库,这里选择了名为`mydb`的数据库。
最后,通过打印信息验证是否成功连接到数据库。
2. 使用连接字符串连接MongoDB除了使用主机地址和端口号来连接MongoDB,还可以使用连接字符串来连接数据库。
连接字符串是一个包含了连接MongoDB所需信息的字符串,可以更加灵活地配置连接参数。
以下是使用连接字符串连接MongoDB的示例代码:```javaimport com.mongodb.MongoClient;import com.mongodb.MongoClientURI;import com.mongodb.client.MongoDatabase;public class MongoDBConnection {public static void main(String[] args) {// 连接字符串String connectionString = "mongodb://localhost:27017/mydb";// 解析连接字符串MongoClientURI uri = new MongoClientURI(connectionString);// 连接到MongoDB数据库MongoClient mongoClient = new MongoClient(uri);// 选择数据库MongoDatabase database = mongoClient.getDatabase("mydb");System.out.println("成功连接到数据库");}}```上述代码中,通过MongoClientURI类解析连接字符串,然后使用MongoClient类连接MongoDB数据库。
MongoDB数据库插入、更新和删除操作详解
MongoDB数据库插⼊、更新和删除操作详解Insert操作是MongoDB插⼊数据的基本⽅法,对⽬标集合使⽤Insert操作,会将该⽂档添加到MongoDB并⾃动⽣成相应的ID 键。
⽂档结构采⽤类似JSON的BSON格式。
常见的插⼊操作主要有单条插⼊和批量插⼊两种形式。
插⼊时只是简单地将⽂档存⼊数据库中,不进⾏额外的验证,也不会执⾏代码,所以不存在注⼊式攻击的可能。
1、单条插⼊2、批量插⼊MongoDB对批量插⼊的⽀持是通过传递多个⽂档组成的数组到数据库来实现的。
由于它插⼊数据是通过发送TCP请求的,这样只需发送单个TCP请求,且数据库⽆需处理⼤量的消息头,减少插⼊时间。
这种⽅式的批量插⼊⼀次只能将多个⽂档插⼊到⼀个集合中,对于插⼊到多个集合可以循环调⽤Insert操作。
remove函数可以⽤来删除数据,它能接受⼀个⽂档作为可选参数,只有符合条件的⽂档才会被删除。
删除数据是永久性的,不能撤销,也不能恢复,需要谨慎。
删除⽂档需要清空整个集合,不如直接删除集合快。
update函数⽤于修改数据库中的数据,它接收两个参数,⼀个是查询⽂档,⽤来查找要更新的⽂档,另⼀个是修改器⽂档,⽤来描述对找到的⽂档做哪些修改。
更新操作是原⼦性的,如果多个更新同时发⽣,则所有的更新都会执⾏,但最后的更新是最终赢家。
1、整体更新(⽂档替换)2、局部更新(修改器)部分更新是通过原⼦的更新修改器实现的,使⽤修改器时除了”_id“的值不能改变,其他任何值都能改变。
⽂档替换是可以改变所有值的。
$inc修改器:将指定属性的值增加特定的步长,如果键不存在则创建它。
$set修改器:⽤来指定⼀个键的值,如果不存在则创建它。
$push:数组修改器,如果指定的键存在,则向已有的数组末尾加⼊⼀个元素,键不存在则会创建⼀个新的数组。
3、upsert操作upsert操作具有saveOrUpdate的功能,如果没有⽂档符合更新条件,则以更新条件和更新⽂档为基础创建⼀个新的⽂档。
java代码多线程批量插入数据
java代码多线程批量插⼊数据package root.report.control.dict;import org.apache.ibatis.session.SqlSession;import root.report.db.DbFactory;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.SQLException;import java.util.Date;import java.util.concurrent.CountDownLatch;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;/*** @Auther: pccw* @Date: 2018/10/29 17:45* @Description:*//*往⾃⼰本地mysql 当中插⼊10W条记录*/public class TestTwo {public static void main(String args[]) throws SQLException {SqlSession sqlSession = DbFactory.Open(DbFactory.FORM);// insert(sqlSession);insertTwo(sqlSession);}// 多线程案例使⽤fix线程规定为5个public static void insertTwo(SqlSession sqlSession) throws SQLException {Connection conn = sqlSession.getConnection();// 开始时间Long begin = new Date().getTime();final StringBuffer suffix = new StringBuffer();// sql前缀String prefix = "INSERT INTO test_dict (code,name) VALUES ";// 设置事务为⾮⾃动提交conn.setAutoCommit(false);// ⽐起st,pst会更好些PreparedStatement pst = (PreparedStatement) conn.prepareStatement("");//准备执⾏语句final CountDownLatch count = new CountDownLatch(5); //相当线程执⾏计时器,await()让线程等待,⽤countDown()消初始化数量。
c#MongoDB插入和批量插入,插入原理
c#MongoDB插⼊和批量插⼊,插⼊原理在开发之前,选择MongoDb驱动是件很重要的事情。
如果选择不好,在后期的开发的是件很费⼒的事情,因为我就遇到这样的问题。
MongoDb驱动有⼏种⽐较流⾏驱动,官⽅驱动和samus是两种使⽤⽐较多的。
插⼊的Shell操作有Insert和Save两种语法,先看下⾯的Shell> var time = new Date("2011/8/28 21:50:00") //定义⼀个时间对象> var i = {"time":time,"userid":10001,"sessionid":"20110829215100","ip":"192.168.0.1","title":"Login","url":"Login.aspx"} //定义⼀个⽂档对象> i //查看 i ⽂档{"time" : ISODate("2011-08-28T13:50:00Z"),"userid" : 10001,"sessionid" : "20110829215100","ip" : "192.168.0.1","title" : "Login","url" : "Login.aspx"}> use testDb> show collections //查看当前集合,把i⽂档插⼊到login集合中mycmyc1myc2system.indexes> db.login.insert(i)> db.login.findOne(){"_id" : ObjectId("4e5b99e62690d28cadd0f58d"), //MongoDb会为每个插⼊的对象⾃动⽣成⼀个"_id"的值,你可以在插⼊的时候⾃⼰指定这个值,如下⾯"time" : ISODate("2011-08-28T13:50:00Z"),"userid" : 10001,"sessionid" : "20110829215100","ip" : "192.168.0.1","title" : "Login","url" : "Login.aspx"}> i = {"_id":"newid_100001","time":time,"userid":10001,"sessionid":"20110829215100","ip":"192.168.0.1","title":"Login","url":"Login.aspx"}{"_id" : "newid_100001","time" : ISODate("2011-08-28T13:50:00Z"),"userid" : 10001,"sessionid" : "20110829215100","ip" : "192.168.0.1","title" : "Login","url" : "Login.aspx"}> db.login.save(i) //这⾥⽤save插⼊⽂档到数据库> db.login.find() //查询结果两条⽂档,第⼆条⽂档"_id"是⾃定义的值{ "_id" : ObjectId("4e5b99e62690d28cadd0f58d"), "time" : ISODate("2011-08-28T13:50:00Z"), "userid" : 10001, "sessionid" : "20110829215100","ip" : "192.168.0.1", "title" : "Login", "url" : "Login.aspx" }{ "_id" : "newid_100001", "time" : ISODate("2011-08-28T13:50:00Z"), "userid" : 10001, "sessionid" : "20110829215100", "ip" : "192.168.0.1","title" : "Login", "url" : "Login.aspx" }注意:1:Insert和Save的区别是:如果插⼊的集合的“_id”值,在集合中已经存在,⽤Insert执⾏插⼊操作回报异常,已经存在"_id"的键。
java mongodb bulkwrite用法
java mongodb bulkwrite用法MongoDB的Java驱动程序提供了`BulkWrite`类,用于执行批量写入操作。
下面是一个简单的示例,演示如何使用`BulkWrite`类来批量插入文档:```javaimport ;import ;import ;import ;import ;public class BulkWriteExample {public static void main(String[] args) {//连接到MongoDB服务器MongoClient mongoClient = new MongoClient("localhost", 27017);//连接到数据库MongoDatabase database = ("test");//获取集合MongoCollection<Document> collection = ("myCollection");//创建要插入的文档列表List<Document> documents = new ArrayList<>();(new Document("name", "John Doe"));(new Document("age", 30));(new Document("email", ""));//执行批量写入操作(documents);//关闭连接();}}```在上面的示例中,我们首先创建了一个`MongoClient`对象,用于连接到MongoDB服务器。
然后,我们使用`getDatabase()`方法获取要使用的数据库,并使用`getCollection()`方法获取要使用的集合。
接下来,我们创建了一个包含要插入的文档的列表,并使用`bulkWrite()`方法执行批量写入操作。
MongoDBJava驱动程序v4.3执行批量操作
MongoDBJava驱动程序v4.3执⾏批量操作执⾏批量操作该bulkWrite()⽅法对单个集合执⾏批量写⼊操作。
此⽅法减少了从应⽤程序到 MongoDB 实例的⽹络往返次数,从⽽提⾼了应⽤程序的性能。
由于您只有在所有操作返回后才会收到成功状态,因此我们建议您在满⾜⽤例要求的情况下使⽤它。
您可以在中指定以下⼀项或多项写⼊操作bulkWrite():insertOneupdateOneupdateManydeleteOnedeleteManyreplaceOne该bulkWrite()⽅法接受以下参数:List实现对象的A WriteModel:实现WriteModel对应于上述写⼊操作的类。
例如,InsertOneModel该类包装了insertOne写操作。
有关每个类的更多信息,请参阅本页底部的 API ⽂档链接。
BulkWriteOptions:指定设置的可选对象,例如是否确保您的 MongoDB 实例对您的写⼊操作进⾏排序。
笔记重试写⼊有关MongoDB服务器版本3.6中批量写⼊操作,除⾮它们包括⼀个或多个实例运⾏或更⾼版本UpdateManyModel或DeleteManyModel。
提⽰默认情况下,MongoDB 按照指定的顺序(即串⾏)⼀个⼀个地执⾏批量写⼊操作。
在有序批量写⼊期间,如果在处理操作过程中发⽣错误,MongoDB 将返回⽽不处理列表中的剩余操作。
相反,当您设置ordered为时false,MongoDB 会在发⽣错误时继续处理列表中剩余的写⼊操作。
⽆序操作理论上更快,因为 MongoDB 可以并⾏执⾏它们,但只有在写⼊不依赖于顺序时才应该使⽤它们。
该bulkWrite()⽅法返回⼀个BulkWriteResult对象,该对象包含有关写⼊操作结果的信息,包括插⼊、修改和删除的⽂档数。
如果您的⼀个或多个操作尝试设置违反集合上唯⼀索引的值,则会引发异常,该异常应如下所⽰:The bulk write operation failed due to an error: Bulk write operation error on server <hostname>. Write errors: [BulkWriteError{index=0, code=11000, message='E11000 duplicate key error collection: ... }].同样,如果您尝试对使⽤架构验证的集合执⾏批量写⼊,并且您的⼀个或多个写⼊操作提供了意外的格式,您可能会遇到异常。
用Java向数据库中插入大量数据时的优化
⽤Java向数据库中插⼊⼤量数据时的优化转载⾃:使⽤jdbc向数据库插⼊100000条记录,分别使⽤statement,PreparedStatement,及PreparedStatement+批处理3种⽅式进⾏测试:[java]1. public void exec(Connection conn){2. try {3. //开始时间4. Long beginTime = System.currentTimeMillis();5. //设置⼿动提交6. conn.setAutoCommit(false);7.8. Statement st = conn.createStatement();9.10. for(int i=0;i<100000;i++){11. String sql="insert into t1(id) values ("+i+")";12. st.executeUpdate(sql);13. }14.15. //结束时间16. Long endTime = System.currentTimeMillis();17.18. System.out.println("st:"+(endTime-beginTime)/1000+"秒");//计算时间19.20. st.close();21. conn.close();22. } catch (SQLException e) {23. e.printStackTrace();24. }25. }//2.使⽤PreparedStatement对象[java]1. public void exec2(Connection conn){2. try {3. Long beginTime = System.currentTimeMillis();4. conn.setAutoCommit(false);//⼿动提交5. PreparedStatement pst = conn.prepareStatement("insert into t1(id) values (?)");6. for(int i=0;i<100000;i++){7. pst.setInt(1, i);8. pst.execute();9. }10. mit();11. Long endTime = System.currentTimeMillis();12. System.out.println("pst:"+(endTime-beginTime)/1000+"秒");//计算时间13. pst.close();14. conn.close();15. } catch (SQLException e) {16. e.printStackTrace();17. }18.19. }//3.使⽤PreparedStatement + 批处理[java]1. public void exec3(Connection conn){2. try {3. conn.setAutoCommit(false);4. Long beginTime = System.currentTimeMillis();5. //构造预处理statement6. PreparedStatement pst = conn.prepareStatement("insert into t1(id) values (?)");7. //1万次循环8. for(int i=1;i<=100000;i++){9. pst.setInt(1, i);10. pst.addBatch();11. //每1000次提交⼀次12. if(i%1000==0){//可以设置不同的⼤⼩;如50,100,500,1000等等13. pst.executeBatch();14. mit();15. pst.clearBatch();16. }17. }18. Long endTime = System.currentTimeMillis();19. System.out.println("pst+batch:"+(endTime-beginTime)/1000+"秒");20. pst.close();21. conn.close();22. } catch (SQLException e) {23. e.printStackTrace();24. }25. }在Oracle 10g中测试,结果:1.使⽤statement 耗时142秒;2.使⽤PreparedStatement 耗时56秒;3.使⽤PreparedStatement + 批处理耗时:a.50条插⼊⼀次,耗时5秒;b.100条插⼊⼀次,耗时2秒;c.1000条以上插⼊⼀次,耗时1秒;通过以上可以得出结论,在使⽤jdbc⼤批量插⼊数据时,明显使⽤第三种⽅式(PreparedStatement + 批处理)性能更优。
mongodb insertmany用法
`insertMany` 是 MongoDB 的一个方法,用于一次插入多个文档。
这个方法在 MongoDB 3.2 版本引入,是一个非常方便的功能。
以下是 `insertMany` 方法的基本用法:```javascriptdb.collection.insertMany([{ field: 'example' },{ field: 'example2' }],{ordered: <boolean>,writeConcern: <document>,bypassDocumentValidation: <boolean>})```这个函数接收两个参数:1. 要插入的文档组成的数组。
2. 可选的选项对象,可以包含以下选项:* `ordered`(布尔值,默认为 `true`):如果设置为 `true`,则必须按顺序插入所有文档。
如果任何插入失败,将返回一个包含错误信息的数组。
如果设置为 `false`,则不保证插入文档的顺序。
默认情况下,`ordered` 设置为 `true`。
* `writeConcern`(文档):指定写入关注(write concern)。
默认情况下,`writeConcern` 设置为 `{ w: 1 }`。
* `bypassDocumentValidation`(布尔值,仅适用于 MongoDB 3.2 及更高版本):如果设置为 `true`,则可以绕过文档验证。
默认情况下,`bypassDocumentValidation` 设置为 `false`。
这个方法返回一个包含插入操作的 `InsertManyResult` 对象。
插入的文档数量可以通过 `InsertManyResult.insertedIds.length` 获取。
插入的文档 ID 可以通过 `InsertManyResult.insertedIds` 获取。
java插入多条数据技巧是什么
$transaction->;rollback(); // 如果操作失败, 数据回滚 return false; } 每次循环要用 reset() 重置 command 之后 insert 不要掉 excetue()执行, 因 为在 commit 时会自动执行,这样就能一次插入多条数据而不用自己拼 sql 了 但是这个是有缺点的若一次执行很多条的话效率会变慢毕竟这个相当于执 行多条这样的 sql:insert into table values(‘a’, ‘b’); 而我们手动拼的 sql 是这样的: insert into table values(‘a’,’b’),(‘c’,’d’);这 样相对效率比较高 所以要是写入的数据少的话可以使用以上方法 java 插入多条数据技巧的精彩内容就先到这里。更多精彩内容,还请大家 持续关注。
java 插入多条数据技a 插入多条数据技巧吧!希望大家学业有成, 工作顺利 废话少说看代码: $db = Yii::app()->;db; $transaction = $db->;beginTransaction(); $command = $db->;createCommand(); try { $_files = array( array(‘name’=>;’abc’, ‘size’=>;’12000’), array(‘name’=>;’abc2’, ‘size’=>;’12000’), array(‘name’=>;’abc3’, ‘size’=>;’12000’) );
if ($_files) { foreach($_files as $files) { $command->;reset(); foreach($files as $k=>;$v) { $columArray[$k] =$v; } $command->;insert(FileConvert::model()->;tableName(),$columArray); } } $transaction->;commit(); return true; } catch (Exception $e) {