站内搜索
JsonHelper帮助类,Javabean,Map,json字符串
import java.lang.reflect.Method; import java.text.ParseException; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import org.json.JSONException; import org.json.JSONObject; public class JsonHelper { /** * 将Javabean转换为Map * * @param javaBean * @return Map对象 */ public static Map toMap(Object javaBean) { Map result = new HashMap(); Method[] methods = javaBean.getClass().getDeclaredMethods(); for (Method method : methods) { try { if (method.getName().startsWith("get")) { String field = method.getName(); field = field.substring(field.indexOf("get") + 3); field = field.toLowerCase().charAt(0) + field.substring(1); Object value = method.invoke(javaBean, (Object[]) null); result.put(field, null == value ? "" : value.toString()); } } catch (Exception e) { e.printStackTrace(); } } return result; } /** * 将Json对象转换成Map * * @param json字符串 * @return Map对象 * @throws JSONException */ public static Map toMap(String jsonString) throws JSONException { JSONObject jsonObject = new JSONObject(jsonString); Map result = new HashMap(); Iterator iterator = jsonObject.keys(); String key = null; String value = null; while (iterator.hasNext()) { key = (String) iterator.next(); value = jsonObject.getString(key); result.put(key, value); } return result; } /** * 将JavaBean转换成JSONObject(通过Map中转) * * @param bean * @return json对象 */ public static JSONObject toJSON(Object bean) { return new JSONObject(toMap(bean)); } /** * 将Map转换成Javabean * * @param javabean * @param Map数据 * @return Object对象 */ public static Object toJavaBean(Object javabean, Map data) { Method[] methods = javabean.getClass().getDeclaredMethods(); for (Method method : methods) { try { if (method.getName().startsWith("set")) { String field = method.getName(); field = field.substring(field.indexOf("set") + 3); field = field.toLowerCase().charAt(0) + field.substring(1); method.invoke(javabean, new Object[] { data.get(field) }); } } catch (Exception e) { } } return javabean; } /** * JSONObject到JavaBean * * @param bean * @return json对象 * @throws json解析异常 * @throws JSONException */ public static void toJavaBean(Object javabean, String jsonString) throws ParseException, JSONException { JSONObject jsonObject = new JSONObject(jsonString); Map map = toMap(jsonObject.toString()); toJavaBean(javabean, map); } }
执行POST提交
private string PostWebRequest(string postUrl, string paramData) { string ret = "提交失败"; try { Encoding dataEncode = Encoding.UTF8; byte[] byteArray = dataEncode.GetBytes(paramData); //转化 HttpWebRequest webReq = (HttpWebRequest) WebRequest.Create(new Uri(postUrl)); webReq.Method = "POST"; webReq.ContentType = "application/x-www-form-urlencoded"; webReq.ContentLength = byteArray.Length; Stream newStream = webReq.GetRequestStream(); newStream.Write(byteArray, 0, byteArray.Length); //写入参数 newStream.Close(); HttpWebResponse response = (HttpWebResponse) webReq.GetResponse(); StreamReader sr = new StreamReader(response.GetResponseStream(), dataEncode); ret = sr.ReadToEnd(); sr.Close(); response.Close(); newStream.Close(); } catch(Exception e) { ret = "提交异常" + e.Message; } return ret; } 调用方法 PostWebRequest("http://blog.clump.cc/work/", "json=" + WebUtil.UrlEncode(JsonHelper.ObjectToJSON(实体对象)));
GCD 并发队列,串行队列
// dispatch_sync : 同步,不具备开启线程的能力 // dispatch_async : 异步,具备开启线程的能力 // 并发队列 :多个任务可以同时执行 // 串行队列 :一个任务执行完后,再执行下一个任务 // Foundation : OC // Core Foundation : C语言 // Foundation和Core Foundation框架的数据类型可以互相转换的 //NSString *str = @"123"; // Foundation //CFStringRef str2 = (__bridge CFStringRef)str; // Core Foundation //NSString *str3 = (__bridge NSString *)str2; // CFArrayRef ---- NSArray // CFDictionaryRef ---- NSDictionary // CFNumberRef ---- NSNumber // Core Foundation中手动创建的数据类型,都需要手动释放 // CFArrayRef array = CFArrayCreate(NULL, NULL, 10, NULL); // CFRelease(array); // // // CGPathRef path = CGPathCreateMutable(); // CGPathRetain(path); // // CGPathRelease(path); // CGPathRelease(path); /** 凡是函数名中带有create\copy\new\retain等字眼, 都应该在不需要使用这个数据的时候进行release GCD的数据类型在ARC环境下不需要再做release CF(Core Foundation)的数据类型在ARC\MRC环境下都需要再做release */ #import "ViewController.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; } - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { [self asyncSerialQueue]; } /** * async -- 并发队列(最常用) * 会不会创建线程:会,一般同时开多条 * 任务的执行方式:并发执行 */ - (void)asyncGlobalQueue { // 获得全局的并发队列 dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); // 将 任务 添加 全局队列 中去 异步 执行 dispatch_async(queue, ^{ NSLog(@"-----下载图片1---%@", [NSThread currentThread]); }); dispatch_async(queue, ^{ NSLog(@"-----下载图片2---%@", [NSThread currentThread]); }); dispatch_async(queue, ^{ NSLog(@"-----下载图片3---%@", [NSThread currentThread]); }); dispatch_async(queue, ^{ NSLog(@"-----下载图片4---%@", [NSThread currentThread]); }); dispatch_async(queue, ^{ NSLog(@"-----下载图片5---%@", [NSThread currentThread]); }); } /** * async -- 串行队列(有时候用) * 会不会创建线程:会,一般只开1条线程 * 任务的执行方式:串行执行(一个任务执行完毕后再执行下一个任务) */ - (void)asyncSerialQueue { // 1.创建一个串行队列 dispatch_queue_t queue = dispatch_queue_create("cn.heima.queue", NULL); // 2.将任务添加到串行队列中 异步 执行 dispatch_async(queue, ^{ NSLog(@"-----下载图片1---%@", [NSThread currentThread]); }); dispatch_async(queue, ^{ NSLog(@"-----下载图片2---%@", [NSThread currentThread]); }); dispatch_async(queue, ^{ NSLog(@"-----下载图片3---%@", [NSThread currentThread]); }); dispatch_async(queue, ^{ NSLog(@"-----下载图片4---%@", [NSThread currentThread]); }); dispatch_async(queue, ^{ NSLog(@"-----下载图片5---%@", [NSThread currentThread]); }); // 3.非ARC,需要释放创建的队列 // dispatch_release(queue); } /** * async -- 主队列(很常用) */ - (void)asyncMainQueue { // 1.主队列(添加到主队列中的任务,都会自动放到主线程中去执行) dispatch_queue_t queue = dispatch_get_main_queue(); // 2.添加 任务 到主队列中 异步 执行 dispatch_async(queue, ^{ NSLog(@"-----下载图片1---%@", [NSThread currentThread]); }); dispatch_async(queue, ^{ NSLog(@"-----下载图片2---%@", [NSThread currentThread]); }); dispatch_async(queue, ^{ NSLog(@"-----下载图片3---%@", [NSThread currentThread]); }); dispatch_async(queue, ^{ NSLog(@"-----下载图片4---%@", [NSThread currentThread]); }); dispatch_async(queue, ^{ NSLog(@"-----下载图片5---%@", [NSThread currentThread]); }); } /** * sync -- 主队列(不能用---会卡死) */ - (void)syncMainQueue { NSLog(@"syncMainQueue----begin--"); // 1.主队列(添加到主队列中的任务,都会自动放到主线程中去执行) dispatch_queue_t queue = dispatch_get_main_queue(); // 2.添加 任务 到主队列中 异步 执行 dispatch_sync(queue, ^{ NSLog(@"-----下载图片1---%@", [NSThread currentThread]); }); dispatch_sync(queue, ^{ NSLog(@"-----下载图片2---%@", [NSThread currentThread]); }); dispatch_sync(queue, ^{ NSLog(@"-----下载图片3---%@", [NSThread currentThread]); }); NSLog(@"syncMainQueue----end--"); } /**-------------------------------------华丽的分割线-----------------------------------------------------**/ /** * sync -- 并发队列 * 会不会创建线程:不会 * 任务的执行方式:串行执行(一个任务执行完毕后再执行下一个任务) * 并发队列失去了并发的功能 */ - (void)syncGlobalQueue { // 获得全局的并发队列 dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); // 将 任务 添加到 全局并发队列 中 同步 执行 dispatch_sync(queue, ^{ NSLog(@"-----下载图片1---%@", [NSThread currentThread]); }); dispatch_sync(queue, ^{ NSLog(@"-----下载图片2---%@", [NSThread currentThread]); }); dispatch_sync(queue, ^{ NSLog(@"-----下载图片3---%@", [NSThread currentThread]); }); dispatch_sync(queue, ^{ NSLog(@"-----下载图片4---%@", [NSThread currentThread]); }); dispatch_sync(queue, ^{ NSLog(@"-----下载图片5---%@", [NSThread currentThread]); }); } /** * sync -- 串行队列 * 会不会创建线程:不会 * 任务的执行方式:串行执行(一个任务执行完毕后再执行下一个任务) */ - (void)syncSerialQueue { // 创建一个串行队列 dispatch_queue_t queue = dispatch_queue_create("cn.heima.queue", NULL); // 将 任务 添加到 串行队列 中 同步 执行 dispatch_sync(queue, ^{ NSLog(@"-----下载图片1---%@", [NSThread currentThread]); }); dispatch_sync(queue, ^{ NSLog(@"-----下载图片2---%@", [NSThread currentThread]); }); dispatch_sync(queue, ^{ NSLog(@"-----下载图片3---%@", [NSThread currentThread]); }); dispatch_sync(queue, ^{ NSLog(@"-----下载图片4---%@", [NSThread currentThread]); }); dispatch_sync(queue, ^{ NSLog(@"-----下载图片5---%@", [NSThread currentThread]); }); } @end
MSSQL MySQL 跨服务器关联 联合查询
1、在MSSYQ 执行如下代码创建MySQL链接
EXEC master.dbo.sp_addlinkedserver @server = N'MYSQL', @srvproduct=N'MySQL', @provider=N'MSDASQL', @provstr=N'DRIVER={MySQL ODBC 5.3 ANSI Driver}; SERVER=192.168.1.122; DATABASE=数据库表名; USER=root; PASSWORD=123456; OPTION=3'
2、安装MySQL odbc驱动
官方网站下载驱动mysql-connector-odbc-5.3.4-winx64.msi
3、在MSSQL查询
SELECT * FROM OPENQUERY (MYSQL,'select * from a' ) 简单查询 SELECT top 10 * FROM OPENQUERY (MYSQL,'select * from excl' ) as aa inner join UserInfo as ui on ui.Phone=aa.Phone order by id desc 联合查询
JS Date 一秒一秒累加
方法1: var NowTime = new Date((new Date("2015-08-10 12:01:01".replace(/-/g, "/"))).getTime() + 1 * 1000); 方法2: function dateSeconds(time, num) { var d = new Date(time.substring(0, 4), time.substring(5, 7) - 1, time.substring(8, 10), time.substring(11, 13), time.substring(14, 16), time.substring(17, 19)); d.setTime(d.getTime() + num * 1000); //alert(d.toLocaleString()); return d.getFullYear() + "-" + (d.getMonth() + 1) + "-" + d.getDate() + " " + d.getHours() + ":" + d.getMinutes() + ":" + d.getSeconds(); } var nowTime = new Date(Date.parse(dateSeconds("2015-08-10 12:01:01", 1).replace(/-/g, "/"))); alert(nowTime.toLocaleString());
C#异步通信中回调函数AsyncCallback如何传递参数
var url = "http://blog.clump.cc?name=aaa" HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest; request.BeginGetResponse(new AsyncCallback(Compleate), request); private static void Compleate(IAsyncResult asyncResult) //回调方法 { if (asyncResult == null) { return; } HttpWebRequest req = (asyncResult.AsyncState as HttpWebRequest); HttpWebResponse res = req.EndGetResponse(asyncResult) as HttpWebResponse; StreamReader reader = new StreamReader(res.GetResponseStream()); string result = reader.ReadToEnd();//输出的结果 }