c# JsonHelper类
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Web.Script.Serialization;
using System.Data.Common;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters; namespace MES.Common
{
public class JSONHelper
{
/// <summary>
/// 将JSON转换为指定类型的对象
/// </summary>
/// <typeparam name="T">对象类型</typeparam>
/// <param name="json">json字符串</param>
/// <returns></returns>
public static T ConvertToObject<T>(string json)
{
var jsetting = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore };
//jsetting.DefaultValueHandling = DefaultValueHandling.Include;
return JsonConvert.DeserializeObject<T>(json, jsetting);
} /// <summary>
/// 类对像转换成json格式
/// </summary>
/// <returns></returns>
public static string ToJson(object t)
{
return new JavaScriptSerializer().Serialize(t);
} /// <summary>
/// 类对像转换成json格式
/// </summary>
/// <returns></returns>
public static string ToDateJson(object t)
{
IsoDateTimeConverter timeFormat = new IsoDateTimeConverter();
timeFormat.DateTimeFormat = "yyyy-MM-dd";
return JsonConvert.SerializeObject(t, Newtonsoft.Json.Formatting.Indented, timeFormat);
}
public static string ToPageJson(DataTable t, int startIndex, int endIndex)
{
IsoDateTimeConverter timeFormat = new IsoDateTimeConverter();
timeFormat.DateTimeFormat = "yyyy-MM-dd";
int rowCount = t.Rows.Count;
DataRow[] jsonDT = t.Select("rn >= " + startIndex + " and rn <=" + endIndex);
DataTable dt = t.Clone();
foreach (var item in jsonDT)
{
dt.ImportRow(item);
} DataView dv = dt.DefaultView;
dv.Sort = "REPORT_DATE desc";
DataTable dt2 = dv.ToTable();
string json = JsonConvert.SerializeObject(dt2, Newtonsoft.Json.Formatting.Indented, timeFormat);
return "{\"total\": " + rowCount + ",\"rows\":" + json + "}";
} /// <summary>
/// 类对像转换成json格式
/// </summary>
/// <returns></returns>
public static string ToDateTimeJson(object t)
{
IsoDateTimeConverter timeFormat = new IsoDateTimeConverter();
timeFormat.DateTimeFormat = "yyyy-MM-dd hh:mm:ss";
return JsonConvert.SerializeObject(t, Newtonsoft.Json.Formatting.Indented, timeFormat);
} /// <summary>
/// 类对像转换成json格式
/// </summary>
/// <returns></returns>
public static string To24DateTimeJson(object t)
{
IsoDateTimeConverter timeFormat = new IsoDateTimeConverter();
timeFormat.DateTimeFormat = "yyyy-MM-dd HH:mm:ss";
return JsonConvert.SerializeObject(t, Newtonsoft.Json.Formatting.Indented, timeFormat);
} /// <summary>
/// json格式转换
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="strJson"></param>
/// <returns></returns>
public static T FromJson<T>(string strJson) where T : class
{
return new JavaScriptSerializer().Deserialize<T>(strJson);
} /// <summary>
/// 获取树格式对象的JSON
/// </summary>
/// <param name="commandText">commandText</param>
/// <param name="id">ID的字段名</param>
/// <param name="pid">PID的字段名</param>
/// <returns></returns>
public static string GetArrayJSON(string commandText, string id, string pid)
{
var o = ArrayToTreeData(commandText, id, pid);
return ToJson(o);
}
/// <summary>
/// 获取树格式对象的JSON
/// </summary>
/// <param name="command">command</param>
/// <param name="id">ID的字段名</param>
/// <param name="pid">PID的字段名</param>
/// <returns></returns>
public static string GetArrayJSON(DbCommand command, string id, string pid)
{
var o = ArrayToTreeData(command, id, pid);
return ToJson(o);
} public static string GetArrayTreeAttrJSON(DbCommand command, string id, string pid)
{
var o = ArrayToTreeAttrData(command, id, pid);
return ToJson(o);
} /// <summary>
/// 获取树格式对象的JSON
/// </summary>
/// <param name="dt">存放树数据的datatable</param>
/// <param name="id">ID的字段名</param>
/// <param name="pid">PID的字段名</param>
/// <returns></returns>
public static string GetArrayJSON(DataTable dt, string id, string pid)
{
var o = DatatableToTreeData(dt, id, pid);
return ToJson(o);
}
/// <summary>
/// 获取树格式对象的JSON
/// </summary>
/// <param name="list">线性数据</param>
/// <param name="id">ID的字段名</param>
/// <param name="pid">PID的字段名</param>
/// <returns></returns>
public static string GetArrayJSON(IList<Hashtable> list, string id, string pid)
{
var o = ArrayToTreeData(list, id, pid);
return ToJson(o);
} /// <summary>
/// 获取树格式对象
/// </summary>
/// <param name="command">command</param>
/// <param name="id">id的字段名</param>
/// <param name="pid">pid的字段名</param>
/// <returns></returns>
public static object ArrayToTreeData(DbCommand command, string id, string pid)
{
var reader = DbHelper.Db.ExecuteReader(command);
var list = DbReaderToHash(reader);
return JSONHelper.ArrayToTreeData(list, id, pid);
} /// <summary>
/// 获取树格式对象
/// </summary>
/// <param name="command">command</param>
/// <param name="id">id的字段名</param>
/// <param name="pid">pid的字段名</param>
/// <returns></returns>
public static object ArrayToTreeAttrData(DbCommand command, string id, string pid)
{
var reader = DbHelper.Db.ExecuteReader(command);
var list = DbReaderToHash(reader);
return JSONHelper.ArrayToTreeAttrData(list, id, pid);
} /// <summary>
/// 获取树格式对象
/// </summary>
/// <param name="commandText">sql</param>
/// <param name="id">ID的字段名</param>
/// <param name="pid">PID的字段名</param>
/// <returns></returns>
public static object ArrayToTreeData(string commandText, string id, string pid)
{
var reader = DbHelper.Db.ExecuteReader(commandText);
var list = DbReaderToHash(reader);
return JSONHelper.ArrayToTreeData(list, id, pid);
} /// <summary>
/// 获取树格式对象
/// </summary>
/// <param name="list">线性数据</param>
/// <param name="id">ID的字段名</param>
/// <param name="pid">PID的字段名</param>
/// <returns></returns>
public static object ArrayToTreeData(IList<Hashtable> list, string id, string pid)
{
var h = new Hashtable(); //数据索引
var r = new List<Hashtable>(); //数据池,要返回的
foreach (var item in list)
{
if (!item.ContainsKey(id)) continue;
h[item[id].ToString()] = item;
}
foreach (var item in list)
{
if (!item.ContainsKey(id)) continue;
if (!item.ContainsKey(pid) || item[pid] == null || !h.ContainsKey(item[pid].ToString()))
{
r.Add(item);
}
else
{
var pitem = h[item[pid].ToString()] as Hashtable;
if (!pitem.ContainsKey("children"))
pitem["children"] = new List<Hashtable>();
var children = pitem["children"] as List<Hashtable>;
children.Add(item);
}
}
return r;
} /// <summary>
/// 获取树格式对象
/// </summary>
/// <param name="list">线性数据</param>
/// <param name="id">ID的字段名</param>
/// <param name="pid">PID的字段名</param>
/// <returns></returns>
public static object ArrayToTreeAttrData(IList<Hashtable> list, string id, string pid)
{
IList<Hashtable> listNew = new List<Hashtable>();
foreach (var item in list)
{
var h1 = new Hashtable();
var h2 = new Hashtable();
foreach (var i in item.Keys)
{
if (i.ToString() == "ID" || i.ToString() == "TEXT")
{
h1[i] = item[i];
}
else if (i.ToString() == pid || i.ToString() == id)
{
h1[i] = item[i];
h2[i] = item[i];
}
else if (i.ToString() == "ISCHECK")
{
h1[i] = item[i].ToString() == "1" ? true : false;
}
else
{
h2[i] = item[i];
}
}
if (h2.Count > 0)
{
h1["attributes"] = h2;
} listNew.Add(h1);
} var h = new Hashtable(); //数据索引
var r = new List<Hashtable>(); //数据池,要返回的
foreach (var item in listNew)
{
if (!item.ContainsKey(id)) continue;
h[item[id].ToString()] = item;
}
foreach (var item in listNew)
{
if (!item.ContainsKey(id)) continue;
if (!item.ContainsKey(pid) || item[pid] == null || !h.ContainsKey(item[pid].ToString()))
{
r.Add(item); //去除根节点的checked属性
item.Remove("ISCHECK");
}
else
{
var pitem = h[item[pid].ToString()] as Hashtable;
if (!pitem.ContainsKey("children"))
pitem["children"] = new List<Hashtable>();
var children = pitem["children"] as List<Hashtable>;
children.Add(item); //如果是父节点,则去除checked属性
pitem.Remove("ISCHECK");
}
}
return r;
} /// <summary>
/// 执行SQL 返回json
/// </summary>
/// <param name="command"></param>
/// <returns></returns>
public static string ExecuteCommandToJSON(DbCommand command)
{
var o = ExecuteReaderToHash(command);
return ToJson(o);
} /// <summary>
/// 执行SQL 返回json
/// </summary>
/// <param name="commandText"></param>
/// <returns></returns>
public static string ExecuteCommandToJSON(string commandText)
{
var o = ExecuteReaderToHash(commandText);
return ToJson(o);
} /// <summary>
/// 将db reader转换为Hashtable列表
/// </summary>
/// <param name="commandText"></param>
/// <returns></returns>
public static List<Hashtable> ExecuteReaderToHash(string commandText)
{
var reader = DbHelper.Db.ExecuteReader(commandText);
return DbReaderToHash(reader);
} /// <summary>
/// 将db reader转换为Hashtable列表
/// </summary>
/// <param name="command"></param>
/// <returns></returns>
public static List<Hashtable> ExecuteReaderToHash(DbCommand command)
{
var reader = DbHelper.Db.ExecuteReader(command);
return DbReaderToHash(reader);
} /// <summary>
/// 将db reader转换为Hashtable列表
/// </summary>
/// <param name="reader"></param>
/// <returns></returns>
private static List<Hashtable> DbReaderToHash(IDataReader reader)
{
var list = new List<Hashtable>();
while (reader.Read())
{
var item = new Hashtable(); for (var i = 0; i < reader.FieldCount; i++)
{
var name = reader.GetName(i).ToUpper();
var value = reader[i];
item[name] = value;
}
list.Add(item);
}
return list;
} /// <summary>
/// DataTable转树对象格式
/// </summary>
/// <param name="commandText">sql</param>
/// <param name="id">ID的字段名</param>
/// <param name="pid">PID的字段名</param>
/// <returns></returns>
public static object DatatableToTreeData(DataTable dtConvert, string id, string pid)
{
var list = DatatableToHash(dtConvert);
return JSONHelper.ArrayToTreeData(list, id, pid);
} /// <summary>
/// 将datatable转换为Hashtable列表
/// </summary>
/// <param name="dtConvert"></param>
/// <returns></returns>
private static List<Hashtable> DatatableToHash(DataTable dtConvert)
{
var list = new List<Hashtable>(); int j; foreach (DataRow dr in dtConvert.Rows)
{
var item = new Hashtable();
j = 0; foreach (DataColumn dc in dtConvert.Columns)
{
var name = dc.ColumnName;
var value = dr[j]; item[name] = value; j++;
}
list.Add(item);
}
return list;
} #region Datatable转换为Json
/// <summary>
/// Datatable转换为Json
/// </summary>
public static string ToJson(DataTable dt)
{
if (dt.Rows.Count > 0)
{
StringBuilder jsonString = new StringBuilder();
jsonString.Append("[");
DataRowCollection drc = dt.Rows;
for (int i = 0; i < drc.Count; i++)
{
jsonString.Append("{");
for (int j = 0; j < dt.Columns.Count; j++)
{
string strKey = dt.Columns[j].ColumnName;
string strValue = drc[i][j].ToString(); Type type = dt.Columns[j].DataType;
jsonString.Append("\"" + strKey + "\":");
strValue = StringFormat(strValue, type);
if (j < dt.Columns.Count - 1)
jsonString.Append(strValue + ",");
else
jsonString.Append(strValue);
}
jsonString.Append("},");
}
jsonString.Remove(jsonString.Length - 1, 1);
jsonString.Append("]");
return jsonString.ToString();
}
else
return "[]";
} /// <summary>
/// DataTable转换为Json
/// </summary>
public static string ToJson(DataTable dt, string jsonName)
{
StringBuilder Json = new StringBuilder();
if (string.IsNullOrEmpty(jsonName))
jsonName = dt.TableName;
Json.Append("{\"" + jsonName + "\":[");
if (dt.Rows.Count > 0)
{
for (int i = 0; i < dt.Rows.Count; i++)
{
Json.Append("{");
for (int j = 0; j < dt.Columns.Count; j++)
{
Type type = dt.Rows[i][j].GetType();
Json.Append("\"" + dt.Columns[j].ColumnName.ToString() + "\":" + StringFormat(dt.Rows[i][j].ToString(), type));
if (j < dt.Columns.Count - 1)
Json.Append(",");
}
Json.Append("}");
if (i < dt.Rows.Count - 1)
Json.Append(",");
}
}
Json.Append("]}");
return Json.ToString();
}
#endregion #region DataSet转换成Json格式
/// <summary>
/// DataSet转换成Json格式
/// </summary>
/// <param name="ds">DataSet</param>
/// <returns></returns>
public static string Dataset2Json(DataSet ds, int total = -1)
{
StringBuilder json = new StringBuilder();
if (ds != null)
{
foreach (DataTable dt in ds.Tables)
{
json.Append("{\"total\":");
if (total == -1)
{
json.Append(dt.Rows.Count);
}
else
{
json.Append(total);
}
json.Append(",\"rows\":[");
json.Append(DataTable2Json(dt));
json.Append("]}");
}
}
else
{
json.Append("{\"total\":");
json.Append("0");
json.Append(",\"rows\":[");
json.Append("]}");
} return json.ToString();
}
#endregion #region dataTable转换成Json格式
/// <summary>
/// dataTable转换成Json格式
/// </summary>
/// <param name="dt"></param>
/// <returns></returns>
public static string DataTable2Json(DataTable dt)
{
StringBuilder jsonBuilder = new StringBuilder(); for (int i = 0; i < dt.Rows.Count; i++)
{
jsonBuilder.Append("{");
for (int j = 0; j < dt.Columns.Count; j++)
{
jsonBuilder.Append("\"");
jsonBuilder.Append(dt.Columns[j].ColumnName);
jsonBuilder.Append("\":\"");
jsonBuilder.Append(dt.Rows[i][j].ToString());
jsonBuilder.Append("\",");
}
if (dt.Columns.Count > 0)
{
jsonBuilder.Remove(jsonBuilder.Length - 1, 1);
}
jsonBuilder.Append("},");
}
if (dt.Rows.Count > 0)
{
jsonBuilder.Remove(jsonBuilder.Length - 1, 1);
} return jsonBuilder.ToString();
}
#endregion dataTable转换成Json格式 #region treegrid分页
/// <summary>
/// DataSet转换成Json格式
/// </summary>
/// <param name="ds">DataSet</param>
/// <returns></returns>
public static string DatasetToTreeGridJson(DataSet ds, int total = -1)
{ StringBuilder json = new StringBuilder();
if (ds != null)
{
foreach (DataTable dt in ds.Tables)
{
json.Append("{\"total\":");
if (total == -1)
{
json.Append(dt.Rows.Count);
}
else
{
json.Append(total);
}
json.Append(",\"rows\":[");
json.Append(DataTableToTreegridJson(dt));
json.Append("]}");
}
}
else
{
json.Append("{\"total\":");
json.Append("0");
json.Append(",\"rows\":[");
json.Append("]}");
} return json.ToString();
} /// <summary>
/// 根据父级Id找到对应所有子节点数据
/// </summary>
/// <param name="pid">父级id</param>
/// <param name="categoryid">分类id</param>
/// <returns></returns>
public static DataTable GetDataFromParentId(string pid, string categoryid)
{
StringBuilder sql = new StringBuilder();
sql.Append(" SELECT *");
sql.Append(" FROM A_DICS T");
sql.AppendFormat(" START WITH T.PARENTID ='{0}'", pid);
sql.AppendFormat(" AND CATEGORYID = {0}", categoryid);
sql.Append(" CONNECT BY PRIOR T.KEYID = T.PARENTID"); DataSet ds = DbHelper.Db.Db.ExecuteDataSet(CommandType.Text, sql.ToString());
return ds.Tables[0];
} /// <summary>
/// 将datatable转成treegrid分页形式的json
/// </summary>
/// <param name="dt"></param>
/// <returns></returns>
public static string DataTableToTreegridJson(DataTable dt)
{
StringBuilder jsonBuilder = new StringBuilder();
DataTable dtChildren = null;
for (int i = 0; i < dt.Rows.Count; i++)
{
//根据父节点查询出对应子节点的数据
dtChildren = GetDataFromParentId(dt.Rows[i]["KEYID"].ToString(), dt.Rows[i]["CATEGORYID"].ToString());
//父节点开始 jsonBuilder.Append("{");
for (int j = 0; j < dt.Columns.Count; j++)
{ if (dt.Columns[j].ColumnName.ToLower() == "keyid")
{
jsonBuilder.Append("\"");
jsonBuilder.Append("id");
jsonBuilder.Append("\":\"");
jsonBuilder.Append(dt.Rows[i][j].ToString());
jsonBuilder.Append("\",");
}
else if (dt.Rows[i][j].ToString().IndexOf("\\") >= 0)
{
jsonBuilder.Append("\"");
jsonBuilder.Append(dt.Columns[j].ColumnName);
jsonBuilder.Append("\":\"");
jsonBuilder.Append(dt.Rows[i][j].ToString().Replace("\\", "\\\\"));
jsonBuilder.Append("\",");
}
else
{
jsonBuilder.Append("\"");
jsonBuilder.Append(dt.Columns[j].ColumnName);
jsonBuilder.Append("\":\"");
jsonBuilder.Append(dt.Rows[i][j].ToString());
jsonBuilder.Append("\",");
} }
if (dt.Columns.Count > 0)
{
jsonBuilder.Remove(jsonBuilder.Length - 1, 1);
}
jsonBuilder.Append("},"); //循环添加子节点数据
for (int k = 0; k < dtChildren.Rows.Count; k++)
{
jsonBuilder.Append("{");
for (int l = 0; l < dtChildren.Columns.Count; l++)
{
jsonBuilder.Append("\"");
if (dtChildren.Columns[l].ColumnName.ToLower() == "keyid")
{
jsonBuilder.Append("id");
jsonBuilder.Append("\":\"");
jsonBuilder.Append(dtChildren.Rows[k][l].ToString());
jsonBuilder.Append("\",");
}
else if (dtChildren.Columns[l].ColumnName.ToLower() == "parentid" && dtChildren.Rows[k][l].ToString() != "0")
{
jsonBuilder.Append("_parentId");
jsonBuilder.Append("\":\"");
jsonBuilder.Append(dtChildren.Rows[k][l].ToString());
jsonBuilder.Append("\",");
}
else if (dtChildren.Rows[k][l].ToString().IndexOf("\\") >= 0)
{
jsonBuilder.Append(dtChildren.Columns[l].ColumnName);
jsonBuilder.Append("\":\"");
jsonBuilder.Append(dtChildren.Rows[k][l].ToString().Replace("\\","\\\\"));
jsonBuilder.Append("\",");
}
else
{
jsonBuilder.Append(dtChildren.Columns[l].ColumnName);
jsonBuilder.Append("\":\"");
jsonBuilder.Append(dtChildren.Rows[k][l].ToString());
jsonBuilder.Append("\",");
}
}
if (dt.Columns.Count > 0)
{
jsonBuilder.Remove(jsonBuilder.Length - 1, 1);
}
jsonBuilder.Append("},");
} } if (dt.Rows.Count > 0)
{
jsonBuilder.Remove(jsonBuilder.Length - 1, 1);
} return jsonBuilder.ToString();
}
#endregion /// <summary>
/// 格式化字符型、日期型、布尔型
/// </summary>
public static string StringFormat(string str, Type type)
{
if (type == typeof(string))
{
str = StringFilter(str);
str = "\"" + str + "\"";
}
else if (type == typeof(DateTime) || type == typeof(DateTime?))
{
str = "\"" + str + "\"";
}
else if (type == typeof(bool))
{
str = str.ToLower();
}
else if (type == typeof(Guid))
{
str = "\"" + str + "\"";
}
else if (type != typeof(string) && string.IsNullOrEmpty(str))
{
str = "\"" + str + "\"";
}
return str;
} /// <summary>
/// 过滤字符串
/// </summary>
public static string StringFilter(string str)
{
StringBuilder sb = new StringBuilder();
for (int i = 0; i < str.Length; i++)
{
char c = str.ToCharArray()[i];
switch (c)
{
case '\"':
sb.Append("\\\""); break;
case '\\':
sb.Append("\\\\"); break;
case '/':
sb.Append("\\/"); break;
case '\b':
sb.Append("\\b"); break;
case '\f':
sb.Append("\\f"); break;
case '\n':
sb.Append("\\n"); break;
case '\r':
sb.Append("\\r"); break;
case '\t':
sb.Append("\\t"); break;
default:
sb.Append(c); break;
}
}
return sb.ToString();
}
}
}
c# JsonHelper类的更多相关文章
- .net Json JavaScriptSerializer JsonHelper类
结合.net 的JavaScriptSerializer 类实现Json数据处理 调用1: Model.Users m = BLL.UsersBLL.GetUserById(Convert.ToInt ...
- asp.net的JSONHelper 类
调用方法: ){ jsons = json.ToString();}else{ jsons = @"{success:false}";}return jsons; JS ...
- JavaScriptSerializer的实现-常用JsonHelper类
最近开始自己写自己的项目了,终于鼓起勇气迈出了自己认为的这一大步! 先来通用的helper类和大家分享一下 ,第一个是Object转为json序列的类,这个网上有很多,但我实践了一下大部分都不能用的, ...
- JsonHelper类(序列化和反序列化辅助类)
1: using System; 2: using System.Collections.Generic; 3: using System.Linq; 4: using System.Web; ...
- Java类的继承与多态特性-入门笔记
相信对于继承和多态的概念性我就不在怎么解释啦!不管你是.Net还是Java面向对象编程都是比不缺少一堂课~~Net如此Java亦也有同样的思想成分包含其中. 继承,多态,封装是Java面向对象的3大特 ...
- C#开发微信门户及应用(26)-公众号微信素材管理
微信公众号最新修改了素材的管理模式,提供了两类素材的管理:临时素材和永久素材的管理,原先的素材管理就是临时素材管理,永久素材可以永久保留在微信服务器上,微信素材可以在上传后,进行图片文件或者图文消息的 ...
- CYQ.Data 快速开发EasyUI
EasyUI: 前端UI框架之一, 相对ExtJs来说,算是小了,这两天,抽空看了下EasyUI的相关知识,基本上可以和大伙分享一下: 官网: http://www.jeasyui.com/ 学习的话 ...
- Android开发中的Json字符串与复杂的嵌套对象互转。
Gson 可能是大家都觉得比较简单吧.我发现用JSONObject和网上下载的JSONHelper类使用起来很无语,只能解析简单的单层对象,如果有嵌套的就不能直转转成可用对象了.所以网上找了一会儿,发 ...
- 解决WCF的service端无法使用泛型的问题
思路是将其序列化(比较笨的方法……) 1.引入Newtonsoft.json.dll 2.服务端序列化:return JsonConvert.SerializeObject(result); 3.客户 ...
随机推荐
- Ribbon负载均衡策略与自定义配置
Ribbon负载均衡策略 配置 对调用的某个服务启用某种负载策略 1)通过配置文件配置 hello: ribbon: NFLoadBalancerRuleClassName:com.netflix.l ...
- 【算法】转载:Iterative vs. Recursive Approaches
Iterative vs. Recursive Approaches Eyal Lantzman, 5 Nov 2007 CPOL Introduction This arti ...
- c++之——多态性
先看一个例子: #include<iostream> using namespace std; class Liberation { public: Liberation(int a):c ...
- CentOS清除用户登录记录和命令历史方法
清除登陆系统成功的记录 [root@localhost root]# echo > /var/log/wtmp //此文件默认打开时乱码,可查到ip等信息 [root@localhost roo ...
- 一款纯css实现的漂亮导航
今天给大家分享一款纯css实现的漂亮导航.之前为大家分享过jquery实现的个人中心导航菜单,今天这款也是适合放在个人中心.还带来图标,效果不错.一起看下效果图: 在线预览 源码下载 实现的代码. ...
- java Web监听器实现定时发送邮件
首先介绍java定时器(java.util.Timer)有定时执行计划任务的功能,通过设定定时器的间隔时间,会自动在此间隔时间后执行预先安排好的任务(java.util. TimerTask) 由于我 ...
- 深入学习RabbitMQ(四):channel的confirm模式
转自:http://m.blog.csdn.net/article/details?id=54340711 上一篇博客我们介绍了使用RabbitMQ可能会遇到的一个问题,即生产者不知道消息是否真正到达 ...
- jQuery 之正则表达式篇
从本文开始,我将陆续的更新关于jQuery源代码的博客.首先,jQuery源代码分析一直是我的一个计划和追求.查看jQuery源代码,探索大牛们深邃的思想,精神的碰撞.Google 搜索不难发现,探索 ...
- 【mybase】绿色版---mybase非常好用的笔记软件
mybase绿色软件,体积小,解压可以直接使用,PC端非常好用的笔记软件. 包含两个版本: mybase6.5.0 mybase7.0.0 软件下载地址: 链接: http://pan.baidu.c ...
- HBase shell 命令。
HBase shell 命令. 进入hbase shell console$HBASE_HOME/bin/hbase shell如果有kerberos认证,需要事先使用相应的keytab进行一下认证( ...