(随时添加更新)本人code中积累或总结

1 一定要注意资源使用以后要释放,比如数据库的连接,流的使用,一些API中明文显示的可以不关闭.
2 工作中一定要考虑到多线程的情况,为了避免多线程引起的exception,尽量不用全局变量,用局部变量.
3.文件路径中包含空格或其他符号时,如F:/Program Files/xxxxx  时,请用API中的URLDecoder编下码,如Strng path = URLDecoder.decode("F:/Program Files/xxxxx","UTF-8");
4.最优化的SQL Server查询分页语句
declare @pagesize int;
set @pagesize=10
declare @currentpage int
set @currentpage=3
--print @currentpage
select * from
(   select TOP (@pagesize) * FROM
( SELECT TOP ((@currentpage)*(@pagesize))   * from ipaddressmappings   ORDER BY id ASC ) as atable  
ORDER BY id DESC ) as btable  
ORDER BY id ASC
//======================
先按照id从小到大升序取出30条记录(3*10),也就是:id 在 1-30 之间的记录 (SELECT TOP 30   * from user_table   ORDER BY id ASC)

然后按照ID降序排列这30条记录,得到记录为id 在:从30到 1 

然后在这些30条记录中取出前10条记录:取得的记录为:id 在30-21之间。这就是我们需要的数据,但这时是按照降序排列的,不符合要求。

最后在重新排序得到最终我们需要的数据。id在21-30之间。

5 oracle order by 分页sql语句
select * from  mobileuser  where id in(select id from (select rownum rn,id from(select id ,expiretime from
mobileuser order by expiretime desc) where rownum<20) where rn>0) order by expiretime desc
6.
String[] test = new String[]{"test1","test2","test3","test4"};
System.out.prinitln(test.toString());
这时打印出来的是[Ljava.lang.String;@c17164
[代表数据的意思,Ljava.......是指String数组,后面是散列值
System.out.println(java.util.Arrays.toString(test));
这时会把这些值打印出来
[test1, test2, test3,test4]
还有一个方法,是说如果String数组里面还有数组的时候,可以用下面的方法打印出来

        Object[] test= new Object[] {
                "javaeye", new Object[] {}, 
                "wenth", new Object[] {},
                "laserdance", new Object[] { "wenth" },
                "javaeye", new Object[] { "wenth", "laserdance"} };
		System.out.println(java.util.Arrays.deepToString(test));


此时会显示什么呢

[javaeye, [], wenth, [], laserdance, [wenth], javaeye, [wenth, laserdance]]



7
今天偶然在javaeye上看到一个排序的问题,说如果用Map来存储时如果key重复会将后面的value替换掉,怎样避免这个问题.后来是用了OO的方式.即给它创建出一个对象来,然后在实现Comparable接口,将比较方法覆盖即可.

public class OOTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// 
//读文件,
		BufferedReader br = null;
		List<Account> lists = new ArrayList<Account>();
		try{
			br = new BufferedReader(new InputStreamReader(new FileInputStream("a.txt")));
			String line ="";
			while((line = br.readLine()) != null){
				String[] arrs = line.split(",");
				Account account = new Account(arrs[0],Double.parseDouble(arrs[1]));
				lists.add(account);
			}
			java.util.Collections.sort(lists);
			for(Account a : lists){
				System.out.println(a.name);
				System.out.println(a.deposit);
			}
			
		}catch(Exception ex){
			System.err.println(ex.toString());
		}
		
	}
	static class Account implements Comparable<Account>{
		String name;
		double deposit;
		public Account(String name,double deposit){
			this.name  = name;
			this.deposit = deposit;
		}
		@Override
		public int compareTo(Account account) { 
			//小到大
//			return this.deposit > account.deposit ? 1:(this.deposit == account.deposit? 0 : -1);
			//大到小
			return account.deposit > this.deposit ? 1:(account.deposit == this.deposit? 0 : -1);
		}
	}
}


a.txt文件里的内容是

小王,3234
小张,2342
小强,1030
小周,1020
小李,4564
小李,456444
阿斯顿,23444


