2014年9月20日
摘要: 一个stmt多个rs进行操作.那么从stmt得到的rs1,必须马上操作此rs1后,才能去得到另外的rs2,再对rs2操作.不能互相交替使用,会引起rs已经关闭错误——Operation not allowed after ResultSet closed.错误的代码如下: stmt=conn.createStatement(); rs=stm...
阅读全文
posted @
2015-10-13 14:58 藤本蔷薇 阅读(205) |
评论 (0) |
编辑 收藏
在 JDK1.5 引入自动装箱和拆箱的机制后,包装类和基本类型之间的转换就更加轻松便利了。
装箱:把基本类型转换成包装类,使其具有对象的性质,又可分为手动装箱和自动装箱
int i= 10; //定义一个int基本类型值
Integer x = new Integer(i); //手动装箱
Integer y = i; //自动装箱
posted @
2015-09-22 20:28 藤本蔷薇 阅读(217) |
评论 (0) |
编辑 收藏
功能:将一个由英文字母组成的字符串转换成指定格式---从右边开始每三个字母用逗号分隔的形式。
请在编辑器中的第 4、10 行将代码填写完整
运行效果: j,aew,kjl,dfx,mop,zdmpublic static void main(String[] args) {
// Java文件名
String fileName = "HelloWorld.jav";
// 邮箱
String email = "laurenyang@imooc.com";
// 判断.java文件名是否正确:合法的文件名应该以.java结尾
/*
参考步骤:
1、获取文件名中最后一次出现"."号的位置
2、根据"."号的位置,获取文件的后缀
3、判断"."号位置及文件后缀名
*/
//获取文件名中最后一次出现"."号的位置
int index = fileName.lastIndexOf('.');
// 获取文件的后缀
String prefix = fileName.substring(index);
// 判断必须包含"."号,且不能出现在首位,同时后缀名为"java"
if (index !=0 && index != -1 && prefix.equals("java")) {
System.out.println("Java文件名正确");
} else {
System.out.println("Java文件名无效");
}
// 判断邮箱格式是否正确:合法的邮箱名中至少要包含"@", 并且"@"是在"."之前
/*
参考步骤:
1、获取文件名中"@"符号的位置
2、获取邮箱中"."号的位置
3、判断必须包含"@"符号,且"@"必须在"."之前
*/
// 获取邮箱中"@"符号的位置
int index2 = email.indexOf("@");
// 获取邮箱中"."号的位置
int index3 = email.indexOf('.');
// 判断必须包含"@"符号,且"@"必须在"."之前
if (index2 != -1 && index3 > index2) {
System.out.println("邮箱格式正确");
} else {
System.out.println("邮箱格式无效");
}
}
字节是计算机存储信息的基本单位,1 个字节等于 8 位, gbk 编码中 1 个汉字字符存储需要 2 个字节,1 个英文字符存储需要 1 个字节。所以我们看到上面的程序运行结果中,每个汉字对应两个字节值,如“学”对应 “-47 -89” ,而英文字母 “J” 对应 “74” 。同时,我们还发现汉字对应的字节值为负数,原因在于每个字节是 8 位,最大值不能超过 127,而汉字转换为字节后超过 127,如果超过就会溢出,以负数的形式显示。
public static void main(String[] args) {
// 定义一个字符串
String s = "aljlkdsflkjsadjfklhasdkjlflkajdflwoiudsafhaasdasd";
// 出现次数
int num = 0;
// 循环遍历每个字符,判断是否是字符 a ,如果是,累加次数
for ( int i=0;i<s.length()-1;i++)
{
// 获取每个字符,判断是否是字符a
if ( 'a'==s.charAt(i) ) {
// 累加统计次数
num++;
}
}
System.out.println("字符a出现的次数:" + num);
}
功能:将一个由英文字母组成的字符串转换成指定格式---从右边开始每三个字母用逗号分隔的形式。
请在编辑器中的第 4、10 行将代码填写完整
运行效果: j,aew,kjl,dfx,mop,zdm
public static void main(String[] args) {
// 创建一个空的StringBuilder对象
StringBuilder str = new StringBuilder();
// 追加字符串
str.append("jaewkjldfxmopzdm");
// 从后往前每隔三位插入逗号
for(int i = str.length()-3; i>0 ; i=i-3){
str.insert(i,",");
}
// 将StringBuilder对象转换为String对象并输出
System.out.print(str.toString());
}
结果: j,aew,kjl,dfx,mop,zdm
posted @
2015-09-22 16:12 藤本蔷薇 阅读(344) |
评论 (0) |
编辑 收藏
String s1 = "imooc";
String s2 = "imooc";
//定义字符串s3,保存“I love”和s1拼接后的内容
String s3 = "I love" + s1;
// 比较字符串s1和s2
// imooc为常量字符串,多次出现时会被编译器优化,只创建一个对象
System.out.println("s1和s2内存地址相同吗?" + (s1 == s2));
//比较字符串s1和s3
System.out.println("s1和s3内存地址相同吗?" + (s1==s3));
String s4 = "I love " + s1;
//比较字符串s4和s3
// s1是变量,s4在运行时才知道具体值,所以s3和s4是不同的对象
System.out.println("s3和s4内存地址相同吗?" + (s4 == s3));
posted @
2015-09-22 15:26 藤本蔷薇 阅读(255) |
评论 (0) |
编辑 收藏
//外部类HelloWorld
public class HelloWorld {
// 内部类Inner,类Inner在类HelloWorld的内部
public class Inner {
// 内部类的方法
public void show() {
System.out.println("welcome to imooc!");
}
}
public static void main(String[] args) {
// 创建外部类对象
HelloWorld hello = new HelloWorld();
// 创建内部类对象
Inner i = hello.new Inner();
// 调用内部类对象的方法
i.show();
}
}
posted @
2015-09-09 15:47 藤本蔷薇 阅读(307) |
评论 (0) |
编辑 收藏
posted @
2015-09-09 14:41 藤本蔷薇 阅读(315) |
评论 (0) |
编辑 收藏
不清楚路径的查找 : find / -name mysql
MYSQL常用经典命令(没有试过)
1.停止mysql
kill -9 `ps -ef | grep mysqld_safe| grep -v grep| awk '{print $2}'`
kill -9 `ps -ef | grep 'mysqld' | grep -v grep| awk '{print $2}'`
2.启动mysql
cd /usr/local/mysql-5.4.1-beta-linux-x86_64-glibc23
/bin/sh bin/mysqld_safe --user=mysql &
find /home/lijiajia/ -amin -10 #查找在系统中最后10分钟访问的文件
find /home/lijiajia/ -atime -2 #查找在系统中最后48小时访问的文件
find /home/lijiajia/ -empty #查找在系统中为空的文件或者文件夹
find /home/lijiajia/ -mmin -5 # 查找在系统中最后5 分钟里修改过的文件
find /home/lijiajia/ -mtime -1 #查找在系统中最后24 小时里修改过的文件
find /home/lijiajia/ -nouser #查找在系统中属于作废用户的文件(不明白是什么意思)
find /home/lijiajia/ -amin 10 #查找在系统中最后10分钟访问的文件
find /home/ftp/pub -user lijiajia #查找在系统中属于lijiajia这个用户的文件
posted @
2015-09-02 10:26 藤本蔷薇 阅读(207) |
评论 (0) |
编辑 收藏
public static Map ConvertObjToMap(Object obj){
Map<String,Object> reMap = new HashMap<String,Object>();
if (obj == null)
return null;
Field[] fields = obj.getClass().getDeclaredFields();
try {
for(int i=0;i<fields.length;i++){
try {
Field f = obj.getClass().getDeclaredField(fields[i].getName());
f.setAccessible(true);
Object o = f.get(obj);
if(o == null){
o = "";
}else{
o = String.valueOf(o);
}
reMap.put(fields[i].getName(), String.valueOf(o));
} catch (NoSuchFieldException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return reMap;
}
posted @
2015-08-31 19:52 藤本蔷薇 阅读(1010) |
评论 (0) |
编辑 收藏
import java.io.IOException;
import java.util.Date;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.PostMethod;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import com.alibaba.fastjson.JSONObject;
import com.huoniu.openapi.constant.Constant.MESSAGE;
import com.huoniu.openapi.constant.InvokeContext;
import com.huoniu.openapi.model.RetCode;
import com.huoniu.openapi.model.RetMsg;
import com.huoniu.openapi.model.SmsCode;
import com.huoniu.openapi.service.SmsCodeService;
import com.huoniu.openapi.utils.AESUtil;
import com.huoniu.openapi.utils.SmsUtil;
import com.huoniu.openapi.web.interceptor.InvokeContextInitInterceptor;
import com.puff.framework.annotation.Before;
import com.puff.framework.annotation.Controller;
import com.puff.framework.annotation.Inject;
import com.puff.framework.annotation.InterceptorChain;
import com.puff.framework.utils.JsonUtil;
import com.puff.framework.utils.StringUtil;
import com.puff.web.view.TextView;
import com.puff.web.view.View;
import com.puff.web.view.ViewFactory;
@Controller("/rest/sms")
public class HuyiSmsController {
private static String content = "您的验证码是:%s。请不要把验证码泄露给其他人。";
public View send(){
String invokeData = InvokeContext.getInvokeData();
if (StringUtil.blank(invokeData)) {
return json(RetMsg.error(RetCode.OTHER_ERROR, "发送短信失败!"));
}
JSONObject jsonObject = JSONObject.parseObject(invokeData);
String mobile = jsonObject.getString("customer_no");
if (StringUtil.blank(mobile)) {
return json(RetMsg.error(RetCode.NULL_PARAM, "手机号码不能为空"));
}
HttpClient client = new HttpClient();
PostMethod method = new PostMethod(MESSAGE.NEW_MESSAGEURL); //接口地址
client.getParams().setContentCharset("UTF-8");
method.setRequestHeader("ContentType","application/x-www-form-urlencoded;charset=UTF-8");
int mobile_code = (int)((Math.random()*9+1)*100000);
System.out.println("mobile_code : "+mobile_code);
NameValuePair[] data = {//提交短信
new NameValuePair("account", MESSAGE.NEW_ACCOUNT),
new NameValuePair("password", SmsUtil.MD5Encode(MESSAGE.NEW_PASSWORD)),
new NameValuePair("mobile", mobile),
new NameValuePair("content", String.format(content, mobile_code)),
};
method.setRequestBody(data);
try {
client.executeMethod(method);
String SubmitResult =method.getResponseBodyAsString();
Document doc = DocumentHelper.parseText(SubmitResult);
Element root = doc.getRootElement();
String code = root.elementText("code");
String msg = root.elementText("msg");
String smsid = root.elementText("smsid");
if(code == "2"){ //发送成功,写库
}
} catch (HttpException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (DocumentException e) {
e.printStackTrace();
}
return json(RetMsg.success("发送成功!!!"));
}
public View json(RetMsg msg) {
String data = JsonUtil.toJson(msg);
if (InvokeContext.isEncrypt()) {
data = AESUtil.encrypt(data);
}
return ViewFactory.text(data, TextView.ContentType.JSON);
}
}
posted @
2015-08-31 10:02 藤本蔷薇 阅读(298) |
评论 (0) |
编辑 收藏
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.PostMethod;
import com.alibaba.fastjson.JSONObject;
import com.huoniu.openapi.constant.Constant.TONGLIAN;
public class TLInterfaceService {
private static final String USERNAME = "";
private static final String PASSWORD = "";
private static final String TENANT = "";
private static final String GRANT_TYPE_GET = "password";
private static final String GRANT_TYPE_REFRESH = "refresh_token";
private static String TOKEN = null;
private static String REFRESH_TOKEN = null;
private static long EXPIRES_IN ;
private static long START_DATE;
public String getToken() {
if(TOKEN==null){
TOKEN = login();
}else{
Date date = new Date();
if(START_DATE-date.getTime()<EXPIRES_IN-30){
TOKEN = refresh();
}
}
return TOKEN;
}
public void setToken(String token) {
TOKEN = token;
}
/**
* 登陆,获取token
* @return
*/
public static String login(){
HttpClient httpClient = new HttpClient();
String URL = String.format(TONGLIAN.PREV_PATH, ""); //接口地址
try {
PostMethod postMethod = new PostMethod(URL);
postMethod.addRequestHeader("Content-Type","application/x-www-form-urlencoded");
NameValuePair[] data = {
new NameValuePair("username", USERNAME),
new NameValuePair("password", PASSWORD),
new NameValuePair("tenant", TENANT),
new NameValuePair("grant_type", GRANT_TYPE_GET)
};
postMethod.setRequestBody(data);
int statusCode = httpClient.executeMethod(postMethod);
if(200 == statusCode){
String body = postMethod.getResponseBodyAsString();
JSONObject json=JSONObject.parseObject(body);
TOKEN = json.getString("access_token");
REFRESH_TOKEN = json.getString("refresh_token");
EXPIRES_IN = Long.parseLong(json.getString("expires_in"));
START_DATE = (new Date()).getTime();
}
} catch (Exception e) {
}
return TOKEN;
}
/**
* refresh_token
* @return
*/
public static String refresh(){
HttpClient httpClient = new HttpClient();
String URL = String.format(TONGLIAN.PREV_PATH, ""); //接口地址
try {
PostMethod postMethod = new PostMethod(URL);
postMethod.addRequestHeader("Content-Type","application/x-www-form-urlencoded");
NameValuePair[] data = {
new NameValuePair("refresh_token", REFRESH_TOKEN),
new NameValuePair("grant_type", GRANT_TYPE_REFRESH)
};
postMethod.setRequestBody(data);
int statusCode = httpClient.executeMethod(postMethod);
if(200 == statusCode){
String body = postMethod.getResponseBodyAsString();
JSONObject json=JSONObject.parseObject(body);
TOKEN = json.getString("access_token");
REFRESH_TOKEN = json.getString("refresh_token");
EXPIRES_IN = Long.parseLong(json.getString("expires_in"));
START_DATE = (new Date()).getTime();
}
} catch (Exception e) {
}
return TOKEN;
}
}
posted @
2015-08-31 09:54 藤本蔷薇 阅读(282) |
评论 (0) |
编辑 收藏
/Files/kokosang/html5拖拽上传.zip 前几天想做个给安卓app升级做个上传页面,然后从网上down了个页面下面(主要是嫌弃自己页面整的太丑,见不了人),然后就一直在整后台取值的办法
各种百度,值取出来了,但是,悲催的是总是乱码,崩溃了,大神看了后,鄙视一番,给我整了下,简直就是重写了
贴出来,先放张页面效果
赏心悦目的后台来咯
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.util.List;
import org.apache.log4j.Logger;
import org.apache.tomcat.util.http.fileupload.FileItem;
import org.apache.tomcat.util.http.fileupload.disk.DiskFileItemFactory;
import org.apache.tomcat.util.http.fileupload.servlet.ServletFileUpload;
import com.puff.framework.annotation.Controller;
import com.puff.web.mvc.PuffContext;
import com.puff.web.view.View;
@Controller("/upload/android")
public class AndroidVersionUploadController {
private static final Logger logger = Logger.getLogger(UserImageController.class);
private static final String FILE_PATH = "C:/Users/Administrator/Desktop";
private static final String FILE_APK_NAME = "/nn.apk";
private static final String FILE_VER_NAME = "/ver.txt";
/**
* 版本上传
* @return
* @throws Exception
*/
public View update() throws Exception {
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
List<FileItem> items = upload.parseRequest( PuffContext.getRequest());
String ver = null;
String info = null;
String isFoucs = null;
for(Object object : items) {
FileItem fileItem = (FileItem)object;
if(fileItem.isFormField()) {
String name = fileItem.getFieldName();
String value = fileItem.getString("utf-8");
if("ver".equals(name)){
ver = value;
}else if("content".equals(name)){
info = value;
}else if("radio".equals(name)){
isFoucs = value;
}
} else {
saveFileInfo(fileItem);
}
}
saveContentInfo(ver, info, isFoucs);
return null;
}
private void saveFileInfo(FileItem fileItem) {
InputStream is = null;
OutputStream os = null;
try {
File file = new File(FILE_PATH);
if(file.exists()) {
file.mkdirs();
}
is = fileItem.getInputStream();
os = new FileOutputStream(FILE_PATH + FILE_APK_NAME);
int len = 0;
byte[] buffer = new byte[8 * 1024];
while ((len = is.read(buffer, 0, 8 * 1024)) != -1) {
os.write(buffer, 0, len);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
closeOutputStream(os);
closeInputStream(is);
}
}
public void saveContentInfo(String ver, String info, String isFoucs) {
BufferedWriter br = null;
try {
File file = new File(FILE_PATH);
if(file.exists()) {
file.mkdirs();
}
br = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(FILE_PATH + FILE_VER_NAME), "utf-8"));
br.write("ver:" + ver + "\r\n"); //版本号
br.write("update:" + isFoucs+ "\r\n"); //是否强制更新
br.write("content:" + info ); //版本升级内容
br.flush();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if(br != null) {
br.close();
}
} catch (IOException e) {
e.printStackTrace();
} finally {
br = null;
}
}
}
private void closeOutputStream(OutputStream os) {
if(os != null) {
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
os = null;
}
}
}
private void closeInputStream(InputStream is) {
if(is != null) {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
is = null;
}
}
}
}
posted @
2015-08-24 10:35 藤本蔷薇 阅读(258) |
评论 (0) |
编辑 收藏
public static void main(String[] args) { String xml = "<?xml version=\"1.0\" encoding=\"gb2312\"?><p><seqid></seqid><code></code><msg>成功</msg>" + "<node><ename>huoniu</ename><cname>火牛</cname><prefix>108</prefix><begin>20150603</begin><end>20160630</end><borr>1000000</borr><margin>100000</margin><usdborr>1000000</usdborr><usdmargin>100000</usdmargin><mainp>0.60</mainp><midp>0.60</midp><growp>0.60</growp><mainpt>0.60</mainpt><midpt>0.60</midpt><growpt>0.30</growpt><shcomm>0.000300</shcomm><szcomm>0.000300</szcomm><warn>1.000</warn><close>1.000</close><interest>200</interest><commf>13</commf><layout>p-huo01:1100000:574810</layout><unmoney>0</unmoney><tstatus>0</tstatus><cstatus>0</cstatus></node>" + " <node><ename>nn</ename><cname>牛牛</cname><prefix>102</prefix><begin>20150615</begin><end>20151015</end><borr>10000000</borr><margin>8000000</margin><usdborr>10000000</usdborr><usdmargin>8000000</usdmargin><mainp>0.60</mainp><midp>0.60</midp><growp>0.30</growp><mainpt>0.60</mainpt><midpt>0.60</midpt><growpt>0.30</growpt><shcomm>0.003000</shcomm><szcomm>0.003000</szcomm><warn>0.800</warn><close>0.800</close><interest>0</interest><commf>0</commf><layout></layout><unmoney>18000000</unmoney><tstatus>0</tstatus><cstatus>0</cstatus></node>" + "<node><ename>ag-huo</ename><cname>兜底代理商</cname><prefix>huo</prefix><begin>20150602</begin><end>20160630</end><borr>0</borr><margin>0</margin><usdborr>0</usdborr><usdmargin>0</usdmargin><mainp>0.60</mainp><midp>0.60</midp><growp>0.30</growp><mainpt>0.60</mainpt><midpt>0.60</midpt><growpt>0.30</growpt><shcomm>0.000300</shcomm><szcomm>0.000300</szcomm><warn>0.010</warn><close>0.010</close><interest>0</interest><commf>0</commf><layout></layout><unmoney>0</unmoney><tstatus>0</tstatus><cstatus>0</cstatus></node></p>"; List<Map> nodeList = new ArrayList<Map>(); Map<String, Object> sendMap = new HashMap<String, Object>(); try { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); Document doc = db.parse(new InputSource(new StringReader(xml))); Element root = doc.getDocumentElement();// 根节点
Node node = root.getFirstChild(); while(node != null) { String nodeName = node.getNodeName().trim(); String nodeValue = node.getTextContent().trim(); if("node".equals(nodeName) && node.hasChildNodes()) { Map<String, Object> nodeMap = new HashMap<String, Object>(); Node childNode = node.getFirstChild(); while(childNode != null) { nodeMap.put(childNode.getNodeName(), childNode.getTextContent()); childNode = childNode.getNextSibling(); } nodeList.add(nodeMap); } else { sendMap.put(nodeName, nodeValue); } node = node.getNextSibling(); } } catch (Exception e) { e.printStackTrace(); } sendMap.put("node", nodeList); System.out.println(sendMap); }打印结果 :
{node=[{warn=1.000, cstatus=0, tstatus=0, borr=1000000, growpt=0.30, unmoney=0, midpt=0.60, usdmargin=100000, commf=13, close=1.000, begin=20150603, shcomm=0.000300, usdborr=1000000, growp=0.60, interest=200, layout=p-huo01:1100000:574810, prefix=108, ename=huoniu, midp=0.60, mainpt=0.60, margin=100000, szcomm=0.000300, cname=火牛, end=20160630, mainp=0.60},
{warn=0.800, cstatus=0, tstatus=0, borr=10000000, growpt=0.30, unmoney=18000000, midpt=0.60, usdmargin=8000000, commf=0, close=0.800, begin=20150615, shcomm=0.003000, usdborr=10000000, growp=0.30, interest=0, layout=, ename=nn, midp=0.60, mainpt=0.60, margin=8000000, szcomm=0.003000, end=20151015, mainp=0.60},
{warn=0.010, cstatus=0, tstatus=0, borr=0, growpt=0.30, unmoney=0, midpt=0.60, usdmargin=0, commf=0, close=0.010, begin=20150602, shcomm=0.000300, usdborr=0, growp=0.30, interest=0, layout=, prefix=huo, ename=ag-huo, midp=0.60, mainpt=0.60, margin=0, szcomm=0.000300, end=20160630, mainp=0.60}], seqid=, code=, msg=成功}
posted @
2015-08-09 10:15 藤本蔷薇 阅读(261) |
评论 (0) |
编辑 收藏
public static void main(String[] args) throws Exception {
Map<String, Object> sendMap = new HashMap<String, Object>();
String data = "<?xml version=\"1.0\" encoding=\"gb2312\"?><p><seqid></seqid><client>0BF3F2D9A01797BBF05D6BC89877DC91</client><ename>108-wc</ename><code>0</code><msg>成功</msg><totalm>12447.97</totalm><cash>5669.13</cash><stockm>6778.84</stockm><num>2</num><stock><node><market>0</market><symbol>600104</symbol><direct>1</direct><type>0</type><avgprice>21.010</avgprice><holdnum>299</holdnum></node><node><market>0</market><symbol>601818</symbol><direct>1</direct><type>0</type><avgprice>4.993</avgprice><holdnum>4</holdnum></node></stock></p>";
List<Map> nodeList = new ArrayList<Map>();
try {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(new InputSource(new StringReader(data)));
Element root = doc.getDocumentElement();// 根节点
Node node = root.getFirstChild();
while(node != null) {
String nodeName = node.getNodeName().trim();
String nodeValue = node.getTextContent().trim();
if("stock".equals(nodeName) && node.hasChildNodes()) {
Node nodeOne = node.getFirstChild();
while(nodeOne != null) {
String nodeOneName = nodeOne.getNodeName().trim();
if("node".equals(nodeOneName) && nodeOne.hasChildNodes()){
Map<String, Object> nodeMap = new HashMap<String, Object>();
Node threeNode = nodeOne.getFirstChild();
while(threeNode != null) {
nodeMap.put(threeNode.getNodeName(), threeNode.getTextContent());
threeNode = threeNode.getNextSibling();
}
nodeList.add(nodeMap);
}
nodeOne = nodeOne.getNextSibling();
}
}else{
sendMap.put(nodeName, nodeValue);
}
node = node.getNextSibling();
}
sendMap.put("node", nodeList);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println(sendMap);
}
打印结果:{node=[{direct=1, market=0, symbol=600104, avgprice=21.010, holdnum=299, type=0},
{direct=1, market=0, symbol=601818, avgprice=4.993, holdnum=4, type=0}],
num=2, seqid=, client=0BF3F2D9A01797BBF05D6BC89877DC91, stockm=6778.84, cash=5669.13, ename=108-wc, code=0, totalm=12447.97, msg=成功}
posted @
2015-08-09 10:09 藤本蔷薇 阅读(471) |
评论 (0) |
编辑 收藏
import java.math.BigDecimal;
import java.text.DecimalFormat;
/**
* 由于Java的简单类型不能够精确的对浮点数进行运算,这个工具类提供精
* 确的浮点数运算,包括加减乘除和四舍五入。
*/
public class DoubleUtil {
//这个类不能实例化
private DoubleUtil(){
}
//默认除法运算精度
private static final int DEF_DIV_SCALE = 10;
//默认的保留位数
private static DecimalFormat df=new DecimalFormat("0.00");
/**
* 按照格式保留几位
* @param money double数
* @param format 格式
* @return
*/
public static double format(double money,String format){
if(format != null && format != ""){
df=new DecimalFormat(format);
}
double moneyformat=new Double(df.format(money).toString());
return moneyformat;
}
/**
* 提供精确的加法运算。
* @param v1 被加数
* @param v2 加数
* @return 两个参数的和
*/
public static double add(double v1,double v2){
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.add(b2).doubleValue();
}
/**
* 提供精确的减法运算。
* @param v1 被减数
* @param v2 减数
* @return 两个参数的差
*/
public static double sub(double v1,double v2){
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.subtract(b2).doubleValue();
}
/**
* 提供精确的乘法运算。
* @param v1 被乘数
* @param v2 乘数
* @return 两个参数的积
*/
public static double mul(double v1,double v2){
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.multiply(b2).doubleValue();
}
/**
* 提供(相对)精确的除法运算,当发生除不尽的情况时,精确到
* 小数点以后10位,以后的数字四舍五入。
* @param v1 被除数
* @param v2 除数
* @return 两个参数的商
*/
public static double div(double v1,double v2){
return div(v1,v2,DEF_DIV_SCALE);
}
/**
* 提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指
* 定精度,以后的数字四舍五入。
* @param v1 被除数
* @param v2 除数
* @param scale 表示表示需要精确到小数点以后几位。
* @return 两个参数的商
*/
public static double div(double v1,double v2,int scale){
if(scale<0){
throw new IllegalArgumentException("The scale must be a positive integer or zero");
}
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.divide(b2,scale,BigDecimal.ROUND_HALF_UP).doubleValue();
}
/**
* 提供精确的小数位四舍五入处理。
* @param v 需要四舍五入的数字
* @param scale 小数点后保留几位
* @return 四舍五入后的结果
*/
public static double round(double v,int scale){
if(scale<0){
throw new IllegalArgumentException("The scale must be a positive integer or zero");
}
BigDecimal b = new BigDecimal(Double.toString(v));
BigDecimal one = new BigDecimal("1");
return b.divide(one,scale,BigDecimal.ROUND_HALF_UP).doubleValue();
}
/**
* 提供精确的类型转换(Float)
* @param v 需要被转换的数字
* @return 返回转换结果
*/
public static float convertsToFloat(double v){
BigDecimal b = new BigDecimal(v);
return b.floatValue();
}
/**
* 提供精确的类型转换(Int)不进行四舍五入
* @param v 需要被转换的数字
* @return 返回转换结果
*/
public static int convertsToInt(double v){
BigDecimal b = new BigDecimal(v);
return b.intValue();
}
/**
* 提供精确的类型转换(Long)
* @param v 需要被转换的数字
* @return 返回转换结果
*/
public static long convertsToLong(double v){
BigDecimal b = new BigDecimal(v);
return b.longValue();
}
/**
* 返回两个数中大的一个值
* @param v1 需要被对比的第一个数
* @param v2 需要被对比的第二个数
* @return 返回两个数中大的一个值
*/
public static double returnMax(double v1,double v2){
BigDecimal b1 = new BigDecimal(v1);
BigDecimal b2 = new BigDecimal(v2);
return b1.max(b2).doubleValue();
}
/**
* 返回两个数中小的一个值
* @param v1 需要被对比的第一个数
* @param v2 需要被对比的第二个数
* @return 返回两个数中小的一个值
*/
public static double returnMin(double v1,double v2){
BigDecimal b1 = new BigDecimal(v1);
BigDecimal b2 = new BigDecimal(v2);
return b1.min(b2).doubleValue();
}
/**
* 精确对比两个数字
* @param v1 需要被对比的第一个数
* @param v2 需要被对比的第二个数
* @return 如果两个数一样则返回0,如果第一个数比第二个数大则返回1,反之返回-1
*/
public static int compareTo(double v1,double v2){
BigDecimal b1 = new BigDecimal(v1);
BigDecimal b2 = new BigDecimal(v2);
return b1.compareTo(b2);
}
/**
* 格式化double
* @param arg0
* @param num
* @return
*/
public static String doubleFormat(double arg0,Integer num){
DecimalFormat df = new DecimalFormat("####.00");
/*DecimalFormat df2 = new DecimalFormat("##.00%");
DecimalFormat df3 = new DecimalFormat("###,##0.00");*/
if(num !=null){
if(num == 1){
df = new DecimalFormat("####.0");
}else if(num == 2){
df = new DecimalFormat("####.00");
}else if(num == 3){
df = new DecimalFormat("####.000");
}else if(num == 4){
df = new DecimalFormat("####.0000");
}
}else{
df = new DecimalFormat("####");
}
if(df.format(arg0).contains(".")){
if(df.format(arg0).substring(0, df.format(arg0).indexOf(".")).length()<=0){
df = new DecimalFormat("0.00");
if(num !=null){
if(num == 1){
df = new DecimalFormat("0.0");
}else if(num == 2){
df = new DecimalFormat("0.00");
}else if(num == 3){
df = new DecimalFormat("0.000");
}else if(num == 4){
df = new DecimalFormat("0.0000");
}
}else{
df = new DecimalFormat("0");
}
}
}
return df.format(arg0);
}
/**
* 百分比格式化
* @param arg0
* @param num
* @return
*/
public static String percentageFormat(double arg0,Integer num){
DecimalFormat df = new DecimalFormat("##.00%");
if(num !=null){
if(num == 1){
df = new DecimalFormat("####.0%");
}else if(num == 2){
df = new DecimalFormat("####.00%");
}else if(num == 3){
df = new DecimalFormat("####.000%");
}else if(num == 4){
df = new DecimalFormat("####.0000%");
}
}else{
df = new DecimalFormat("####%");
}
if(df.format(arg0).contains(".")){
if(df.format(arg0).substring(0, df.format(arg0).indexOf(".")).length()<=0){
df = new DecimalFormat("0.00%");
if(num !=null){
if(num == 1){
df = new DecimalFormat("0.0%");
}else if(num == 2){
df = new DecimalFormat("0.00%");
}else if(num == 3){
df = new DecimalFormat("0.000%");
}else if(num == 4){
df = new DecimalFormat("0.0000%");
}
}else{
df = new DecimalFormat("0%");
}
}
}
return df.format(arg0);
}
/**
* double每三位短号分割
* @param arg0
* @param num
* @return
*/
public static String splitNumberFormat(double arg0,Integer num){
DecimalFormat df = new DecimalFormat("###,##0.00");
if(num !=null){
if(num == 1){
df = new DecimalFormat("###,##0.0");
}else if(num == 2){
df = new DecimalFormat("###,##0.00");
}else if(num == 3){
df = new DecimalFormat("###,##0.000");
}else if(num == 4){
df = new DecimalFormat("###,##0.0000");
}
}else{
df = new DecimalFormat("###,###");
}
return df.format(arg0);
}
}
posted @
2015-08-07 13:47 藤本蔷薇 阅读(583) |
评论 (0) |
编辑 收藏
假如 redis 在/usr/local/bin
配置文件在/usr/local/redis-2.8.21
root@iZ239bujfzrZ: /usr/local/bin# ./redis-server redis.conf nohup
posted @
2015-08-07 10:36 藤本蔷薇 阅读(211) |
评论 (0) |
编辑 收藏
public static interface NUMBER{
public static String STR_FORMAT = "00000";
static String TOKEN = null;
}
//配资单号格式
public static String AddOne(String code){
Integer intHao = Integer.parseInt(code);
intHao++;
DecimalFormat df = new DecimalFormat(NUMBER.STR_FORMAT);
return df.format(intHao);
}
public static void main(String[] args) {
String code = "ASD0034252345234500001";
String xlh = code.substring(code.length()-5, code.length());
System.out.println("数据库原有的最大序列号:"+xlh);
if(xlh!=null){
System.out.println("累加的新生成的序列号:"+AddOne(xlh));
}else{
System.out.println("最新的新生成的序列号:"+"00001"); //如果没有手动生成一条最小的
}
}
posted @
2015-08-03 11:50 藤本蔷薇 阅读(448) |
评论 (0) |
编辑 收藏
/**
* 获取股票板块信息
* 沪市A股 : 600、601、603 开头
* 深市A股 : 000开头
* 中小板 : 002开头
* 创业板 : 300开头
* 沪市新股申购:730
* @param code
* @return
*/
public static int getPlateInfo(String code){
if(code.startsWith("600") || code.startsWith("601") || code.startsWith("603")){
return 0;
}else if(code.startsWith("000")){
return 1;
}else if(code.startsWith("002")){
return 2;
}else if(code.startsWith("300")){
return 3;
}else if(code.startsWith("730")){
return 4;
}else {
return 5;
}
}
posted @
2015-07-29 19:07 藤本蔷薇 阅读(371) |
评论 (0) |
编辑 收藏
我想把String 类型 yyyy-MM-dd 格式的数据转换成 String 类型 yyyyMMdd 格式,然后
String end_date = "2015-09-07";
SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMdd");
Date date_2 = formatter.parse(end_date);
String date_22 = formatter.format(date_2);
System.out.println(date_2);
System.out.println(date_22); 打印出来结果是:
Tue Dec 09 00:00:00 CST 2014
20141209
后来,吾家上神告知,不能直接转
String end_date = "2015-09-07";
DateFormat format =new SimpleDateFormat("yyyy-MM-dd");
Date date_1 = format.parse(end_date);
format = new SimpleDateFormat("yyyyMMdd");
String date_11 = format.format(date_1);
System.out.println(date_1);
System.out.println(date_11);
打印出来结果是:
Mon Sep 07 00:00:00 CST 2015
20150907
总结语: 吾家上神棒棒哒!!!
posted @
2015-07-27 16:27 藤本蔷薇 阅读(202) |
评论 (0) |
编辑 收藏
原本写了 if else 判断股票所属板块的,觉得繁琐,就去改了下面的
public static void main(String[] args) { String code ="002348";
String stock = "002".equals(code.substring(0,3)) ? "002" : code.substring(0,1);
System.out.println(stock);
}
然后跑去得瑟,被鄙视了,然后 ↓↓↓↓
public static String getPlateInfo(String code){
return code.startsWith("002") ? "002" : code.substring(0,1);
}
还补了一刀,你看你写的什么玩意儿,哼,好想让他跪搓衣板
posted @
2015-07-02 00:26 藤本蔷薇 阅读(229) |
评论 (0) |
编辑 收藏
Map<String, Object> userInfoMap = new HashMap<String, Object>();
// String data = JsonUtil.toJson(infoMap);
userInfoMap.put("agent", agent);
userInfoMap.put("ename", ename);
Map<String, Object> infoMap = SocketLogic.logic.userInfo(userInfoMap);
JSONObject rootObj = (JSONObject)JSONObject.toJSON(infoMap);
JSONArray nodeArr = rootObj.getJSONArray("node");
for(int i = 0; i < nodeArr.size(); i ++) {
authority = nodeArr.getJSONObject(i).get("authority").toString(); //交易权限
margin = nodeArr.getJSONObject(i).getLongValue("margin"); //保证金
warn = nodeArr.getJSONObject(i).getFloatValue("warn"); //警戒线
close = nodeArr.getJSONObject(i).getFloatValue("close"); //平仓线
end = nodeArr.getJSONObject(i).getLongValue("end"); //结束时间
mainp = nodeArr.getJSONObject(i).getFloatValue("mainp"); //主板单票比例
midp = nodeArr.getJSONObject(i).getFloatValue("midp"); //中小板单票比例
growp = nodeArr.getJSONObject(i).getFloatValue("growp"); //创业板单票比例
}
posted @
2015-06-29 19:20 藤本蔷薇 阅读(334) |
评论 (1) |
编辑 收藏
转自 : http://wzf7065.iteye.com/blog/1567587
public class StringTest {
private static int counter = 0;
public static void main(String[] args) {
String str1 = "sd& ^^java***java(((java";
String str2 = "java";
int i = countStr(str1, str2);
System.out.println("i---------->" + i);
}
/**
* 判断str1中包含str2的个数
* @param str1
* @param str2
* @return counter
*/
public static int countStr(String str1, String str2) {
if (str1.indexOf(str2) == -1) {
return 0;
} else if (str1.indexOf(str2) != -1) {
counter++;
countStr(str1.substring(str1.indexOf(str2) +
str2.length()), str2);
return counter;
}
return 0;
}
}
posted @
2015-06-23 14:47 藤本蔷薇 阅读(1427) |
评论 (0) |
编辑 收藏
select * from table order by id limit (intPage - 1) * PageRow , intPage * PageRow
去重SQL
select product_code,count(*) as count from h_product_info group by product_code having count>1;
select d_date,count(*) as count from h_oddnum group by d_date having count>1 order by d_date desc;
delete from h_oddnum where id in (select min(id) from h_oddnum group by d_date having count(d_date) > 1)
create table tmp as select min(id) as col1 from blur_article group by title;
delete from blur_article where id not in (select col1 from tmp);
drop table tmp;
select min(id) from h_oddnum group by d_date having count(d_date) > 1
create table tmp as select min(id) as col1 from h_oddnum group by d_date having count(d_date) > 1;
delete from h_oddnum where id not in (select col1 from tmp);
drop table tmp;
insert into h_oddnum(id,d_date,d_code) values('e1d64c5f536b4b1bbfe9f04511c01f3f','20150422172207','00001');
posted @
2015-05-19 17:12 藤本蔷薇 阅读(172) |
评论 (0) |
编辑 收藏
posted @
2015-05-04 10:18 藤本蔷薇 阅读(142) |
评论 (0) |
编辑 收藏
只能有四位,且可以是数字和字母的混合
[A-Za-z0-9]{4}
posted @
2015-04-24 11:53 藤本蔷薇 阅读(180) |
评论 (0) |
编辑 收藏
double rounded = (b1.multiply(b2).multiply(b3)).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
// 方式一:
double f = 3.1516;
BigDecimal b = new BigDecimal(f);
double f1 = b.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
// 方式二:
new java.text.DecimalFormat("#.00").format(3.1415926);
// #.00 表示两位小数 #.0000四位小数 以此类推…
// 方式三:
double d = 3.1415926;
String result = String.format("%.2f", d);
// %.2f %. 表示 小数点前任意位数 2 表示两位小数 格式后的结果为f 表示浮点型。
//方法四:
Math.round(5.2644555 * 100) * 0.01d;
//String.format("%0" + 15 + "d", 23) 23不足15为就在前面补0
posted @
2015-04-24 11:47 藤本蔷薇 阅读(728) |
评论 (0) |
编辑 收藏
在项目当中,对于double类型数据的使用比较频繁。尤其是处理金钱相关的数据,在使用Double类型的数据时,涉及到精度,显示,四舍五入等等问题。
1. 显示问题,当double 数据 小于 0.0001 大于等于 10000000时,直接转为String输出时,会显示为科学计数法。
1: double double1 = 0.00009;
2: System.out.println(double1); // 9.0E-5
4: double double2 = 10000000;
5: System.out.println(double2); // 1.0E7
需要使用DecimalFormat 转化输出
1: DecimalFormat formate = new DecimalFormat("#.######");
2: System.out.println(formate.format(double1)); //0.00009
3:
4: formate = new DecimalFormat("########.##");
5: System.out.println(formate.format(double2));//10000000
这里面会有四舍五入问题:
1: double double1 = 0.000096789;
2: DecimalFormat formate = new DecimalFormat("#.######");
3: System.out.println(formate.format(double1)); //0.000097
当取小数点后六位时,会在第七位四舍五入。
2. 误差问题,两个Double类型的数,进行运算。经常会产生误差。
1: System.out.println(0.05 + 0.01); //0.060000000000000005
2: System.out.println(1.0 - 0.42); //0.5800000000000001
3: System.out.println(4.015 * 100); //401.49999999999994
4: System.out.println(123.3 / 100); //1.2329999999999999
看似简单的计算,结果却出人意料。解决方法是将Double转为BigDecimal。调用BigDecimal的 运算。
1: double d1 = 0.05;
2: double d2 = 0.01;
3: BigDecimal b1 = new BigDecimal(Double.toString(d1));
4: BigDecimal b2 = new BigDecimal(Double.toString(d2));
5: System.out.println(b1.add(b2)); //0.06
需要注意的是,如果new BigDecimal()时使用的是double类型的构造方法。问题依旧是可能存在的,这边要使用String参数的构造方法。
3. 两个double比较的问题。将double数的运算结果和0比较。由于精度问题,比如if(1-0.999999999999999999 == 0.0) 这个是成立的。
附上double数的运算:
1: /**
2: * 两个Double数相加
3: *
4: * @param v1
5: * @param v2
6: * @return
7: */
8: public static double doubleAdd(Double v1, Double v2) {
9:
10: BigDecimal b1 = new BigDecimal(v1.toString());
11:
12: BigDecimal b2 = new BigDecimal(v2.toString());
13:
14: return b1.add(b2).doubleValue();
15:
16: }
17:
18: /**
19: * 两个Double数相减
20: *
21: * @param v1
22: * @param v2
23: * @return
24: */
25: public static double doubleSub(Double v1, Double v2) {
26:
27: BigDecimal b1 = new BigDecimal(v1.toString());
28:
29: BigDecimal b2 = new BigDecimal(v2.toString());
30:
31: return b1.subtract(b2).doubleValue();
32:
33: }
34:
35: /**
36: * 两个Double数相乘
37: *
38: * @param v1
39: * @param v2
40: * @return
41: */
42: public static double doubleMul(Double v1, Double v2) {
43:
44: BigDecimal b1 = new BigDecimal(v1.toString());
45:
46: BigDecimal b2 = new BigDecimal(v2.toString());
47:
48: return b1.multiply(b2).doubleValue();
49:
50: }
51:
52: /**
53: * 两个Double数相除
54: *
55: * @param v1
56: * @param v2
57: * @return
58: */
59: public static double doubleDiv(Double v1, Double v2) {
60:
61: BigDecimal b1 = new BigDecimal(v1.toString());
62:
63: BigDecimal b2 = new BigDecimal(v2.toString());
64:
65: return b1.divide(b2, DEF_DIV_SCALE, BigDecimal.ROUND_HALF_UP)
66: .doubleValue();
67:
68: }
69:
70: /**
71: * 两个Double数相除,并保留scale位小数
72: *
73: * @param v1
74: * @param v2
75: * @param scale
76: * @return
77: */
78: public static double doubleDiv(Double v1, Double v2, int scale) {
79:
80: if (scale < 0) {
81:
82: throw new IllegalArgumentException(
83:
84: "The scale must be a positive integer or zero");
85:
86: }
87: int DEF_DIV_SCALE = 10;
88:
89: BigDecimal b1 = new BigDecimal(v1.toString());
90:
91: BigDecimal b2 = new BigDecimal(v2.toString());
92:
93: return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
94:
95: }
posted @
2015-04-22 18:11 藤本蔷薇 阅读(174) |
评论 (0) |
编辑 收藏
语句对的,但不能执行
delete from h_oddnum where id in (select min(id) from h_oddnum group by d_date having count(d_date) > 1)
只能创建临时表删除
create table tmp as select min(id) as col1 from h_oddnum group by d_date having count(d_date) > 1;
delete from h_oddnum where id not in (select col1 from tmp);
drop table tmp;
posted @
2015-04-22 16:50 藤本蔷薇 阅读(139) |
评论 (0) |
编辑 收藏
Date date =
new
Date(
"2014/1/10 18:20"
);
Date date2 =
new
Date(
"2014/1/11 3:5"
);
long
temp = date2.getTime() - date.getTime();
//相差毫秒数
long
hours = temp /
1000
/
3600
;
//相差小时数
long
temp2 = temp % (
1000
*
3600
);
long
mins = temp2 /
1000
/
60
;
//相差分钟数
System.out.println(
"date2 与 date 相差"
+ hours +
"小时"
+ mins +
"分钟"
);
posted @
2015-04-16 10:40 藤本蔷薇 阅读(133) |
评论 (0) |
编辑 收藏
启动jmeter时
invalid or corrupt jarfile ApacheJmeter.jar
errorlevel=1
后来才发现是本地jdk配置版本过低是jdk1.5
如是将环境变量里面的java_home 里面的
F:\Installed---success---go\jdk1.5改为C:\Program Files\Java\jdk1.7.0_45
运行jmeter解压文件下面bin里面的jmeter.bat
启动成功
posted @
2015-04-14 10:20 藤本蔷薇 阅读(465) |
评论 (0) |
编辑 收藏
BigDecimal b1 = new BigDecimal(Double.toString(service_charge*matching_term));
BigDecimal b2 = new BigDecimal(Double.toString(0.7));
BigDecimal b3 = new BigDecimal(Double.toString(0.3));
//利息
Double interest = b1.multiply(b2).doubleValue();
posted @
2015-04-13 14:09 藤本蔷薇 阅读(121) |
评论 (0) |
编辑 收藏
错误的原因:
调用第三方支付,出现问题,起先以为是重启服务器造成的,后来查看源代码,运行,才发现,第三方回调时被拦截。
posted @
2015-03-26 16:36 藤本蔷薇 阅读(165) |
评论 (0) |
编辑 收藏
String ids = "as,ad,sdf,qwe,rwer,wfv";
for(String id:ids.split(",")){
System.out.println(id);
}
结果:
as
ad
sdf
qwe
rwer
wfv
posted @
2015-03-18 09:39 藤本蔷薇 阅读(439) |
评论 (2) |
编辑 收藏
var arr = [{ name: "john", lang: "js" },{ name: "nailwl", lang: "jquery" },{ name: "吴磊", lang: "ext" }];
$.each( arr, function(index, content)
{
alert( "the man's no. is: " + index + ",and " + content.name + " is learning " + content.lang );
});
posted @
2015-03-17 16:18 藤本蔷薇 阅读(206) |
评论 (0) |
编辑 收藏
InetAddress address=InetAddress.getLocalHost();
System.out.println(address.getHostAddress());
posted @
2015-03-12 18:55 藤本蔷薇 阅读(363) |
评论 (0) |
编辑 收藏
/**
* Description: 向FTP服务器上传文件
* @Version 1.0
* @param url FTP服务器hostname
* @param port FTP服务器端口
* @param username FTP登录账号
* @param password FTP登录密码
* @param path FTP服务器保存目录
* @param filename 上传到FTP服务器上的文件名
* @param input 输入流
* @return 成功返回true,否则返回false *
*/
public static boolean uploadFile(String url,int port,String username,String password,String path,String filename,InputStream input){
boolean success = false;
FTPClient ftp = new FTPClient();
ftp.setControlEncoding("GBK");
try {
int reply;
ftp.connect(url,port);// 连接FTP服务器
// 如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器
ftp.login(username, password);// 登录
reply = ftp.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) {
ftp.disconnect();
return success;
}
ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
ftp.makeDirectory(path);
ftp.changeWorkingDirectory(path);
ftp.storeFile(filename, input);
input.close();
ftp.logout();
success = true;
} catch (IOException e) {
e.printStackTrace();
} finally {
if (ftp.isConnected()) {
try {
ftp.disconnect();
} catch (IOException ioe) {
}
}
}
return success;
}
/**
* 将本地文件上传到FTP服务器上 *
*
* int port,// FTP服务器端口
String username, // FTP登录账号
String password, // FTP登录密码
String path, // FTP服务器保存目录
String filename, // 上传到FTP服务器上的文件名
String orginfilename // 输入流文件名
*/
public static void upLoadFromProduction(String url,int port,String username,String password,String path,String filename,String orginfilename) {
try {
FileInputStream in = new FileInputStream(new File(orginfilename));
boolean flag = uploadFile(url, port,username, password, path,filename, in);
System.out.println(flag);
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
upLoadFromProduction("127.40.1.80",21,"www", "huahua", "/ali/www/Cash/photo", "123.jpg", "C:/Users/Administrator/Desktop/11.jpg");
}
/**
* Description: 向FTP服务器上传文件
* @Version 1.0
* @param url FTP服务器hostname
* @param port FTP服务器端口
* @param username FTP登录账号
* @param password FTP登录密码
* @param path FTP服务器保存目录
* @param filename 上传到FTP服务器上的文件名
* @param input 输入流
* @return 成功返回true,否则返回false *
*/
public static boolean uploadFile(String url,int port,String username,String password,String path,String filename,String customerNo,InputStream input){
boolean success = false;
FTPClient ftp = new FTPClient();
ftp.setControlEncoding("GBK");
try {
int reply;
ftp.connect(url,port);// 连接FTP服务器
// 如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器
ftp.login(username, password);// 登录
reply = ftp.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) {
ftp.disconnect();
return success;
}
//读取所有文件,根据文件名模糊删除远程照片
FTPFile[] ftpFiles = null;
ftpFiles = ftp.listFiles(path);
for (int i = 0; ftpFiles != null && i < ftpFiles.length; i++) {
FTPFile file = ftpFiles[i];
if (file.isFile()) {
if(file.getName().startsWith(customerNo)|| file.getName().endsWith(customerNo)){
ftp.deleteFile(path+"/"+file.getName());
}
}
}
ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
ftp.makeDirectory(path);
ftp.changeWorkingDirectory(path);
ftp.storeFile(filename, input);
input.close();
ftp.logout();
success = true;
} catch (IOException e) {
e.printStackTrace();
} finally {
if (ftp.isConnected()) {
try {
ftp.disconnect();
} catch (IOException ioe) {
}
}
}
return success;
}
posted @
2015-03-12 18:13 藤本蔷薇 阅读(143) |
评论 (0) |
编辑 收藏
调用远程接口,返回的是http文件流,打开相关url,就可以直接下载txt文件,
要对这相关的文件内容进行操作,不保存,可以调用下面这个方法直接读取文件流内容,测试了下,是可以的
public String getYCFile(String urlPath) { - String readStr = "";
- try {
- try {
- String strUrl = urlPath.trim();
- URL url = new URL(strUrl);
- HttpURLConnection urlCon = (HttpURLConnection) url.openConnection();
- urlCon.setConnectTimeout(10000);
- urlCon.setReadTimeout(30000);
- BufferedReader in = new BufferedReader(new InputStreamReader(
- urlCon.getInputStream(), "GBK"));
- String inputLine = " ";
- while ((inputLine = in.readLine()) != null) {
- readStr += inputLine.trim();
- }
- in.close();
- return readStr;
- } catch (IOException e) {
- readStr = "";
- }
- } catch (Exception e) {
- readStr = "";
- }
- return readStr;
- }
posted @
2015-03-06 15:40 藤本蔷薇 阅读(1068) |
评论 (0) |
编辑 收藏
public static boolean delFilesByPath(String path,String str){
//参数说明---------path:要删除的文件的文件夹的路径---------str:要匹配的字符串的头
boolean b=false;
File file = new File(path);
File[] tempFile = file.listFiles();
for(int i = 0; i < tempFile.length; i++){
if(tempFile[i].getName().startsWith(str)||tempFile[i].getName().endsWith(str)){
tempFile[i].delete();
b=true;
}
}
return b;
}
public static void main(String[] args) {
String path="F:/Installed---success---go/apache/webapps/images";
String str="181";
if(delFilesByPath(path,str)){
System.out.println(path+"中包含"+str+"的文件已经全部删除成功!");
}else{
System.out.println(path+"中包含"+str+"的文件已经删除失败或该文件夹下不存在这类文件!");
}
}
posted @
2015-03-06 10:09 藤本蔷薇 阅读(168) |
评论 (0) |
编辑 收藏
posted @
2015-02-10 13:50 藤本蔷薇 阅读(134) |
评论 (0) |
编辑 收藏
Calendar.getInstance().get(Calendar.YEAR)
posted @
2015-01-23 00:21 藤本蔷薇 阅读(142) |
评论 (0) |
编辑 收藏
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
Calendar c = Calendar.getInstance();
c.add(Calendar.DAY_OF_MONTH, 1);
System.out.println("增加一天后日期 : "+sf.format(c.getTime()));
posted @
2015-01-21 15:26 藤本蔷薇 阅读(187) |
评论 (0) |
编辑 收藏
select SYSDATE(),date_add(create_date, interval 30 minute);
MySQL 为日期增加一个时间间隔:date_add()
set @dt = now();
select date_add(@dt, interval 1 day); -- add 1 day
select date_add(@dt, interval 1 hour); -- add 1 hour
select date_add(@dt, interval 1 minute); -- ...
select date_add(@dt, interval 1 second);
select date_add(@dt, interval 1 microsecond);
select date_add(@dt, interval 1 week);
select date_add(@dt, interval 1 month);
select date_add(@dt, interval 1 quarter);
select date_add(@dt, interval 1 year);
select date_add(@dt, interval -1 day); -- sub 1 day
select case when date_add(create_date, interval 30 minute)<SYSDATE() then 1 else 0 end
from table
where id=?
posted @
2015-01-08 10:08 藤本蔷薇 阅读(199) |
评论 (0) |
编辑 收藏
刚刚调试接口,sql 查询时 遇到一个问题,报错
“java.sql.SQLException: Value '0000-00-00 00:00:00' can not be represented as java.sql.Timestamp”
其原因是数据库字段存在这样的值
百度了下:
这是因为 “0000-00-00 00:00:00”在mysql中是作为一个特殊值存在的,但是在Java中, java.sql.Date 会被视为 不合法的值,被JVM认为格式不正确。
解决办法:
在jdbc的url加上 zeroDateTimeBehavior参数:
datasource.url=jdbc:mysql://localhost:3306/pe?useUnicode=true&characterEncoding=gbk &zeroDateTimeBehavior=convertToNull
完了过后,报异常
The reference to entity "characterEncoding" must end with the ';' delimiter
其原因可能是在Properties文件或者xml文件中忘记进行特殊符号的转译了,
需要把后面的;修噶为&修改为
useUnicode=true&characterEncoding=UTF-8 &zeroDateTimeBehavior=convertToNull
有以下几类字符要进行转义替换:
< | < | 小于号 |
> | > | 大于号 |
& | & | 和 |
' | ' | 单引号 |
" | " | 双引号 |
问题解决
posted @
2014-12-30 11:37 藤本蔷薇 阅读(211) |
评论 (0) |
编辑 收藏
Parameter index out of range (1 > number of parameters, which is 0)
刚刚遇到这个错,百度了下,说
应该是调用越界问题吧:
"参数索引越界"(参数不能少于1个)
一般是 sql语句少了问号
是sql语句有问题
后来仔细看了下,原来是自己的SQl的where 语句中?我写成了中文的输入法中的? 粗心啊
posted @
2014-12-26 14:26 藤本蔷薇 阅读(224) |
评论 (0) |
编辑 收藏
str.append(" left join (
select customer_no,(case when auth_type=1 then count(route) when auth_type=2 then count(route) when auth_type=3 then count(route) end) as auth_image from h_auth_info where audit_sign=1) h6
");
select auth_info.customer_no,
(case when auth_info.auth_image=3 then 1
when auth_info.auth_image<3 then 0
end)
as auth_result
from(
select customer_no,
(case when auth_type=1 then count(route)
when auth_type=2 then count(route)
when auth_type=3 then count(route)
end)
as auth_image
from h_auth_info
where audit_sign=1 and customer_no='18632116655'
) auth_info
posted @
2014-12-26 09:14 藤本蔷薇 阅读(193) |
评论 (0) |
编辑 收藏
/**
* 校验银行卡卡号
* @param cardId
* @return
*/ public static boolean checkBankCard(String cardId) { char bit = getBankCardCheckCode(cardId.substring(0, cardId.length() - 1)); if(bit == 'N'){ return false; } return cardId.charAt(cardId.length() - 1) == bit; } /**
* 从不含校验位的银行卡卡号采用 Luhm 校验算法获得校验位
* @param nonCheckCodeCardId
* @return
*/ public static char getBankCardCheckCode(String nonCheckCodeCardId){ if(nonCheckCodeCardId == null || nonCheckCodeCardId.trim().length() == 0 || !nonCheckCodeCardId.matches("\\d+")) { //如果传的不是数据返回N
return 'N'; } char[] chs = nonCheckCodeCardId.trim().toCharArray(); int luhmSum = 0; for(int i = chs.length - 1, j = 0; i >= 0; i--, j++) { int k = chs[i] - '0'; if(j % 2 == 0) { k *= 2; k = k / 10 + k % 10; } luhmSum += k; } return (luhmSum % 10 == 0) ? '0' : (char)((10 - luhmSum % 10) + '0'); } // 测试代码public class ResTest {
public static void main(String[] args) {
String reg = "18632116655";
String data = JsonUtil.toJson(reg);
String post = HttpClient.post("http://192.168.199.127:8067/openapi/rest/hometop/homeinfo", AESUtil.encrypt(data));
System.out.println(post);
System.out.println(AESUtil.decrypt(post));
}
}
/**
* author:qiaoyongjun
* StrNo:用户输入的身份证件号码
* _id:用来承载错误信息的控件ID号,用来进行友好提示
*判断身份证号码格式函数
*公民身份号码是特征组合码,
*排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码
*如果验证通过 返回 true
*/
function isChinaIDCard(StrNo, _Id) {
var error = document.getElementById(_Id);
StrNo = StrNo.toString();
if (StrNo.length == 15) {
if (!isValidDate("19" + StrNo.substr(6, 2), StrNo.substr(8, 2),
StrNo.substr(10, 2), _Id)) {
return false;
}
} else if (StrNo.length == 18) {
if (!isValidDate(StrNo.substr(6, 4), StrNo.substr(10, 2), StrNo
.substr(12, 2), _Id)) {
return false;
}
} else {
error.innerHTML = "";
error.innerHTML = "输入的身份证号码必须为15位或者18位!";
return false;
}
if (StrNo.length == 18) {
var a, b, c
if (!isNumber(StrNo.substr(0, 17))) {
error.innerHTML = "";
error.innerHTML = "身份证号码错误,前17位不能含有英文字母!";
return false;
}
a = parseInt(StrNo.substr(0, 1)) * 7 + parseInt(StrNo.substr(1, 1))
* 9 + parseInt(StrNo.substr(2, 1)) * 10;
a = a + parseInt(StrNo.substr(3, 1)) * 5
+ parseInt(StrNo.substr(4, 1)) * 8
+ parseInt(StrNo.substr(5, 1)) * 4;
a = a + parseInt(StrNo.substr(6, 1)) * 2
+ parseInt(StrNo.substr(7, 1)) * 1
+ parseInt(StrNo.substr(8, 1)) * 6;
a = a + parseInt(StrNo.substr(9, 1)) * 3
+ parseInt(StrNo.substr(10, 1)) * 7
+ parseInt(StrNo.substr(11, 1)) * 9;
a = a + parseInt(StrNo.substr(12, 1)) * 10
+ parseInt(StrNo.substr(13, 1)) * 5
+ parseInt(StrNo.substr(14, 1)) * 8;
a = a + parseInt(StrNo.substr(15, 1)) * 4
+ parseInt(StrNo.substr(16, 1)) * 2;
b = a % 11;
if (b == 2) //最后一位为校验位
{
c = StrNo.substr(17, 1).toUpperCase(); //转为大写X
} else {
c = parseInt(StrNo.substr(17, 1));
}
switch (b) {
case 0:
if (c != 1) {
error.innerHTML = "";
error.innerHTML = "身份证号码校验位错:最后一位应该为:1";
return false;
}
break;
case 1:
if (c != 0) {
error.innerHTML = "";
error.innerHTML = "身份证号码校验位错:最后一位应该为:0";
return false;
}
break;
case 2:
if (c != "X") {
error.innerHTML = "";
error.innerHTML = "身份证号码校验位错:最后一位应该为:X";
return false;
}
break;
case 3:
if (c != 9) {
error.innerHTML = "";
error.innerHTML = "身份证号码校验位错:最后一位应该为:9";
return false;
}
break;
case 4:
if (c != 8) {
error.innerHTML = "";
error.innerHTML = "身份证号码校验位错:最后一位应该为:8";
return false;
}
break;
case 5:
if (c != 7) {
error.innerHTML = "";
error.innerHTML = "身份证号码校验位错:最后一位应该为:7";
return false;
}
break;
case 6:
if (c != 6) {
error.innerHTML = "";
error.innerHTML = "身份证号码校验位错:最后一位应该为:6";
return false;
}
break;
case 7:
if (c != 5) {
error.innerHTML = "";
error.innerHTML = "身份证号码校验位错:最后一位应该为:5";
return false;
}
break;
case 8:
if (c != 4) {
error.innerHTML = "";
error.innerHTML = "身份证号码校验位错:最后一位应该为:4";
return false;
}
break;
case 9:
if (c != 3) {
error.innerHTML = "";
error.innerHTML = "身份证号码校验位错:最后一位应该为:3";
return false;
}
break;
case 10:
if (c != 2) {
error.innerHTML = "";
error.innerHTML = "身份证号码校验位错:最后一位应该为:2";
return false;
}
}
} else {//15位身份证号
if (!isNumber(StrNo)) {
error.innerHTML = "";
error.innerHTML = "身份证号码错误,前15位不能含有英文字母!";
return false;
}
}
return true;
}
/**
* 验证身份证件中的日期是否合法有效
* @param iY
* @param iM
* @param iD
* @param _id
* @return
*/
function isValidDate(iY, iM, iD, _id) {
if (iY > 2200 || iY < 1900 || !isNumber(iY)) {
document.getElementById(_id).innerHTML = "";
document.getElementById(_id).innerHTML = "输入身份证号,年度" + iY + "非法!";
return false;
}
if (iM > 12 || iM <= 0 || !isNumber(iM)) {
document.getElementById(_id).innerHTML = "";
document.getElementById(_id).innerHTML = "输入身份证号,月份" + iM + "非法!";
return false;
}
if (iD > 31 || iD <= 0 || !isNumber(iD)) {
document.getElementById(_id).innerHTML = "";
document.getElementById(_id).innerHTML = "输入身份证号,日期" + iD + "非法!";
return false;
}
return true;
}
/**
* 验证是否为数字
* @param oNum
* @return
*/
function isNumber(oNum) {
if (!oNum)
return false;
var strP = /^\d+(\.\d+)?$/;
if (!strP.test(oNum))
return false;
try {
if (parseFloat(oNum) != oNum)
return false;
} catch (ex) {
return false;
}
return true;
}
posted @
2014-12-21 22:09 藤本蔷薇 阅读(1761) |
评论 (0) |
编辑 收藏
1.在JSP页面中引入sun的核心标签库
<%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c" %>
2.在JSP页面中引入sun的函数标签库
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
3.判断是否为空
<c:if test="${!empty map}">
</c:if>
4.判断长度大于0
<c:if test="${fn:length(map)>0}">
</c:if>
注:fn:length(obj),对于空对象也会返回0
posted @
2014-12-16 11:22 藤本蔷薇 阅读(525) |
评论 (0) |
编辑 收藏
不想说技术,只想说——觉得iBATIS还是蛮强大的,嗯,就这句话
posted @
2014-12-04 18:12 藤本蔷薇 阅读(83) |
评论 (0) |
编辑 收藏
$('input,select,textarea',$('form[name="my_form"]')).attr('readonly',true);
posted @
2014-11-28 20:12 藤本蔷薇 阅读(328) |
评论 (0) |
编辑 收藏
SELECT to_char(add_months(sysdate,to_number(t.month)),'yyyymmddhhmmss') from customer t
posted @
2014-11-27 09:28 藤本蔷薇 阅读(1605) |
评论 (0) |
编辑 收藏
好多东西用是用了,一直没有太细的研究过,很多细节方面就这么放过了 比如说,<a href="#"> 与 <a href="javascript:void(0)"> 今天在页面中间实现滑动标签改变块内容时发现 <a href="#"> 这种写法实现功能时,每次改变块,页面都会从顶部开始,明显不合理 <a href="javascript:void(0)">才会在当前位置改变块内容
posted @
2014-11-24 11:03 藤本蔷薇 阅读(126) |
评论 (0) |
编辑 收藏
var state = {
title: "index",
url: 原路径
}
var url=希望改成的路径;
window.history.pushState(state,document.title,url);
posted @
2014-11-23 23:12 藤本蔷薇 阅读(172) |
评论 (0) |
编辑 收藏
select * from 表 as of timestamp sysdate-(1/(24)); --恢复1小时前的表中的数据
posted @
2014-11-19 11:48 藤本蔷薇 阅读(1023) |
评论 (0) |
编辑 收藏
当多个页面公用同一个页面,希望能正确返回上一页时,可以用此办法达到想要的效果
${header.Referer } 可以通过el表达式做到
<div class="pro-dt-top">
<h1><b><a href="perclass.shtml">投资园区</a></b><a href="${header.Referer}" style="font-size: 16px;">>列表</a>><em>${title}</em>
</h1>
</div>
下图是网上资料
el中的作用域
el中的作用域 | 对应关系 |
---|
pageContext(1) | 当前页的pageContext对象 |
pageScope | 把page作用域中的数据映射为一个map对象 |
requestScope(2) | 把request作用域中的数据映射为一个map对象 |
sessionScope | 把session作用域中的数据映射为一个map对象 |
applicationScope | 把application作用域中的数据映射为一个map对象 |
param | 对应request.getParameter() |
paramValues(3) | 对应request.getParameterValues() |
header(4) | 对应request.getHeader() |
headerValues | 对应request.getHeaderValues() |
cookie(5) | 对应request.getCookies() |
initParam(6) | 对应ServletContext.getInitParamter() |
posted @
2014-11-18 17:28 藤本蔷薇 阅读(145) |
评论 (0) |
编辑 收藏
在s:iterator中${st.index}用于读取序列号
#st.odd 判断是否是偶数行
<s:iterator value="qlist" status="st">
<s:if test="#st.odd==true">
第${st.index}行 <li class="odd"><a href="">${title}</a></li>
</s:if>
<s:else>
第${st.index}行 <li><a href="">${title}</a></li>
</s:else>
</s:iterator>
除了使用#status.even判断是否偶数行外,还有其他几个属性可以使用:
1:#status.odd 是否奇数行
2:#status.count 当前行数
3:#status.index 当前行的序号,从0开始『#status.count=#status.index+1』
4:#status.first 是否第一行
5:#status.last 是否最后一行
6:#status.modules(int) 当前行数取模
posted @
2014-11-18 09:47 藤本蔷薇 阅读(260) |
评论 (0) |
编辑 收藏
<div class="vcode">
<h2>验证码</h2>
<input class="vcode-box" id="verifycode">
<img src="/servelt/image22" alt="yanzhengma" id="code" >
<small><a href="JavaScript:refresh();" >换一张</a></small>
</div>
<script type="text/javascript">
function refresh(){
document.getElementById('code').src="/servelt/image22?id="+Math.random();
}
function submit(){
var title=$("#title").val();
var title=$("#content").val();
var title=$("#phone").val();
var title=$("#verifycode").val();
$.ajax({
})
}
</script>
<img src="AuthCodeServlet" onclick="refresh(this)"/>
在一般情况下刷新一次页面,验证码图片也会变化一次,但有时候我们希望验证码图片变化时不刷新整个页面,也就是局部刷新的效果,so easy,代码如下:
Js代码
- <script type="text/javascript">
- function refresh(obj){
- obj.src="AuthCodeServlet?id="+Math.random();
- }
- </script>
其中需要注意的是请求路径中必须要有参数(参数名可随意定义),参数值不能是一个固定值而是随机数。
代码中obj对象是指img标签对象。
posted @
2014-11-14 23:01 藤本蔷薇 阅读(196) |
评论 (0) |
编辑 收藏
<a href="#" style="cursor:default">aaa</a> default 默认光标(通常是一个箭头)
auto 默认。浏览器设置的光标。
crosshair 光标呈现为十字线。
pointer 光标呈现为指示链接的指针(一只手)
move 此光标指示某对象可被移动。
e-resize 此光标指示矩形框的边缘可被向右(东)移动。
ne-resize 此光标指示矩形框的边缘可被向上及向右移动(北/东)。
nw-resize 此光标指示矩形框的边缘可被向上及向左移动(北/西)。
n-resize 此光标指示矩形框的边缘可被向上(北)移动。
se-resize 此光标指示矩形框的边缘可被向下及向右移动(南/东)。
sw-resize 此光标指示矩形框的边缘可被向下及向左移动(南/西)。
s-resize 此光标指示矩形框的边缘可被向下移动(北/西)。
w-resize 此光标指示矩形框的边缘可被向左移动(西)。
text 此光标指示文本。
wait 此光标指示程序正忙(通常是一只表或沙漏)。
help 此光标指示可用的帮助(通常是一个问号或一个气球)。
posted @
2014-11-12 11:12 藤本蔷薇 阅读(398) |
评论 (0) |
编辑 收藏
//点击时根据<a href="" name="column"> 中的name来控制div 的显隐
$(document).ready(function(){
$("a[name='column']").click(function(){
var a = this.id;
$("div[class='hword2 fz14']").each(function(){
var a = $(this).attr("name");
if( $(this).attr("name")==a){
$(this).show();
}else{
$(this).hide();
}
});
});
})
posted @
2014-11-11 16:40 藤本蔷薇 阅读(146) |
评论 (0) |
编辑 收藏
select * from tabA where rownum<10 返回前10条,注意排序问题返回10 - 20 条select * from ((select * from tabA rownum<20) minus (select * from tabA rownum<10))
posted @
2014-11-10 21:26 藤本蔷薇 阅读(1600) |
评论 (0) |
编辑 收藏
Myecliese 启动项目报错-----前言中不允许有内容
我的是因为修改tomcat下面的server.xml文件时保存时编码格式存为Unicode格式了。改回来就ok了
posted @
2014-11-07 14:05 藤本蔷薇 阅读(4961) |
评论 (0) |
编辑 收藏
例如安装路径是(F:\InstallSucces\apache\bin)
第一步:选择安装的盘
f:第二部:进入
cd第三部:路径
cd InstallSucces\apache第四部:进入bin
cd bin第五部:查找版本
httpd -v
posted @
2014-11-07 10:10 藤本蔷薇 阅读(770) |
评论 (0) |
编辑 收藏
一网友问我为什么他写了 h:hidden后报错----- ----hidden must be empty,but is not
我问他是不是 iderateId和l:iterate不一致,要么h:hidden 木有写在iterate里面
他说都是对的,而且b:write 了一句这个属性是有显示的,就是h:hidden和h:text不对
结果是因为 <h:hidden iterateId="id1" property="completeDt" />木有结束符,少了"/"斜杠
posted @
2014-10-29 14:54 藤本蔷薇 阅读(105) |
评论 (0) |
编辑 收藏
ROW_NUMBER()帮助更好的限制结果集行数的功能)
(ROW_NUMBER()函数可以计算每一行数据在结果集中的行号(从1开始计数))
select ROW_NUMBER() OVER(order by FSalary),FNumber,FName,FSalary,FAge from T_Employee
开窗函数只能出现在 SELECT 或 ORDER BY 子句中::也就是说ROW_NUMBER()不能用在WHERE语句中.
select * from (select row_number()over(order by fsalary desc)as rownum,fname,fname,fsalary,fage from t_employee) as a where a.rownum>=3 and a.rownum<=5
MSSQLServer 2000(提 供 了 TOP 关 键 字 用来 返回 结 果 集 中的 前 N条 记录)
select top 5 * from T_Employee order by FSalary Desc 表示:按照工资降序排列的前五条记录
检索工资水平排在前五位(按照工资从高到低)的员工信息.
SELECT top 3 * FROM T_Employee WHERE FNumber NOT IN(SELECT TOP 5 FNumber FROM T_Employee ORDER BY FSalary DESC)ORDER BY FSalary DESC
Oracle(Oracle中支持窗口函数ROW_NUMBER(),其用法和MSSQLServer2005中相同),不过oracle提供了更方便的特性,用来计算行号
oracle为每个结果集都默认增加了一个默认的表示行号的列,这个列的名称为rownum(从1开始计数)
SELECT * FROM T_Employee WHERE rownum<=6 ORDER BY FSalary Desc
当进行检索的时候,对于第一条数据,其rownum为1,因为符合“WHERE rownum<=6”所以被放到了检索结果中;当检索到第二条数据的时候,其rownum为2,因为符合“WHERE rownum<=6”所以被放到了检索结果中……依次类推,直到第七行。
---这是错误的代码
SELECT rownum,FNumber,FName,FSalary,FAge FROM T_Employee WHERE rownum BETWEEN 3 AND 5 ORDER BY FSalary DESC 当进行检索的时候,对于第一条数据,其rownum为1,因为不符合“WHERE rownumBETWEEN 3 AND 5”,所以没有被放到了检索结果中;当检索到第二条数据的时候,因为第
一条数据没有放到结果集中,所以第二条数据的rownum仍然为1,而不是我们想像的2,所以因为不符合“WHERE rownum<=6”,没有被放到了检索结果中;当检索到第三条数据的时候,
因为第一、二条数据没有放到结果集中,所以第三条数据的rownum仍然为1,而不是我们想像的3,所以因为不符合“WHERE rownum<=6”,没有被放到了检索结果中……
DB2也支持row_number(),语法跟mssql和oracle一样,还提供了fetch关键字用来提取前N行..语法为:fetch first 条数 rows only
select * from t_employee order by fsalary desc fetch first 6 rows only --必须注意:fetch字句要放在order by语句后面
- _(单个通配符)
SELECT * FROM T_ Employee WHERE FName LIKE '_erry'
以任意字符开头,剩余部分为“erry"
- 要检索长度为4、第3个字符为“n ",其他字符为任意字符
SELECT * FROM T_ Employee WHERE FName LIKE,'__n_'
- %(多字通配符)
SELECT * FROM T_ Employee WHERE FName LIKE’T%’
以“T”开头,长度任意。
- 姓名中包含字母"n”的员工信息
SELECT * FROM T_ Employee WHERE FName LIKE’%n%’
单字符匹配和多字符匹配还可以一起使用。
SELECT * FROM T_ Employee WHERE FName LIKE’%n_'
上面表示:最后一个字符为任意字符、倒数第_个字符为“n " ,长度任意的字符串。
- 集合匹配[](表示匹配集合中的任意一个)(只有MSSQLServer支持)
SELECT * FROM T_Employee WHERE FName LIKE '[SJ]%'
上面代表:以“S”或者“J“开头长度,长度任意
- 否定符"^"(用来对集合取反)(只有MSSQLServer支持)
SELECT * FROM T_Employee WHERE FName LIKE '[^SJ]%'
posted @
2014-10-29 14:28 藤本蔷薇 阅读(3237) |
评论 (0) |
编辑 收藏
以下是函数说明。懒得看。码着吧
函数名 | 返回值类型 | 作用域 | 参数 | 描述 |
---|
$dp.show | void | 全局 | 无 | 显示日期选择框 |
$dp.hide | void | 全局 | 无 | 隐藏日期选择框 |
$dp.unbind (4.8beta4新增) | void | 全局 | el [string/object]:取消绑定的对象,可传入dom对象或者是对象的ID | 让传入的对象取消日期控件绑定 |
$dp.$D | String | 全局 | id [string]: 对象的ID arg [object]: 日期差量,可以设置成 {y:[值],M:[值],d:[值],H:[值],m:[值],s:[值]} 属性 y,M,d,H,m,s 分别代表 年月日时分秒 {M:3,d:7} 表示 3个月零7天 {d:1,H:1} 表示1天多1小时 | 将id对应的日期框中的日期字符串,加上定义的日期差量,返回使用real格式化后的日期串 参考 示例 4-3-2 |
$dp.$DV | String | 全局 | v [string]: 日期字符串 arg [object]: 同上例的arg | 将传入的日期字符串,加上定义的日期差量,返回使用real格式化后的日期串 参考 示例 4-3-3 |
以下函数只在事件自定义函数中有效 |
$dp.cal.getP | String | 事件function | p [string]: 属性名称 yMdHmswWD分别代表年,月,日,时,分,秒,星期(0-6),周(1-52),星期(一-六) f [string]: format 格式字符串 设置方法参考 1.4 自定义格式 | 返回所指定属性被格式字符串格式化后的值[单属性],在changing,picking,clearing事件中返回选择前的值 参考 示例 1-2-2 |
$dp.cal.getDateStr | String | 事件function | f [string]: 格式字符串,为空时使用dateFmt
| 返回所指定属性被格式字符串格式化后的值[整个值],在changing,picking,clearing事件中返回选择前的值 |
$dp.cal.getNewP | String | 事件function | 用法同$dp.cal.getP | 返回所指定属性被格式字符串格式化后的值[单属性],在changing,picking,clearing事件中返回选择后的值 |
$dp.cal.getNewDateStr | String | 事件function | 用法同$dp.cal.getDateStr | 返回所指定属性被格式字符串格式化后的值[整个值],在changing,picking,clearing事件中返回选择后的值 |
属性名 | 返回值类型 | 作用域 | 参数 | 描述 |
---|
$dp.cal.date | object | 事件function | $dp.cal.date.y:返回 年 $dp.cal.date.M:返回 月 $dp.cal.date.d:返回 日 $dp.cal.date.H:返回 时 $dp.cal.date.m:返回 分 $dp.cal.date.s:返回 秒
| 在changing,picking,clearing事件中返回选择前的日期对象 |
$dp.cal.newdate | object | 事件function | 用法同$dp.cal.date | 在changing,picking,clearing事件中返回选择后的日期对象 |
<h:script src="/common/javascripts/My97DatePicker/WdatePicker.js"/>
//这是让其只显示年份
<input id="Ddl_Year" type="text" runat="server" onfocus="WdatePicker({skin:'default',dateFmt:'yyyy'})" class="Wdate" style=" width:80px;"/>
//onpicked:pickedFunc
<input type="text" style="float:right" name="checkdate" onfocus="WdatePicker({skin:'default',dateFmt:'yyyy',onpicked:pickedFunc})" class="Wdate"/>
JS 代码
function pickedFunc(){
alert($dp.cal.getP('y'));
alert($(this).val());
};
posted @
2014-10-22 15:23 藤本蔷薇 阅读(12766) |
评论 (2) |
编辑 收藏
SELECT TO_CHAR(T.vc_ts,'YYYY') yearRe,TO_CHAR(T.vc_ts,'Q') timeRe,COUNT(*) countRe
FROM table
WHERE t.vc_status='0'
GROUP BY TO_CHAR(T.vc_ts,'Q'),TO_CHAR(T.vc_ts,'YYYY')
按年份的季度查询
select
year as 年,
sum(case when quarter=1 then sale end) as 一季度,
sum(case when quarter=2 then sale end) as 二季度,
sum(case when quarter=3 then sale end) as 三季度,
sum(case when quarter=4 then sale end) as 四季度
from table_name
group by year
综合以上SQL
SELECT annual.YEAR,
SUM(CASE when annual.TIME='1' then annual.COUNT else 0 end ) AS 一季度,
SUM(CASE when annual.TIME='2' then annual.COUNT else 0 end ) AS 二季度,
SUM(CASE when annual.TIME='3' then annual.COUNT else 0 end ) AS 三季度,
SUM(CASE when annual.TIME='4' then annual.COUNT else 0 end ) AS 四季度
FROM(
SELECT TO_CHAR(T.vc_ts,'YYYY') YEAR,TO_CHAR(T.vc_ts,'Q') TIME,COUNT(*) COUNT
FROM table T
WHERE t.vc_status='0'
GROUP BY TO_CHAR(T.vc_ts,'Q'),TO_CHAR(T.vc_ts,'YYYY')
) annual GROUP BY annual.YEAR
posted @
2014-10-22 11:53 藤本蔷薇 阅读(2079) |
评论 (0) |
编辑 收藏
在页面中传数组
<h:hiddendata property="select_objs" />
页面中需要注意的写法
posted @
2014-09-26 17:28 藤本蔷薇 阅读(576) |
评论 (0) |
编辑 收藏
想List中添加对象总是重复数据的原因EXcel上传数据到数据库源码
posted @
2014-09-20 23:43 藤本蔷薇 阅读(749) |
评论 (0) |
编辑 收藏