如何用javadbf 中文乱码操作.dbf数据库

java解析dbf之通过javadbf包生成和读取dbf文件
转载 &发布时间:日 12:05:17 & 作者:
这篇文章主要介绍了java通过javadbf读取和生成DBF文件的方法,大家参考使用吧
以下是简单示例
代码如下:package com.
import java.io.FileInputSimport java.io.FileNotFoundEimport java.io.FileOutputSimport java.io.InputSimport java.io.OutputS
import com.linuxense.javadbf.DBFEimport com.linuxense.javadbf.DBFFimport com.linuxense.javadbf.DBFRimport com.linuxense.javadbf.DBFW
public class Rwdbf {&public static void readDBF(String path)&& &&& {&& &&&&&& InputStream fis =&&&&&&& try &&&&&&& {& &&&&&&&&&&& //读取文件的输入流 &&&&&&&&&&& fis& = new FileInputStream(path);&&&&&&&&&&& //根据输入流初始化一个DBFReader实例,用来读取DBF文件信息&&&&&&&&&&& DBFReader reader = new DBFReader(fis);& &&&&&&&&&&& //调用DBFReader对实例方法得到path文件中字段的个数 &&&&&&&&&&& int fieldsCount = reader.getFieldCount();&&&&&&&&&&& System.out.println("字段数:"+fieldsCount);&&&&&&&&&&& //取出字段信息&& &&&&&&&&&&& for( int i=0; i&fieldsC i++)&&& &&&&&&&&&&& {&& &&&&&&&&&&&&& DBFField field = reader.getField(i);&&&&&&&&&&&&& System.out.println(field.getName());&&&&&&&&&&& }&& &&&&&&&&&&& Object[] rowV&& &&&&&&&&&&& //一条条取出path文件中记录&& &&&&&&&&&&& while((rowValues = reader.nextRecord()) != null) &&&&&&&&&&& {&& &&&&&&&&&&&&& for( int i=0; i&rowValues. i++) &&&&&&&&&&&&& {&& &&&&&&&&&&&&&&& System.out.println(rowValues[i]); &&&&&&&&&&&&& }&& &&&&&&&&&&& }&& &&&&&&&&& }&& &&&&&&&&& catch(Exception e)&&& &&&&&&&&& {&& &&&&&&&&& e.printStackTrace();& &&&&&&&&& }& &&&&&&&&& finally& &&&&&&&&& {&& &&&&&&&&& try{&& &&&&&&&&&&&&&& fis.close(); &&&&&&&&& }catch(Exception e){}& &&&&&&&&& } &&& }&& &&public static void writeDBF(String path)&{& OutputStream fos =& try& & {&& &&&&& //定义DBF文件字段&& &&&&& DBFField[] fields = new DBFField[3]; &&&&& //分别定义各个字段信息,setFieldName和setName作用相同, &&&&& //只是setFieldName已经不建议使用&& &&&&& fields[0] = new DBFField();&& &&&&& //fields[0].setFieldName("emp_code"); &&&&& fields[0].setName("semp_code");&& &&&&& fields[0].setDataType(DBFField.FIELD_TYPE_C);&& &&&&& fields[0].setFieldLength(10);&& &&&&& fields[1] = new DBFField();&& &&&&& //fields[1].setFieldName("emp_name"); &&&&& fields[1].setName("emp_name");&& &&&&& fields[1].setDataType(DBFField.FIELD_TYPE_C);&& &&&&& fields[1].setFieldLength(20);&& &&&&& fields[2] = new DBFField();&& &&&&& //fields[2].setFieldName("salary"); &&&&& fields[2].setName("salary");& &&&&& fields[2].setDataType(DBFField.FIELD_TYPE_N);&& &&&&& fields[2].setFieldLength(12);&& &&&&& fields[2].setDecimalCount(2);&& &&&&& //DBFWriter writer = new DBFWriter(new File(path));&& &&&&& //定义DBFWriter实例用来写DBF文件&& &&&&& DBFWriter writer = new DBFWriter(); &&&&& //把字段信息写入DBFWriter实例,即定义表结构& &&&&& writer.setFields(fields);&& &&&&& //一条条的写入记录&& &&&&& Object[] rowData = new Object[3]; &&&&& rowData[0] = "1000";&& &&&&& rowData[1] = "John";&& &&&&& rowData[2] = new Double(5000.00);&&&&& writer.addRecord(rowData);&& &&&&& rowData = new Object[3];& &&&&& rowData[0] = "1001";& &&&&& rowData[1] = "Lalit"; &&&&& rowData[2] = new Double(3400.00);&& &&&&& writer.addRecord(rowData);&& &&&&& rowData = new Object[3];&&&&& rowData[0] = "1002";&& &&&&& rowData[1] = "Rohit";& &&&&& rowData[2] = new Double(7350.00);& &&&&& writer.addRecord(rowData);&& &&&&& //定义输出流,并关联的一个文件&& &&&&& fos = new FileOutputStream(path);&&&&& //写入数据&& &&&&& writer.write(fos);&& &&&&& //writer.write();& & }catch(Exception e)&& & {&& &&&&& e.printStackTrace();&& & }&& & finally& & {&& &&&&& try{&& &&&&& fos.close();&&&&& }catch(Exception e){}& }&}&public static void main(String[] args){&&String path ="E:\\tmp\\2\\xx.dbf";&&try {&&&InputStream fis = new FileInputStream(path);&&&DBFReader reader = new DBFReader(fis); &&&int fieldsCount = reader.getFieldCount();&&&&&&&&&&& System.out.println("字段数:"+fieldsCount);&&&&&&&&&&& DBFField[] df = new DBFField[fieldsCount+2];&&&&&&&&&&& for( int i=0; i&fieldsC i++)&&& &&&&&&&&&&& {&& &&&&&&&&&&&&& df[i] = reader.getField(i);&&&&&&&&&&&&& System.out.println("field"+i+":"+df[i].getName());&&&&&&&&&&& }&&&&&&&&&&& df[fieldsCount] = new DBFField();&&&&&&&&&&& df[fieldsCount].setName("add1");&&&&&&&&&&& df[fieldsCount].setDataType(DBFField.FIELD_TYPE_C);&&&&&&&&&&& df[fieldsCount].setFieldLength(10);&&&&&&&&&&& df[fieldsCount+1] = new DBFField();&&&&&&&&&&& df[fieldsCount+1].setName("add2");&&&&&&&&&&& df[fieldsCount+1].setDataType(DBFField.FIELD_TYPE_C);&&&&&&&&&&& df[fieldsCount+1].setFieldLength(10);&&&&&&&&&&& DBFWriter writer = new DBFWriter();&&&&&&&&&&& writer.setFields(df);&&&&&&&&&&& Object[] rowV&&&&&&&&&&& Object[] rowValues1 = new Object[fieldsCount+2];&&&&&&&&&&& //一条条取出path文件中记录&& &&&&&&&&&&& while((rowValues = reader.nextRecord()) != null) &&&&&&&&&&& { &&&&&&&&&&&&& for(int i=0;i&fieldsCi++){&&&&&&&&&&& && rowValues1[i] = rowValues[i];&&&&&&&&&&&&& }&&&&&&&&&&&&& rowValues1[fieldsCount]="x";&&&&&&&&&&&&& rowValues1[fieldsCount+1]="xx";&&&&&&&&&&&&& writer.addRecord(rowValues1);&&&&&&&&&&& } &&&&&&&&&&& &&&&&&&&&&& path ="E:\\tmp\\2\\test2.dbf";&&&&&&&&&&& OutputStream fos = new FileOutputStream(path);&& &&&&& &//写入数据&& && &&&&& &writer.write(fos);&& && &&&&& &System.out.println("OVER");&&&&&&&&&&& &&} catch (FileNotFoundException | DBFException e) {&&&// TODO Auto-generated catch block&&&e.printStackTrace();&&}&}
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具java读取dbf文件_百度文库
赠送免券下载特权
10W篇文档免费专享
部分付费文档8折起
每天抽奖多种福利
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
java读取dbf文件
&&java 读写 DBF 文件
现在还有不少古老场景读取dbf文件,但对于java程序员来说可用的lib太少,只有 javadbf和xBaseJ
xBasej稍好些,起码更新到2014年,也更像一个数据库操作api,但也有些坑在里面,
特此写个例程记录一下,也希望有人看了少花费时间再去研究这种逐渐会没价值的东西
你可能喜欢Java对MONGODB数据基础操作
http://blog.csdn.net/mcpang/article/details/8730849
http://www.cnblogs.com/hoojo/archive//2068665.html
DocInfo.java
import java.io.S
import java.io.UnsupportedEncodingE
import java.util.ArrayL
import java.util.D
import java.util.HashM
import java.util.L
import java.util.M
import play.data.validation.M
import play.data.validation.R
import annotation.BeanF
import annotation.DateWithT
import annotation.NumL
import com.mongodb.BasicDBO
import com.mongodb.DB;
import com.mongodb.DBC
import com.mongodb.DBO
import com.mongodb.DBC
import com.mongodb.util.JSON;
import net.sf.json.JSONO
import util.C
import util.DBU
import util.DateU
import util.DocU
import util.HttpH
import util.SqlH
import util.UtilV
import util.XS
* 文章信息数据操作类
* @author rainyhao
上午9:58:14
public class DocInfo implements Serializable{
public Long _//文章ID,CT生成
public D//得分
public S//URL
public I//通道类型
public S//摘要
public S//发布时间
transient public Integer intPt;//int类型的发布时间,用于三通道融合检索
public S//采集时间
public S//作者
public I//网站id
public S//网站地域信息
public S//网站名称
public Tag[]//标签
public S//内容指纹
public S//来源
public I//转载数
public I//评论\回复数
public I//暂时不使用
public I//重要度/热度
public String[]//板块类别标签
public String[] //图片列表
public String[] //视频列表
public S//标题
public I//版块id
public S//板块名称
public S//关键词
public S//关键词向量
public S//人名列表
public S//地名列表
public S//机构名列表
public String md5;//网页MD5
public S//分页指纹(根据采集内容填写)
public I//转载标识
public I//点击数
public I//是否网站首页文章
public I//负面指数
public I//是否为回复消息标志,1:是
public S//消息id
public S//微博作者ID
public S//微博作者的用户名
public S//用户头像地址
public S//音频url
public String[] //微博内出现的 @名字,格式:[“@lisi"]
public S//被转发消息id
public S//被转发消息源头id
public S//转发用户ID(ri用户消息的作者)
public S//被回复ID
public S//被回复人ID
public S//被回复人昵称
public S//微博来源链接
public I//内容长度
public I//帖子楼层
public S//正文
// 非mongo字段的辅助属性
public L// 知识库中专家库的id
* 获得一个任务的最新文章列表
* @param ti
task_id 任务ID(必选)
* @param ps
page size 单页返回记录数 可选(默认为50)
* @param p
page 返回结果的页码 可选(默认为1)
* @param sb
* @param so
排序顺序, 1升序
* @param tp 任务类型 t话题 c内容分类
public static List&DocInfo& getNewDocList(Long ti, Integer cis, Integer ps,
Integer p,Integer rpf, String sb, Integer so) {
HashMap&String, Object& condition = new HashMap&String, Object&();
// 默认为0或空表示全部通道
if (!UtilValidate.areEqual("0", cis) && UtilValidate.isNotEmpty(cis)) {
condition.put("ch", cis+"");
condition.put("tag", getTaskType() + ti);
condition.put("tt", 2); // 1,gt采集时间,2,pt发布时间
condition.put("ps", ps);
condition.put("p", p);
if(sb==null||"".equals(sb)){
condition.put("sb", sb);
if(so==null||"".equals(so)){
condition.put("so", so);
if(rpf!=null&&rpf==1){
condition.put("rpf", 1);
List&DocInfo& docInfoList = DocUtil.getNew(condition);
return docInfoL
* 获得一个任务的最新文章列表数量
* @param ti task_id 任务ID(必选)
* @param ps page size 单页返回记录数 可选(默认为50)
* @param p
page 返回结果的页码 可选(默认为1)
* @param sb 排序字段
* @param so 排序顺序, 1升序
public static Long getNewDocCount(Long ti, Integer cis, Integer ps,
Integer p,Integer rpf) {
HashMap&String, Object& condition = new HashMap&String, Object&();
// 默认为0或空表示全部通道
if (!UtilValidate.areEqual("0", cis) && UtilValidate.isNotEmpty(cis)) {
condition.put("ch", cis+"");
condition.put("tag", getTaskType() + ti);
condition.put("tt", 2); // 1,gt采集时间,2,pt发布时间
condition.put("ps", ps);
condition.put("p", p);
if(rpf!=null&&rpf==1){
condition.put("rpf", 1);
long count=0l;
count = DocUtil.getCount(condition);
* 根据taskId取得任务类型
* @param taskId
private static String getTaskType() {
return "r";
* 根据一篇文章ID获得其正文
* @param did 文章id
public static String getContent(Long did) {
DB db = DBUtil.getDB(Constants.MONGO_DB_DOCTEXT);
DBCollection doctextCollection = db
.getCollection(Constants.MONGO_DOCTEXT);
// 查询条件
BasicDBObject queryObject = new BasicDBObject();
queryObject.append("_id", did);
// 返回字段
BasicDBObject fieldObject = new BasicDBObject();
fieldObject.put("content", 1);
DBObject docObject = doctextCollection
.findOne(queryObject, fieldObject);
String returnField = "";
if (docObject != null) {
returnField = (String) docObject.get("content");
return returnF
* 获得一篇文章的元信息
* @param did 文章id
* @param ti 任务id,关键词标红用
public static DocInfo getDetail(Long did) {
if(did==null){
return new DocInfo();
DB db = DBUtil.getDB(Constants.MONGO_DB_DOCINFO);
DBCollection collection = db.getCollection(Constants.MONGO_DOCINFO);
BasicDBObject queryObject = new BasicDBObject();
if(did!=null){
queryObject.put("_id", did);
DBObject docObject = collection.findOne(queryObject);
DocInfo docInfo = new DocInfo();
if (docObject != null) {
docInfo=DocUtil.assignDocinfo(docObject);
DB doctextDb = DBUtil.getDB(Constants.MONGO_DB_DOCTEXT);
DBCollection ctCollection = doctextDb
.getCollection(Constants.MONGO_DOCTEXT);
DBObject ctObject = ctCollection.findOne(new BasicDBObject()
.append("_id", docInfo._id));
if (ctObject != null) {
docInfo.ct = ctObject.get("content") == null ? ""
: (String) ctObject.get("content");// 标题
docInfo.ct = "";
return docI
//循环从MONGODB获取文章详细信息以及文章正文
public static List&JSONObject& getContents(List&JSONObject& docs) {
List&JSONObject& docList = new ArrayList&JSONObject&();
int arraynum = 0;
for (JSONObject doc : docs) {
String did = doc.getString("did");
DocInfo info = getDetail(Long.valueOf(did));
arraynum++;
doc.put("arraynum", arraynum);
doc.put("md5", info.cf==null?"":info.cf);
doc.put("fulltext", info.ct==null?"":info.ct);
doc.put("createDate", info.pt==null?"":info.pt);
doc.put("summary", info.t==null?"":info.t);
doc.put("creator", info.au==null?"":info.au);
doc.put("url", info.u==null?"":info.u);
doc.put("reg", info.sa==null?"":info.sa);
doc.put("src", info.sn==null?"":info.sn);
docList.add(doc);
return docL
* &p&当天非针对话题ID的最新热门Top100信息报文(注:现有系统热门推荐热点文章功能)&/p&
* &p&返回&/p&
* @author Lingdong
下午03:11:18
mininum 数据起始位
maxinum 数据终止位
galleryid 通道id(1新闻、2论坛、3博客)
public static List&JSONObject& getHotDocList(Integer mininum, Integer maxinum, Integer galleryid){
StringBuffer sql = new StringBuffer("select distinct a.doc_id as did, a.hot_degree as hd, a.keywords as kw ");
sql.append(" from yqpt_hot_doc_today a
sql.append(" where a.channel_id =" + galleryid + " ");
sql.append(" and a.publish_time &= '" + XString.formatDate(new Date(), "yyyy-MM-dd") + " 00:00:00'");
sql.append(" order by a.publish_time desc ");
sql.append(" limit " + mininum + "," + maxinum +" ");
return SqlHelper.queryForJSONList(sql.toString());
DocUtil.java
import java.util.ArrayL
import java.util.D
import java.util.HashM
import java.util.L
import java.util.M
import java.util.regex.P
import models.DocI
import models.T
import play.L
import com.mongodb.AggregationO
import com.mongodb.BasicDBL
import com.mongodb.BasicDBO
import com.mongodb.CommandR
import com.mongodb.DB;
import com.mongodb.DBC
import com.mongodb.DBC
import com.mongodb.DBO
import com.sun.org.apache.bcel.internal.generic.NEW;
public class DocUtil {
* 根据筛选条件返回文章数量
* @param condition
* @return int
public static long getCount(HashMap&String, Object& condition) {
//单独处理按uis和sis查询的情况
if (condition.get("uis")!=null&&condition.get("sis")!=null) {
long count=getCountWith$or(condition);
long start=System.currentTimeMillis();
long count = 0l;
DB db = DBUtil.getDB(Constants.MONGO_DB_DOCINFO);
DBCollection collection = db.getCollection(Constants.MONGO_DOCINFO);
long middle=System.currentTimeMillis();
BasicDBObject queryObject = generateQuery(condition);
count=collection.find(queryObject).count();
long end=System.currentTimeMillis();
Logger.info(queryObject+"-count cost:"+(middle-start)+"+"+(end-middle)+"="+(end-start)+"ms");
* 单独处理按uis、sis查询的情况
* @param condition
* @return List&DocInfo&
private static long getCountWith$or(HashMap&String, Object& condition){
long start=System.currentTimeMillis();
DB db = DBUtil.getDB(Constants.MONGO_DB_DOCINFO);
DBCollection collection = db.getCollection(Constants.MONGO_DOCINFO);
long middle=System.currentTimeMillis();
BasicDBObject queryObject = generateQuery(condition);
//第一次过滤
//拼装si、ui条件
Object sisObject = condition.get("sis");
Object uisObject = condition.get("uis");
if (sisObject!=null&&uisObject!=null) {
String sis = (String) sisO
String uis = (String) uisO
if (!sis.equals("")&&!uis.equals("")) {
String[] sisArray = sis.split(",");
int sisLength = sisArray.
Long[] siArray = new Long[sisLength];
for (int i = 0; i & sisL i++) {
siArray[i] = Long.parseLong(sisArray[i]);
String[] uisArray = uis.split(",");
int uis_length = uisArray.
if(sisLength==uis_length){
BasicDBList basicDBList = new BasicDBList();
for(int i=0;i&sisLi++){
BasicDBObject query = new BasicDBObject().append("si",siArray[i]).append("ui",uisArray[i]);
basicDBList.add(query);
queryObject.append("$or",basicDBList);
// 拼装按时间(pt)过滤条件
String st = String.valueOf(condition.get("st"));
String et = String.valueOf(condition.get("et"));
boolean flag =// st和et至少传一个,才会拼装时间过滤条件
BasicDBObject basicDBObject = new BasicDBObject();
if (!st.equals("") && !st.equals("null")) {
Date stTime = DateUtil.string2UtilDate(st,
"yyyy-MM-dd HH:mm:ss");
basicDBObject.append("$gte", stTime.getTime() / 1000);
if (!et.equals("") && !et.equals("null")) {
Date etTime = DateUtil.string2UtilDate(et,
"yyyy-MM-dd HH:mm:ss");
basicDBObject.append("$lte", etTime.getTime() / 1000);
} catch (Exception e) {
e.printStackTrace();
if (flag) {
queryObject.append("pt", basicDBObject);
//拼装需要排除的文章id条件
if(condition.containsKey("nids")){
Object nidsObject = condition.get("nids");
if(nidsObject!=null){
String nids=(String)nidsO
if(!nids.equals("")){
String[] nidArray=nids.split(",");
Long[] idArray=new Long[nidArray.length];
for(int i=0;i&nidArray.i++){
idArray[i]=Long.parseLong(nidArray[i]);
queryObject.append("_id",new BasicDBObject().append("$nin",idArray));
BasicDBObject match=new BasicDBObject();
match.append("$match",queryObject);
BasicDBObject group=new BasicDBObject();
group.append("$group", new BasicDBObject().append("_id","$ch").append("ct",new BasicDBObject().append("$sum",1)));
AggregationOutput aggregate = collection.aggregate(match,group);
CommandResult commandResult = aggregate.getCommandResult();
long result=0L;
double status=(Double)commandResult.get("ok");
if(status==1){
BasicDBList dbList =(BasicDBList)commandResult.get("result");
if(dbList.size()&0){
result=((BasicDBObject)dbList.get(0)).getLong("ct");
long end=System.currentTimeMillis();
Logger.info(queryObject+"-count cost:"+(middle-start)+"+"+(end-middle)+"="+(end-start)+"ms");
* 根据筛选条件、排序条件、翻页条件、返回字段条件,返回文章列表
* @param condition
* @return List&DocInfo&
public static List&DocInfo& getNew(HashMap&String, Object& condition) {
//单独处理按uis和sis查询的情况
if (condition.get("uis")!=null&&condition.get("sis")!=null) {
List&DocInfo& result=getNewWith$or(condition);
long start=System.currentTimeMillis();
List&DocInfo& result = new ArrayList&DocInfo&();
DB db = DBUtil.getDB(Constants.MONGO_DB_DOCINFO);
DBCollection collection = db.getCollection(Constants.MONGO_DOCINFO);
long middle=System.currentTimeMillis();
BasicDBObject queryObject = generateQuery(condition);
DBCursor dbCursor =
//分页参数,默认为第1页,每页50条
int p = 1, ps = 50;
if (condition.containsKey("p")) {
Object pObject = condition.get("p");
if (pObject != null) {
p = (Integer) pO
if (condition.containsKey("ps")) {
Object psObject = condition.get("ps");
if (psObject != null) {
ps = (Integer) psO
int skipCount=0;
if(condition.containsKey("start")){
Object skipCountObject = condition.get("start");
if (skipCountObject != null) {
skipCount = (Integer)skipCountObject-1;
skipCount=(p-1)*
//排序参数,默认为按pt降序(1升序,-1降序,默认降序)
String sb = "pt";
int so = -1;
if (condition.containsKey("sb")) {
Object theSb = condition.get("sb");
if (theSb != null) {
sb = String.valueOf(theSb).trim();
if (condition.containsKey("so")) {
Object theSo = condition.get("so");
if (theSo != null) {
so = (Integer) theSo;
if(so!=1){
//排序条件
BasicDBObject sortDBObject=new BasicDBObject();
if(condition.containsKey("tag")&&"v".equals(condition.get("sb"))){
sortDBObject.append("tag.t",1).append("tag.v",-1);//按tag.v排序的特殊处理
sortDBObject.append(sb, so);
Object flsObject=condition.get("fls");
if (flsObject!=null&&!("".equals((String)flsObject))) {//返回指定字段
String fls = (String) condition.get("fls");
BasicDBObject fieldObject = new BasicDBObject();
String[] fileds = fls.split(",");
for (int i = 0; i & fileds. i++) {
fieldObject.append(fileds[i], 1);
dbCursor = collection.find(queryObject, fieldObject)
.sort(sortDBObject).skip(p).limit(ps);//由REST方法更改,分页数据起始位置结束为止不做计算(对方要求)
}else if(condition.containsKey("tag")&&"v".equals(condition.get("sb"))){//按tag.v排序的特殊处理
BasicDBObject fieldObject = new BasicDBObject();
fieldObject.append("tag",new BasicDBObject().append("$elemMatch",new BasicDBObject().append("t",condition.get("tag"))));
for(String field:Constants.wholeField){
if(!field.equals("tag")){
fieldObject.append(field,1);
dbCursor = collection.find(queryObject, fieldObject)
.sort(sortDBObject).skip(p).limit(ps);
}else {//返回全部字段
dbCursor = collection.find(queryObject)
.sort(sortDBObject).skip(p).limit(ps);
DocInfo docI
//是否截断摘要
boolean cut=(condition.get("cut")==null)||(condition.get("cut")==Boolean.TRUE);
while (dbCursor.hasNext()) {
DBObject docObject = dbCursor.next();
docInfo=assignDocinfo(docObject);
String summary=docObject.get("a")==null?null:(String)docObject.get("a");//摘要
//限制摘要的最大的长度
if(docInfo.ch!=null&&docInfo.ch!=Constants.CH_IWB&&docInfo.ch!=Constants.CH_OWB
&&cut&&summary!=null
&&summary.length()&Constants.MAX_SUMMARY_LENGTH){
docInfo.a=summary.substring(0,Constants.MAX_SUMMARY_LENGTH-1)+"...";
docInfo.a=
result.add(docInfo);
dbCursor.close();
long end=System.currentTimeMillis();
Logger.info(queryObject+"-"+sortDBObject+"-query cost p-"+p+"-ps-"+ps+":"+(middle-start)+"+"+(end-middle)+"="+(end-start)+"ms");
* 单独处理按uis、sis查询的情况
* @param condition
* @return List&DocInfo&
private static List&DocInfo& getNewWith$or(HashMap&String, Object& condition){
long start=System.currentTimeMillis();
List&DocInfo& result = new ArrayList&DocInfo&();
DB db = DBUtil.getDB(Constants.MONGO_DB_DOCINFO);
DBCollection collection = db.getCollection(Constants.MONGO_DOCINFO);
long middle=System.currentTimeMillis();
BasicDBObject queryObject = generateQuery(condition);
//分页参数,默认为第1页,每页50条
int p = 1, ps = 50;
if (condition.containsKey("p")) {
Object pObject = condition.get("p");
if (pObject != null) {
p = (Integer) pO
if (condition.containsKey("ps")) {
Object psObject = condition.get("ps");
if (psObject != null) {
ps = (Integer) psO
int skipCount=0;
if(condition.containsKey("start")){
Object skipCountObject = condition.get("start");
if (skipCountObject != null) {
skipCount = (Integer)skipCountObject-1;
skipCount=(p-1)*
//第一次过滤
//拼装si、ui条件
Object sisObject = condition.get("sis");
Object uisObject = condition.get("uis");
if (sisObject!=null&&uisObject!=null) {
String sis = (String) sisO
String uis = (String) uisO
if (!sis.equals("")&&!uis.equals("")) {
String[] sisArray = sis.split(",");
int sisLength = sisArray.
Long[] siArray = new Long[sisLength];
for (int i = 0; i & sisL i++) {
siArray[i] = Long.parseLong(sisArray[i]);
String[] uisArray = uis.split(",");
int uis_length = uisArray.
if(sisLength==uis_length){
BasicDBList basicDBList = new BasicDBList();
for(int i=0;i&sisLi++){
BasicDBObject query = new BasicDBObject().append("si",siArray[i]).append("ui",uisArray[i]);
basicDBList.add(query);
queryObject.append("$or",basicDBList);
// 拼装按时间(pt)过滤条件
String st = String.valueOf(condition.get("st"));
String et = String.valueOf(condition.get("et"));
boolean flag =// st和et至少传一个,才会拼装时间过滤条件
BasicDBObject basicDBObject = new BasicDBObject();
if (!st.equals("") && !st.equals("null")) {
Date stTime = DateUtil.string2UtilDate(st,
"yyyy-MM-dd HH:mm:ss");
basicDBObject.append("$gte", stTime.getTime() / 1000);
if (!et.equals("") && !et.equals("null")) {
Date etTime = DateUtil.string2UtilDate(et,
"yyyy-MM-dd HH:mm:ss");
basicDBObject.append("$lte", etTime.getTime() / 1000);
} catch (Exception e) {
e.printStackTrace();
if (flag) {
queryObject.append("pt", basicDBObject);
//拼装需要排除的文章id条件
if(condition.containsKey("nids")){
Object nidsObject = condition.get("nids");
if(nidsObject!=null){
String nids=(String)nidsO
if(!nids.equals("")){
String[] nidArray=nids.split(",");
Long[] idArray=new Long[nidArray.length];
for(int i=0;i&nidArray.i++){
idArray[i]=Long.parseLong(nidArray[i]);
queryObject.append("_id",new BasicDBObject().append("$nin",idArray));
BasicDBObject match=new BasicDBObject();
match.append("$match",queryObject);
//按pt降序排序
BasicDBObject sort=new BasicDBObject();
sort.append("$sort",new BasicDBObject().append("pt",-1));
//翻页条件
BasicDBObject skip=new BasicDBObject();
skip.append("$skip",skipCount);
BasicDBObject limit=new BasicDBObject();
limit.append("$limit",ps);
AggregationOutput aggregate = collection.aggregate(match,sort,skip,limit);
CommandResult commandResult = aggregate.getCommandResult();
BasicDBList dbList =(BasicDBList)commandResult.get("result");
DocInfo docI
for (Object dbObject:dbList) {
docInfo=new DocInfo();
BasicDBObject docObject=(BasicDBObject)dbO
docInfo=assignDocinfo(docObject);
result.add(docInfo);
long end=System.currentTimeMillis();
Logger.info(queryObject+"-"+sort+"-query cost p-"+p+"-ps-"+ps+":"+(middle-start)+"+"+(end-middle)+"="+(end-start)+"ms");
* 根据hashmap传进来的参数,拼装查询条件
* @param condition
* @return BasicDBObject
private static BasicDBObject generateQuery(HashMap&String, Object& condition) {
BasicDBObject queryObject = new BasicDBObject();
if (condition == null) {
return queryO
// 拼装起始文章id条件
if (condition.containsKey("sid")) {
Object sidObject = condition.get("sid");
if (sidObject != null) {
queryObject.append("_id", new BasicDBObject("$gte",
(Long) sidObject));
// 拼装文章id列表条件
if (condition.containsKey("did")) {
Object didObject = condition.get("did");
if (didObject != null) {
String dids = (String) didO
if (!dids.equals("")) {
String[] didsArray = dids.split(",");
int length = didsArray.
Long[] didArray = new Long[length];
for (int i = 0; i & i++) {
didArray[i] = Long.parseLong(didsArray[i]);
if(didArray.length==1){
queryObject.append("_id",didArray[0]);
queryObject.append("_id",
new BasicDBObject("$in", didArray));
// 拼装频道查询条件
//replies为false不返回评论回帖;为true时返回全部数据(必须处理null,不然会影响其他地方)
Boolean replies=(Boolean) condition.get("replies");
if (condition.containsKey("ch")) {
Object chObject = condition.get("ch");
if (chObject != null) {
String chs = (String) chO
if (!chs.equals("")) {
String[] chsArray = chs.split(",");
int length = chsArray.
int[] chArray = new int[length];
for (int i = 0; i & i++) {
//指定通道不管replies为true,还是false都按通道取数据
chArray[i] = Integer.parseInt(chsArray[i]);
if(chArray.length==1){
queryObject.append("ch", chArray[0]);
queryObject.append("ch", new BasicDBObject("$in", chArray));
//是否排除评论回帖
if(replies!=null&&!replies){
queryObject.append("ch", new BasicDBObject("$ne", 7));
//是否排除评论回帖
if(replies!=null&&!replies){
queryObject.append("ch", new BasicDBObject("$ne", 7));
//是否排除评论回帖
if(replies!=null&&!replies){
queryObject.append("ch", new BasicDBObject("$ne", 7));
// 拼装板块id查询条件
if (condition.containsKey("bi")) {
Object biObject = condition.get("bi");
if (biObject != null) {
String bis = (String) biO
if (!bis.equals("")) {
String[] bisArray = bis.split(",");
int length = bisArray.
int[] biArray = new int[length];
for (int i = 0; i & i++) {
biArray[i] = Integer.parseInt(bisArray[i]);
if(biArray.length==1){
queryObject.append("bi", biArray[0]);
queryObject.append("bi", new BasicDBObject("$in", biArray));
// 拼装按时间过滤条件,过滤时间类型,1,gt采集时间,2,pt发布时间,默认为发布时间
String st = String.valueOf(condition.get("st"));
String et = String.valueOf(condition.get("et"));
boolean flag =// st和et至少传一个,才会拼装时间过滤条件
BasicDBObject basicDBObject = new BasicDBObject();
if (!st.equals("") && !st.equals("null")) {
Date stTime = DateUtil.string2UtilDate(st,
"yyyy-MM-dd HH:mm:ss");
basicDBObject.append("$gte", stTime.getTime() / 1000);
if (!et.equals("") && !et.equals("null")) {
Date etTime = DateUtil.string2UtilDate(et,
"yyyy-MM-dd HH:mm:ss");
basicDBObject.append("$lte", etTime.getTime() / 1000);
} catch (Exception e) {
e.printStackTrace();
String timeType = "pt";
if (condition.containsKey("tt")) {
Object ttObject = condition.get("tt");
if (ttObject != null) {
if ((Integer) ttObject == 1) {
timeType = "gt";
if (flag) {
queryObject.append(timeType, basicDBObject);
//拼装插入时间条件
if(condition.containsKey("it")){
String it = String.valueOf(condition.get("it"));
if (!it.equals("") && !it.equals("null")) {
Date itTime = DateUtil.string2UtilDate(it,
"yyyy-MM-dd HH:mm:ss");
queryObject.append("it",new BasicDBObject("$gte", itTime.getTime() / 1000));
} catch (Exception e) {
e.printStackTrace();
//拼装发布时间条件
if(condition.containsKey("pt")){
String pt = String.valueOf(condition.get("pt"));
if (!pt.equals("") && !pt.equals("null")) {
Date itTime = DateUtil.string2UtilDate(pt,
"yyyy-MM-dd HH:mm:ss");
queryObject.append("pt",new BasicDBObject("$gte", itTime.getTime() / 1000));
} catch (Exception e) {
e.printStackTrace();
// 拼装md5条件
if (condition.containsKey("md5")) {
Object md5Object = condition.get("md5");
if (md5Object != null) {
String md5 = (String) md5O
if (!md5.equals("")) {
String[] md5Array=md5.split(",");
if(md5Array.length==1){
queryObject.append("md5", md5Array[0]);
queryObject.append("md5",
new BasicDBObject("$in", md5Array));
// 拼装内容指纹条件
if (condition.containsKey("cf")) {
Object cfObject = condition.get("cf");
if (cfObject != null) {
String cf = (String) cfO
if (!cf.equals("")) {
String[] cfArray=cf.split(",");
if(cfArray.length==1){
queryObject.append("cf", cfArray[0]);
queryObject.append("cf",
new BasicDBObject("$in", cfArray));
// 拼装倾向性条件
if (condition.containsKey("sen")) {
Object senObject = condition.get("sen");
if (senObject != null) {
queryObject.append("sen", (Integer) senObject);
// 拼装作者条件
if (condition.containsKey("au")) {
Object auObject = condition.get("au");
if (auObject != null) {
String au = (String) auO
if (!au.equals("")) {
String[] auArray=au.split(",");
if(auArray.length==1){
queryObject.append("au", auArray[0]);
queryObject.append("au",
new BasicDBObject("$in", auArray));
// 拼装新闻来源条件
if (condition.containsKey("src")) {
Object srcObject = condition.get("src");
if (srcObject != null) {
String src = (String) srcO
if (!src.equals("")) {
String[] srcArray=src.split(",");
if(srcArray.length==1){
queryObject.append("src",srcArray[0]);
queryObject.append("src",new BasicDBObject("$in", srcArray));
// 拼装转载数条件
if (condition.containsKey("rpc")) {
Object rpcObject = condition.get("rpc");
if (rpcObject != null) {
queryObject.append("rpc", new BasicDBObject("$gt",
(Integer) rpcObject));
// 拼装转载标识条件
if (condition.containsKey("rpf")) {
Object rpfObject = condition.get("rpf");
if (rpfObject != null) {
queryObject.append("rpf", (Integer) rpfObject);
// 拼装点击数条件
if (condition.containsKey("cc")) {
Object ccObject = condition.get("cc");
if (ccObject != null) {
queryObject.append("cc", new BasicDBObject("$gt",
(Integer) ccObject));
// 拼装转发数条件
if (condition.containsKey("rc")) {
Object rcObject = condition.get("rc");
if (rcObject != null) {
queryObject.append("rc", new BasicDBObject("$gt",
(Integer) rcObject));
// 拼装是否网站首页条件
if (condition.containsKey("ish")) {
Object ishObject = condition.get("ish");
if (ishObject != null) {
queryObject.append("ish", (Integer) ishObject);
// 拼装重要度/热度条件
if (condition.containsKey("sc&")) {
Object scObject = condition.get("sc&");
if (scObject != null) {
queryObject.append("sc", new BasicDBObject("$gt",
(Integer) scObject));
} else if (condition.containsKey("sc&=")) {
Object scObject = condition.get("sc&=");
if (scObject != null) {
queryObject.append("sc", new BasicDBObject("$gte",
(Integer) scObject));
if (condition.containsKey("sc&")) {
Object scObject = condition.get("sc&");
if (scObject != null) {
queryObject.append("sc", new BasicDBObject("$lt",
(Integer) scObject));
} else if (condition.containsKey("sc&=")) {
Object scObject = condition.get("sc&=");
if (scObject != null) {
queryObject.append("sc", new BasicDBObject("$lte",
(Integer) scObject));
// 拼装网站id条件
if (condition.containsKey("si")) {
Object siObject = condition.get("si");
if (siObject != null) {
String sis = (String) siO
if (!sis.equals("")) {
String[] sisArray = sis.split(",");
int length = sisArray.
Long[] siArray = new Long[length];
for (int i = 0; i & i++) {
siArray[i] = Long.parseLong(sisArray[i]);
if(siArray.length==1){
queryObject.append("si", siArray[0]);
queryObject.append("si", new BasicDBObject("$in",siArray));
// 拼装板块类别标签条件
String[] bct_array=
if (condition.containsKey("bct")) {
Object bctObject = condition.get("bct");
if (bctObject != null) {
String bcts = (String) bctO
if (!bcts.equals("")) {
bct_array = bcts.split(",");
if(bct_array.length==1){
queryObject.append("bct", bct_array[0]);
queryObject.append("bct", new BasicDBObject("$in",bct_array));
//拼装自定义分组的查询条件
if(condition.containsKey("mybct")||condition.containsKey("mybi")){
//如果已经拼装过bct条件,先移除
if (condition.containsKey("bct")) {
queryObject.remove("bct");
Object mybctObject = condition.get("mybct");
Object mybiObject = condition.get("mybi");
if (mybctObject != null && mybiObject != null) {
String bcts = (String) mybctO
String[] bctsArray = bcts.split(",");
String bis = (String) mybiO
String[] bisArray = bis.split(",");
int biLength = bisArray.
Long[] biArray = new Long[biLength];
for (int i = 0; i & biL i++) {
biArray[i] = Long.parseLong(bisArray[i]);
BasicDBObject[] myBasicDBObject = new BasicDBObject[2];
if (bct_array != null) {
BasicDBObject[] bctBasicDBObject = new BasicDBObject[2];
bctBasicDBObject[0] = new BasicDBObject("bct",
new BasicDBObject("$in", bct_array));
bctBasicDBObject[1] = new BasicDBObject("bct",
new BasicDBObject("$in", bctsArray));
myBasicDBObject[0] = new BasicDBObject("$and",
bctBasicDBObject);
myBasicDBObject[0] = new BasicDBObject("bct",
new BasicDBObject("$in", bctsArray));
myBasicDBObject[1] = new BasicDBObject("bi", new BasicDBObject(
"$in", biArray));
queryObject.append("$or", myBasicDBObject);
} else if (mybctObject != null) {
String bcts = (String) mybctO
String[] bctsArray = bcts.split(",");
if (bct_array != null) {
BasicDBObject[] bctBasicDBObject = new BasicDBObject[2];
bctBasicDBObject[0] = new BasicDBObject("bct",
new BasicDBObject("$in", bct_array));
bctBasicDBObject[1] = new BasicDBObject("bct",
new BasicDBObject("$in", bctsArray));
queryObject.append("$and", bctBasicDBObject);
queryObject.append("bct",
new BasicDBObject().append("$in", bctsArray));
String bis = (String) mybiO
String[] bisArray = bis.split(",");
int biLength = bisArray.
Long[] biArray = new Long[biLength];
for (int i = 0; i & biL i++) {
biArray[i] = Long.parseLong(bisArray[i]);
if(biArray.length==1){
queryObject.append("bi", biArray[0]);
queryObject.append("bi", new BasicDBObject().append("$in", biArray));
// 拼装标签条件
if (condition.containsKey("tag")) {
Object tagObject = condition.get("tag");
if (tagObject != null) {
String tag = (String) condition.get("tag");
if (!tag.equals("")) {
String[] tagArray=tag.split(",");
if(tagArray.length==1){
queryObject.append("tag.t", tagArray[0]);
queryObject.append("tag.t", new BasicDBObject().append("$in", tagArray));
//拼装按关键词模糊查找标题条件
if(condition.containsKey("tk")){
Object tkObject = condition.get("tk");
if(tkObject!=null){
String titleKeywords=(String)tkO
if(!titleKeywords.equals("")){
String[] keywords=titleKeywords.trim().split("\\s+");
int length=keywords.
Pattern pattern[]=new Pattern[length];
for (int i = 0; i & i++) {
pattern[i]=Pattern.compile(keywords[i]);
queryObject.append("t", new BasicDBObject().append("$in", pattern));
//拼装按关键词模糊查找内容条件(适用于微博通道)
if(condition.containsKey("ak")){
Object akObject = condition.get("ak");
if(akObject!=null){
String contentKeywords=(String)akO
if(!contentKeywords.equals("")){
String[] keywords=contentKeywords.trim().split("\\s+");
int length=keywords.
Pattern pattern[]=new Pattern[length];
for (int i = 0; i & i++) {
pattern[i]=Pattern.compile(keywords[i]);
queryObject.append("a", new BasicDBObject().append("$in", pattern));
//拼装按关键词模糊查找文章标题(新闻、论坛、博客、境外)或是内容(微博、评论)条件
if(condition.containsKey("atk")){
Object atkObject = condition.get("atk");
if(atkObject!=null){
String contentKeywords=(String)atkO
if(!contentKeywords.equals("")){
String[] keywords=contentKeywords.trim().split("\\s+");
int length=keywords.
Pattern pattern[]=new Pattern[length];
for (int i = 0; i & i++) {
pattern[i]=Pattern.compile(keywords[i]);
//新闻、论坛、博客、境外通道按标题查询
BasicDBObject subQuery1=new BasicDBObject();
int[] ch1={Constants.CH_NEWS,Constants.CH_BBS,Constants.CH_BLOG,Constants.CH_JW};
subQuery1.append("ch",new BasicDBObject().append("$in",ch1));
subQuery1.append("t", new BasicDBObject().append("$in", pattern));
//国内微博、国外微博、评论通道按内容查询
BasicDBObject subQuery2=new BasicDBObject();
int[] ch2={Constants.CH_IWB,Constants.CH_OWB,Constants.CH_CC};
subQuery2.append("ch",new BasicDBObject().append("$in",ch2));
subQuery2.append("a", new BasicDBObject().append("$in", pattern));
BasicDBList subQuery=new BasicDBList();
subQuery.add(subQuery1);
subQuery.add(subQuery2);
queryObject.append("$or",subQuery);
//拼装按关键词模糊查找k字段条件
if(condition.containsKey("kk")){
Object kkObject = condition.get("kk");
if(kkObject!=null){
String keywords=(String)kkO
if(!keywords.equals("")){
String[] keywordArray=keywords.trim().split("\\s+");
int length=keywordArray.
Pattern pattern[]=new Pattern[length];
for (int i = 0; i & i++) {
pattern[i]=Pattern.compile(keywordArray[i]);
queryObject.append("k", new BasicDBObject().append("$in", pattern));
//拼装按关键词模糊查找板块名称条件
if(condition.containsKey("bn")){
Object bnObject = condition.get("bn");
if(bnObject!=null){
String bnKeywords=(String)bnO
if(!bnKeywords.equals("")){
String[] keywords=bnKeywords.trim().split("\\s+");
int length=keywords.
Pattern pattern[]=new Pattern[length];
for (int i = 0; i & i++) {
pattern[i]=Pattern.compile(keywords[i]);
queryObject.append("bn", new BasicDBObject().append("$in", pattern));
//拼装按关键词模糊查找网站名称条件
if(condition.containsKey("sn")){
Object snObject = condition.get("sn");
if(snObject!=null){
String snKeywords=(String)snO
if(!snKeywords.equals("")){
String[] keywords=snKeywords.trim().split("\\s+");
int length=keywords.
Pattern pattern[]=new Pattern[length];
for (int i = 0; i & i++) {
pattern[i]=Pattern.compile(keywords[i]);
queryObject.append("sn", new BasicDBObject().append("$in", pattern));
//拼装按微博原始消息id查找微博条件
if(condition.containsKey("mid")){
Object midObject = condition.get("mid");
if(midObject!=null){
String mid=(String)midO
if(!mid.equals("")){
queryObject.append("mid",midObject);
//拼装按微博作者id查找微博条件
if(condition.containsKey("ui")){
Object uiObject = condition.get("ui");
if(uiObject!=null){
String ui=(String)uiO
if(!ui.equals("")){
queryObject.append("ui",uiObject);
//拼装需要排除的文章id条件
if(condition.containsKey("nids")){
Object nidsObject = condition.get("nids");
if(nidsObject!=null){
String nids=(String)nidsO
if(!nids.equals("")){
String[] nidArray=nids.split(",");
Long[] idArray=new Long[nidArray.length];
for(int i=0;i&nidArray.i++){
idArray[i]=Long.parseLong(nidArray[i]);
queryObject.append("_id",new BasicDBObject().append("$nin",idArray));
return queryO
* 返回某张表某篇文章的特定字段
* @param collection
* @param did
* @param field
返回字段表内名称
* @param fieldRename
返回字段名称
* @return Map&String, Object&
public static Map&String, Object& getSpecialFiled(String dbName,String collection,
Long did, String field, String filedRename) {
Map&String, Object& result = new HashMap&String, Object&();
DB db = DBUtil.getDB(dbName);
DBCollection dbCollection = db.getCollection(collection);
// 查询条件
BasicDBObject queryObject = new BasicDBObject();
queryObject.put("_id", did);
// 返回字段
BasicDBObject fieldObject = new BasicDBObject();
fieldObject.put(field, 1);
DBObject docObject = dbCollection.findOne(queryObject, fieldObject);
String returnField = "";
if (docObject != null) {
returnField = (String) docObject.get(field);
result.put(filedRename, returnField);
* 私有标红方法
* @param content
* @param keyword
* @param mark
* @param prefix
* @param suffix
* @return String
public static String getMarkedString(String content,String keyword,Integer mark,String prefix,String suffix){
if(content==null||"".equals(content)){
return "";
if(keyword==null||"".equals(keyword)){
keyword=keyword.trim();
if(mark==null){
switch (mark.intValue()) {
prefix="";
suffix="";
prefix=Constants.prefixHTML;
suffix=Constants.suffixHTML;
if(prefix==null||"".equals(prefix)){
prefix=Constants.prefixHTML;
if(suffix==null||"".equals(suffix)){
suffix=Constants.suffixHTML;
prefix="";
suffix="";
String result=content.replaceAll("&", "&lt").replaceAll("&", "&gt");
String[] split = keyword.split("\\s+");
for (int i=0;i&split.i++) {
result=result.replaceAll(split[i], prefix+split[i]+suffix);
* 将DBObject中的值赋值到Docinfo中
* @param dbObject
* @return DocInfo
public static DocInfo assignDocinfo(DBObject docObject){
DocInfo docInfo=new DocInfo();
docInfo._id=docObject.get("_id")==null?0l:(Long)docObject.get("_id");//文章ID,CT生成
docInfo.ch=docObject.get("ch")==null?0:(Integer)docObject.get("ch");//通道类型
docInfo.u=docObject.get("u")==null?"":(String)docObject.get("u");//URL
docInfo.a=docObject.get("a")==null?"":(String)docObject.get("a");//摘要
docInfo.pt=DateUtil.getDateStrFromTime(docObject.get("pt")==null?null:(Integer)docObject.get("pt"));//发布时间
docInfo.gt=DateUtil.getDateStrFromTime(docObject.get("gt")==null?null:(Integer)docObject.get("gt"));//采集时间
docInfo.au=docObject.get("au")==null?"":(String)docObject.get("au");//作者
docInfo.si=docObject.get("si")==null?0:(Integer)docObject.get("si");//网站id
docInfo.sa=SiteAreaUtil.getAreaInfo(docInfo.si);//网站地域信息
docInfo.sn=docObject.get("sn")==null?"":(String)docObject.get("sn");//网站名称
Object tagObject=docObject.get("tag");//标签
if(tagObject!=null){
BasicDBList tagList=(BasicDBList)tagO
Tag[] tags=new Tag[tagList.size()];
for (int i=0;i&tagList.size();i++) {
DBObject tag=(DBObject)tagList.get(i);
tags[i]=new Tag();
tags[i].t=tag.get("t")==null?"":(String)(tag.get("t"));
tags[i].v=tag.get("v")==null?0:Double.parseDouble(tag.get("v").toString());
docInfo.tag=
docInfo.cf=docObject.get("cf")==null?"":(String)docObject.get("cf");//内容指纹
docInfo.src=docObject.get("src")==null?"":(String)docObject.get("src");//来源
docInfo.rpc=docObject.get("rpc")==null?0:(Integer)docObject.get("rpc");//转载数
docInfo.rc=docObject.get("rc")==null?0:(Integer)docObject.get("rc");//评论\回复数
docInfo.mc=docObject.get("mc")==null?0:(Integer)docObject.get("mc");//暂时不使用
docInfo.sc=docObject.get("sc")==null?0:(Integer)docObject.get("sc");//重要度/热度
docInfo.bct=docObject.get("bct")==null?(new String[0]):((BasicDBList)docObject.get("bct")).toArray(new String[0]);//板块类别标签
docInfo.pic=docObject.get("pic")==null?(new String[0]):((BasicDBList)docObject.get("pic")).toArray(new String[0]);//图片列表
docInfo.video=docObject.get("video")==null?(new String[0]):((BasicDBList)docObject.get("video")).toArray(new String[0]);//视频列表
docInfo.t=docObject.get("t")==null?"":(String)docObject.get("t");//标题
docInfo.bi=docObject.get("bi")==null?0:(Integer)docObject.get("bi");//版块id
docInfo.bn=docObject.get("bn")==null?"":(String)docObject.get("bn");//板块名称
docInfo.k=docObject.get("k")==null?"":(String)docObject.get("k");//关键词
docInfo.kv=docObject.get("kv")==null?"":(String)docObject.get("kv");//关键词向量
docInfo.pl=docObject.get("pl")==null?"":(String)docObject.get("pl");//人名列表
docInfo.rl=docObject.get("rl")==null?"":(String)docObject.get("rl");//地名列表
docInfo.ol=docObject.get("ol")==null?"":(String)docObject.get("ol");//机构名列表
docInfo.md5=docObject.get("md5")==null?"":(String)docObject.get("md5");//网页MD5
docInfo.rpf=docObject.get("rpf")==null?0:(Integer)docObject.get("rpf");//转载标识
docInfo.cc=docObject.get("cc")==null?0:(Integer)docObject.get("cc");//点击数
docInfo.ish=docObject.get("ish")==null?0:(Integer)docObject.get("ish");//是否网站首页文章
docInfo.nn=docObject.get("nn")==null?0:(Integer)docObject.get("nn");//负面指数
docInfo.irp=docObject.get("irp")==null?0:(Integer)docObject.get("irp");//是否为回复消息标志,1:是
docInfo.mid=docObject.get("mid")==null?"":(String)docObject.get("mid");//微博作者的用户id
docInfo.ui=docObject.get("ui")==null?"":(String)docObject.get("ui");//消息原始ID
docInfo.un=docObject.get("un")==null?"":(String)docObject.get("un");//微博作者的用户名
docInfo.iu=docObject.get("iu")==null?"":(String)docObject.get("iu");//用户头像地址
docInfo.audio=docObject.get("audio")==null?"":(String)docObject.get("audio");//音频url
docInfo.nc=//暂时不用nc字段
//docInfo.nc=docObject.get("nc")==null?(new String[0]):((BasicDBList)docObject.get("nc")).toArray(new String[0]);//微博内出现的 @名字,格式:[“@lisi"]
docInfo.rpi=docObject.get("rpi")==null?"":(String)docObject.get("rpi");//被转发消息id
docInfo.ri=docObject.get("ri")==null?"":(String)docObject.get("ri");//被转发消息源头id
docInfo.ru=docObject.get("ru")==null?"":(String)docObject.get("ru");//转发用户ID(ri用户消息的作者)
docInfo.rpm=docObject.get("rpm")==null?"":(String)docObject.get("rpm");//被回复ID
docInfo.rpu=docObject.get("rpu")==null?"":(String)docObject.get("rpu");//被回复人ID
docInfo.rps=docObject.get("rps")==null?"":(String)docObject.get("rps");//被回复人昵称
docInfo.srh=docObject.get("srh")==null?"":(String)docObject.get("srh");//微博来源链接
docInfo.cl=docObject.get("cl")==null?0:(Integer)docObject.get("cl");//内容长度
docInfo.fn=docObject.get("fn")==null?0:(Integer)docObject.get("fn");//帖子楼层
//微博通道转换url
if(docInfo.ch!=null&&(docInfo.ch==5||docInfo.ch==6)&&docInfo.si!=null&&docInfo.ui!=null){
docInfo.u=transUrl(docInfo.si,docInfo.ui)+docInfo.u;
return docI
* 转换微博通道url
* @param si
* @param ui
public static String transUrl(int si,String ui){
String url="";
switch (si) {
url="http://www.weibo.com/"+ui+"/";
url="http://t.qq.com";
url="http://";
url="http://";
DBUtil.java MONGODB连接类
import java.net.UnknownHostE
import java.sql.C
import java.sql.ResultS
import java.sql.SQLE
import java.sql.S
import java.util.ArrayL
import java.util.HashM
import java.util.L
import com.mongodb.M
import com.mongodb.MongoE
import com.mongodb.MongoO
import com.mongodb.ReadP
import com.mongodb.ServerA
* 数据库工具类
* @author twy
public class DBUtil {
// mysql数据库对象
public static play.db.DB db = new play.db.DB();
// mongo db Map对象
public static HashMap&String,com.mongodb.DB& dbM
* 根据ip、端口、数据库名称返回DB对象
* @param ip ip地址
* @param port 端口
* @param dbName 数据库名称
* @return com.mongodb.DB
public static com.mongodb.DB findDB(String dbName,String ip,String port,int connections){
com.mongodb.DB db=
//mongo数据库地址列表
List&ServerAddress& addrs=new ArrayList&ServerAddress&();
String[] dbIpArray=ip.trim().split(",");
String[] dbPortArray=port.trim().split(",");
ServerAddress serverA
for (int i=0;i&dbIpArray. i++) {
serverAddress=new ServerAddress(dbIpArray[i],Integer.parseInt(dbPortArray[i]));
addrs.add(serverAddress);
MongoOptions mongoOptions=new MongoOptions();
//每个主机允许的连接数(每个主机的连接池大小),当连接池被用光时,会被阻塞住 ,默认为10
mongoOptions.setConnectionsPerHost(connections);
//查询超过1000ms会抛出异常
mongoOptions.setSocketTimeout(1000);
//被阻塞线程从连接池获取连接的最长等待时间(ms)
mongoOptions.setMaxWaitTime(5000);
Mongo mongo = new Mongo(addrs, mongoOptions);
mongo.setReadPreference(ReadPreference.secondaryPreferred());
db=mongo.getDB(dbName);
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (MongoException e) {
e.printStackTrace();
* 在项目启动时调用该方法,初始化dbMap信息
public static void initDBMap(){
dbMap=new HashMap&String,com.mongodb.DB&();
//初始化docinfo库
String docinfoIp=Constants.rb.getString("mongo."+Constants.MONGO_DB_DOCINFO+".ip");
String docinfoPort=Constants.rb.getString("mongo."+Constants.MONGO_DB_DOCINFO+".port");
String docinfoConnections=Constants.rb.getString("mongo."+Constants.MONGO_DB_DOCINFO+".connections");
com.mongodb.DB docinfoDb=findDB(Constants.MONGO_DB_DOCINFO,docinfoIp,docinfoPort,Integer.parseInt(docinfoConnections));
dbMap.put(Constants.MONGO_DB_DOCINFO,docinfoDb);
//初始化doctext库
String doctextIp=Constants.rb.getString("mongo."+Constants.MONGO_DB_DOCTEXT+".ip");
String doctextPort=Constants.rb.getString("mongo."+Constants.MONGO_DB_DOCTEXT+".port");
String doctextConnections=Constants.rb.getString("mongo."+Constants.MONGO_DB_DOCTEXT+".connections");
com.mongodb.DB doctextDb=findDB(Constants.MONGO_DB_DOCTEXT,doctextIp,doctextPort,Integer.parseInt(doctextConnections));
dbMap.put(Constants.MONGO_DB_DOCTEXT,doctextDb);
//初始化snapshot库
String snapshotIp=Constants.rb.getString("mongo."+Constants.MONGO_DB_SNAPSHOT+".ip");
String snapshotPort=Constants.rb.getString("mongo."+Constants.MONGO_DB_SNAPSHOT+".port");
String snapshotConnections=Constants.rb.getString("mongo."+Constants.MONGO_DB_SNAPSHOT+".connections");
com.mongodb.DB snapshotDb=findDB(Constants.MONGO_DB_SNAPSHOT,snapshotIp,snapshotPort,Integer.parseInt(snapshotConnections));
dbMap.put(Constants.MONGO_DB_SNAPSHOT,snapshotDb);
//初始化docreprint库
String docreprintIp=Constants.rb.getString("mongo."+Constants.MONGO_DB_DOCREPRINT+".ip");
String docreprintPort=Constants.rb.getString("mongo."+Constants.MONGO_DB_DOCREPRINT+".port");
String docreprintConnections=Constants.rb.getString("mongo."+Constants.MONGO_DB_DOCREPRINT+".connections");
com.mongodb.DB docreprintDb=findDB(Constants.MONGO_DB_DOCREPRINT,docreprintIp,docreprintPort,Integer.parseInt(docreprintConnections));
dbMap.put(Constants.MONGO_DB_DOCREPRINT,docreprintDb);
//初始化weiboperson库
String weibopersonIp=Constants.rb.getString("mongo."+Constants.MONGO_DB_WEIBOPERSON+".ip");
String weibopersonPort=Constants.rb.getString("mongo."+Constants.MONGO_DB_WEIBOPERSON+".port");
String weibopersonConnections=Constants.rb.getString("mongo."+Constants.MONGO_DB_WEIBOPERSON+".connections");
com.mongodb.DB weibopersonDb=findDB(Constants.MONGO_DB_WEIBOPERSON,weibopersonIp,weibopersonPort,Integer.parseInt(weibopersonConnections));
dbMap.put(Constants.MONGO_DB_WEIBOPERSON,weibopersonDb);
* @param dbName数据库名称
* @return com.mongodb.DB
public static com.mongodb.DB getDB(String dbName){
com.mongodb.DB db=dbMap.get(dbName);
* 关闭mysql数据库连接
* @param conn
public static void closeConnection(Connection conn) {
if (conn != null) {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
public static void closeStatement(Statement ps) {
if (null != ps) {
ps.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
public static void closeResultSet(ResultSet rs) {
if (null != rs) {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
public static void dispose(Connection con, Statement ps, ResultSet rs) {
closeResultSet(rs);
closeStatement(ps);
closeConnection(con);
浏览: 30766 次
来自: 武汉
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'

我要回帖

更多关于 java 读取dbf文件 的文章

 

随机推荐