最后输出结果是将a.txt按一定顺序再保存为一个新文件,保存大家都会,这里我只演示了用list存储的,最后console输出为

小李
456444.0
阿斯顿
23444.0
小李
4564.0
小王
3234.0
小张
2342.0
小强
1030.0
小周
1020.0


8
maven使用jetty6发布应用

mvn jetty:run


default是jetty5版本的,如果用jetty6可以在pom.xml中添加如下代码

<plugins>   
    <plugin>   
        <groupId>org.mortbay.jetty</groupId>   
        <artifactId>maven-jetty-plugin</artifactId>   
        <version>6.1.6</version>   
    </plugin>   
</plugins>  


9
这是由《程序员》杂志社评出的,刊登在《程序员》2007 年 3 月刊上。程序员的七种基本技能是:数组,字符串与哈希表、正则表达式、调试、两门语言、一个开发环境、SQL 语言和编写软件的思想。
10

   for(int i = 0; i < 100;i++){
   //do some work
  }
  for(int i =100; i>0;i--){
    //do some work
  }


问上面这两种循环哪一个方式要快一些,google一下,发现原来是和底层的C有关,据高手说是反编译以后--比++少了一条CPU的指令,所以--比++用时要少.今天真是学到东西了,大开眼界,还有的仁兄说是因为和100比较不如和0比较来的快是因为只要判断一下i的第一位,即符合位即可.如果和100比较,就得用binary的多位进行比较才可以,所以比较耖时

11.隐藏图片地址的小技巧:
假如您有一图片不希望被别人盗链,请 用如下方法,以Java中为例

  <img src="/images/logo.png" alt="logo" />


如果我们像上面写图片地址,则别人就可以直接下载这个地址或盗链该图片,这里我们使用下面代码来阻止别人查看图片真实地址

  <img src="./images.jsp?image=logo" alt="logo"/>


我们另新建一个images.jsp文件,里面的内容为

   <%
      String filepath = request.getParameter("image");
      response.sendRedirect("/images/"+filepath+".png");
   %>


此时我们再右击图片地址,会看连接地址为images.jsp?image=logo,从而达到隐藏图片真实地址的目的。
12  xml中无效字符的转义

&lt;    <         小于号
&gt;   >         大于号
&amp;    &     和
&apos;    '     单引号
&quot;     "    双引号

13.

用远程登陆客户端登陆linux
进入tomcat/logs/文件夹下
键入指令:tail -f catalina.out

这样就可以与本地电脑一样查看TOMCAT的控制台了

 14

log4j 输出的日志编码与平台有关吧,但我想出输出 UTF-8 的日志文件呢。可以在log4j.properties文件里用 encoding=UTF-8

log4j.appender.FILE=org.apache.log4j.FileAppender   
log4j.appender.FILE.Append=false   
log4j.appender.FILE.File=file.log   
log4j.appender.FILE.encoding=UTF-8   
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout   
log4j.appender.FILE.layout.ConversionPattern=%d - %c -%-4r [%t] %-5p - %m%n  

15

MySQL导出的SQL语句在导入时有可能会非常非常慢,经历过导入仅45万条记录,竟用了近3个小时。在导出时合理使用几个参数,可以大大加快导 入的速度。

-e 使用包括几个VALUES列表的多行INSERT语法;
--max_allowed_packet=XXX 客户端/服务器之间通信的缓存区的最大大小;
--net_buffer_length=XXX  TCP/IP和套接字通信缓冲区大小,创建长度达net_buffer_length的行。

注意:max_allowed_packet和net_buffer_length不能比目标数据库的设定数值 大,否则可能出错。

首先确定目标库的参数值

mysql>show variables like 'max_allowed_packet';
mysql>show variables like 'net_buffer_length';

根据参数值书写mysqldump命令,如:
E:\eis>mysqldump -uroot -p eis_db goodclassification -e --max_allowed_packet=1048576 --net_buffer_length=16384 >good3.sql

之前2小时才能导入的sql现在几十秒就可以完成了。

  

你可能感兴趣的:(sql,maven,log4j,mysql,SQL Server)