1、Question Person p1 = (Person) s2.get(Person.class, “402881e4345a53ce01345a543b9a0004“);System.out.println(“第一次查询“+p1); /查询获取一个新的对象s2.clear(); /将一级缓存中的数据清除boolean boo = /判断二级缓存中,是否存在此对象,为trueHibernateUtils.getSessionFactory().getCache().containsEntity(Person.class,“402881e4345a53ce01345a543b9a0004“);
2、System.out.println(“是否存在这个对象: “+boo);/truePerson p2 = (Person) s2.get(Person.class, “402881e4345a53ce01345a543b9a0004“);/read-writeg下为什么不查二级缓存System.out.println(“同一个session第二次查询“+p2);/使用同一个session查询,结果因为是 read-write,/因为对象已经上锁,所以不会从二级缓存中返回数据/s2.close(); /关闭或是不关闭System.out.println(“上一个Session关闭以后“);Se
3、ssion s3 = HibernateUtils.openSession();boo = HibernateUtils.getSessionFactory().getCache().containsEntity(Person.class,“402881e4345a53ce01345a543b9a0004“);System.out.println(“是否存在这个对象: “+boo);/truePerson p3 = (Person) s3.get(Person.class, “402881e4345a53ce01345a543b9a0004“);/read-write下,为什么这儿查二级缓存S
4、ystem.out.println(p3);s3.close();2、为什么 16 进制数要与 OxFF 与运算以下是 MD5 加密算法示例,其中使用了 OxFF 的与运算:Testpublic void md5() throws ExceptionString pwd = “1234“;MessageDigest md = MessageDigest.getInstance(“MD5“);byte bts = md.digest(pwd.getBytes();/16位pwd = “;for(byte bt : bts)System.err.println(“src: “+bt);String
5、 str = Integer.toHexString(bt);System.err.println(“src:-“ +str);str = Integer.toHexString(bt /为儿在算MD5时为什么与要0xff进行与运算呢System.err.println(“dest:“ +str);if(str.length():“+str);g2d.dispose();ImageIO.write(img, “JPEG“,resp.getOutputStream();4、MySQL 区分大小写的查询mysql 查询默认是不区分大小写的 如:select * from table_name wh
6、ere a like a% select * from table_name where a like A% select * from table_name where a like a%select * from table_name where a like A%效果是一样的。 要让 mysql 查询区分大小写,可以:select * from table_name where binary a like a% select * from table_name where binary a like A% select * from table_name where binary a l
7、ike a%select * from table_name where binary a like A%也可以在建表时,加以标识 create table table_name(a varchar(20) binary5、在 Hibernate 的区分大小写的查询首先,必须要创建数据库时,指字某个列为区别大小写:CREATE TABLE person(id VARCHAR(32) PRIMARY KEY,NAME VARCHAR(30) BINARY /此列使用了 binary,是指区别大小写的查询);然后在 Hibernate 中:String hql = “from Person whe
8、re lower(name)=jjj“; /注意这儿使用的lower关键字List list = sess.createQuery(hql).list()System.err.println(list);list = sess.createCriteria(Person.class).add(Restrictions.eq(“name“, “jjj“).ignoreCase().list(); /注意这儿使用了ignoreCase方法。System.err.println(“:“+list);6、MySql 执行存储过程时错误的处理方式创建一个简单的存储过程:DELIMITER $CREATE
9、 PROCEDURE proc_book()BEGINSELECT * FROM book;END $DELIMITER ;调用这个存储过程:CALL proc_book();有可能会出现以下错误代码:ERROR 1436 (HY000): Thread stack overrun修改方式如下:修改My.ini 中的配置thread_stack = 256K 原来是 128K,将内存修改成 256K 即可。7、反射判断一个方法拥有什么参数设置不同的值package cn.itcast.loader2;/* 被反射类* author 王健* version 1.0 2012-3-7*/publi
10、c class Hello /假设以下方法有什么参数都不明确public void sayHi(String aa,Integer age,int mm)System.err.println(“Hello:“+aa+“,“+age+“,“+mm);调用类如下:package cn.itcast.loader2;import java.lang.reflect.Method;/* 判断有什么类型的参数,设置不同的值* author 王健* version 1.0 2012-3-7*/public class ParamDemo public static void main(String arg
11、s) throws Exception Class cls = Hello.class;Method ms = cls.getDeclaredMethods();for(Method m:ms)if(m.getName().equals(“sayHi“)Class clses = m.getParameterTypes();Object oo = new Objectclses.length;for(int i=0;ioo.length;i+)System.err.println(i+“,“+clsesi.getSimpleName();if(clsesi.getSimpleName().eq
12、uals(“String“)ooi = new String(“noname“);else if(clsesi.getSimpleName().equals(“Integer“)ooi = new Integer(0);else if(clsesi.getSimpleName().equals(“Boolean“)ooi = new Boolean(false);else if(clsesi.getSimpleName().equals(“int“)ooi = 90;/TODO:,别外还应该判断Double,Float,double,float,byte,Byte,Character,charSystem.err.println(“-“);