只显示主题贴
做数据库操作,免不了出现以下代码来释放数据库资源
finally{
if(rs!=null){
try{
rs.close();
}catch(Exception ex){
log(ex);
}
}
if(st!=null){
try{
st.close();
}catch(Exception ex){
log(ex);
}
}
if(conn!=null){
try{
conn.close();
}catch(Exception ex){
...
- 进入论坛 入门讨论 版
maybe723 写道Class a=ClassA.class;
Object o=a.newInstance(); //不这样如何获得初值
Field f=a.getDeclaredField("field0");
f.setAccessible(true);
System.out.print(f.get(o));
关键是调用 newInstance,本身也是 class.getConstructor().invoke()出来的玩意,那么构造函数尤其是比如默认构造函数如何知道这些值的初值??显然应该在类文件里面保存一个常量池,保存了这些值才对
不过我是这么认为,但是Class类没有提供A ...
- 进入论坛 入门讨论 版
如果是在常量池里面恐怕无法回收,至少我是没找到方法
如果是new String()当GC调用且该对象无强引用的时候有可能被回收,实际上也就不用管了
- 进入论坛 入门讨论 版
…………
可能我没说清楚,我的意思是,当类未实例化的时候……
也就是比方说,我拿到ClassA.class这个Class对象时如何获取初值
当然,ClassA.class.newInstance().getDeclaredMethod("someString").invoke()的确可以……
总而言之多谢了,一个下午都没找到Class类里面类似功能的API,包括Javassist里的CtClass类,所以……一会直接考虑这样做算了
- 进入论坛 入门讨论 版
比如定义如下class
public class ClassA{
private int field0=100;
}
ClassA应该保存了field0的默认值100,但是无论Class或者Field类的API都未提供如何拿到这个默认值的方法。有知情人望告知一下,谢谢
- 进入论坛 入门讨论 版
加入索引后的测试结果出来了,很遗憾……加入(id, field0, field1)索引后,引入一个 id>xxx 的条件就能提高效率的想法依然TMD扯淡!!
- 进入论坛 入门讨论 版
假定考虑一个500万的一张表,其中包括三个字段:
id:long
field0:varchar
field1:int
那么分页SQL如下,取第一万页的内容
String sql1="select * from table_A where field0 like 'value 2%' and field1>125111299 and field1<858233449 limit 300000,30";
测试结果,当未建立索引的时候,大约是5-8秒左右,建立索引后大约是1秒左右
结论很简单,建立索引的必须性。数据大约占硬盘空间为600M,加入索引(field0,field1)之后 ...
- 进入论坛 入门讨论 版
ddandyy 写道运行一个DAO UPDATE的时候 居然会发给另一个DAO ROLLBACK命令 你不觉得诡异么
貌似我想了想解决的办法就是如此……简单的改了一下模拟的测试用的业务逻辑,第一时间执行 sql1 ,隔4秒执行 sql2
public Object call() throws Exception {
while(true){
Thread.currentThread().sleep(timeOut); try{
conn.createStatement().executeUpdate(sql1);
}catch(SQLEx ...
- 进入论坛 入门讨论 版
ddandyy 写道死锁确实是数据库锁定
但是你这样就说他是数据库级别................就过分了吧........
死锁完全是因为业务问题
再好的数据库 发两条SQL过去 该死锁还是死锁
多谢多谢
呃……我说错了,应该不说是数据库级别,或者说,应该是dao层或者持久层关注的东西。
这种问题应该很常见,于是觉得JDBC应该提供了解决方案,比如,简单来说,我想当然的认为既然JDBC检测到了死锁问题,那么哪些资源冲突Connection应该清除,那么实际上Connection可以存储一次事务前几次的操作,然后“rollback”直到释放这些资源,再然后比如 wait(1000 ...
- 进入论坛 入门讨论 版
情况大概是这样的
表table_A,和表table_B,在分属不同的业务逻辑中会以不同顺序进行更新
比如
业务逻辑business_X:
getConnection;
update table_A;
update table_B;
commit or rollback;
业务逻辑business_Y:
getConnection;
update table_B;
update table_A;
commit or rollback;
测试代码我用几个线程并发进行顺序的控制,关键代码如下
public class TestRun implements Callable< ...
- 进入论坛 入门讨论 版







评论排行榜