我在servlet上下文启动时通过以下代码在H2数据库中创建一个内存数据库
void initDb() {
try {
webserver = Server.createWebServer().start();
Class.forName("org.h2.Driver");
Connection conn = DriverManager.getConnection("jdbc:h2:mem:db1;DB_CLOSE_DELAY=-1","SA","");
InputStream in = getClass().getResourceAsStream("script.sql");
if (in == null) {
System.out.println("Please add the file script.sql to the classpath, package " + getClass().getPackage().getName());
} else {
RunScript.execute(conn, new InputStreamReader(in));
Statement stat = conn.createStatement();
ResultSet rs = stat.executeQuery("SELECT TO_CHAR(bday,'DD/MM/yyyy hh24:mi') FROM TEST2");
while (rs.next()) {
System.out.println(rs.getString(1));
}
rs.close();
stat.close();
conn.commit();
conn.close();
}
//accessed using url jdbc:h2:tcp://localhost/mem:db1
try{
CachedRowSet crs = new DBConnector().executeQuery("select * from test2");
while(crs.next()){
System.out.println("ARGUMENT_NAME:"+crs.getString(1));
// System.out.println(",DATA_TYPE:"+crs.getString("DATA_TYPE")); …Run Code Online (Sandbox Code Playgroud) 我遇到了这种奇怪的情况,其中像javascript构造的foreach在IE中不起作用,但它在FF中工作.好吧,并非所有for..in这些特殊的功能都不起作用.我会发布代码.在IE8中测试过.使用XHTML DTD进行测试.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> Test </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
</HEAD>
<script type="text/javascript">
<!--
String.prototype.format = function() {
var formatted = this;
var mycars = new Array(); //some
mycars[0] = "Saab";
mycars[1] = "Volvo";
mycars[2] = "BMW";
var arg;
for (arg in mycars) { alert('it comes here');
formatted = formatted.replace("{" + arg + "}", arguments[arg]); }
return formatted;
};
String.prototype.format2 = function() …Run Code Online (Sandbox Code Playgroud) 1)如果我使用以下Class.forName()被多次调用,它会导致内存泄漏吗?
Class.forName("MyClass")
Run Code Online (Sandbox Code Playgroud)
2)或者,是tomcat的WebAppClassLoader将检查是否"MyClass"已经加载并使用缓存的实例.
3)如果问题(2)的答案是"否"那么,如果我已经打开PermGen扫描并设置相关的jvm参数,那么先前加载的类是否会被垃圾收集.
如果我想避免重新加载类,那么使用类实例缓存的最佳方法是什么.我可以将类实例存储为HashMap
我想知道以下哪个在使用100k +记录执行查询的时间方面表现更好
1)Oracle的分页
SELECT *
FROM (
SELECT id, col1, col2, rownum rn
FROM (
SELECT /*+ first_rows(50) */ id, col1, col2
FROM table1
ORDER BY id DESC
)
WHERE rownum <= 50
)
WHERE rn >= 20;
Run Code Online (Sandbox Code Playgroud)
2)使用MyBatis RowBounds进行分页.
MyBatis RowBounds使用普通的JDBC,在触发select之后,它会跳过前20个记录,然后获取接下来的30个(pagesize).
此外,随着页面数量的增加,MyBatis方法会变慢,因为需要跳过更多行吗?
有人可以向我解释为什么在声明中使用closure2时initVars('c')无法修改引用的对象@Field?
import groovy.transform.Field;
@Field def lines4 = "a";
void initVars(String pref){
println('init:'+lines4+' '+pref) //*3.init:a b *7.init:b c
lines4 = pref;
}
println("closure1") ///1. closure1
1.times {
println(lines4) ///2. a
initVars('b') ///3. init:a b
lines4 += 'p1'
println(lines4) ///4. bp1
}
println("closure2") ///5. closure2
1.times {
println(lines4) ///6. bp1
initVars('c') ///7. init:b c
println(lines4) ///8. bp1 Why not c
lines4 += 'q1'
println(lines4) ///9. bp1q1 Why not cq1
}
Run Code Online (Sandbox Code Playgroud)
输出:
C:\projects\ATT>groovy test.groovy
1. closure1
2. a
3. …Run Code Online (Sandbox Code Playgroud) arguments ×1
classloader ×1
foreach ×1
groovy ×1
h2 ×1
ibatis ×1
java ×1
javascript ×1
jdbc ×1
memory-leaks ×1
mybatis ×1
oracle ×1
sql ×1