Java代码
public class DBHelper {
private String driverName;
private String url;
private String user;
private String password;
private Connection connection;
private String createTableSql;
private String dropTableSql;
public void getConnection() {
if (null == connection) {
try {
Class.forName(driverName);
connection = DriverManager.getConnection(url, user, password);
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
}
}
public void closeConnection() {
if (null != connection) {
try {
connection.close();
connection = null; //connection.close won‘t set the connection to be null
System.out.println("closed db connection.");
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public void createTable() {
getConnection();
Statement stmt = null;
try {
stmt = connection.createStatement();
stmt.execute(createTableSql);
System.out.println("Executed sql [" + createTableSql + "] success.");
} catch (SQLException e) {
e.printStackTrace();
}
closeConnection();
}
public void dropTable() {
getConnection();
Statement stmt = null;
try {
stmt = connection.createStatement();
stmt.execute(dropTableSql);
System.out.println("Executed sql [" + dropTableSql + "] success.");
} catch (SQLException e) {
e.printStackTrace();
}
closeConnection();
}
public String getDriverName() {
return driverName;
}
public void setDriverName(String driverName) {
this.driverName = driverName;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getUser() {
return user;
}
public void setUser(String user) {
this.user = user;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getCreateTableSql() {
return createTableSql;
}
public void setCreateTableSql(String createTableSql) {
this.createTableSql = createTableSql;
}
public String getDropTableSql() {
return dropTableSql;
}
public void setDropTableSql(String dropTableSql) {
this.dropTableSql = dropTableSql;
}
}
Java代码
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Test connecting mysql db</title>
</head>
<body>
<jsp:useBean id="dbHelper" class="com.jesse.jsp.bean.DBHelper" />
<jsp:setProperty property="driverName" name="dbHelper" value="com.mysql.jdbc.Driver"/>
<jsp:setProperty property="url" name="dbHelper" value="jdbc:mysql://192.168.1.104:3306/db_jesse?useUnicode=true&characterEncoding=GBK"/>
<jsp:setProperty property="user" name="dbHelper" value="jesse"/>
<jsp:setProperty property="password" name="dbHelper" value="jesse"/>
<jsp:setProperty property="createTableSql" name="dbHelper" value="create table test_tbl(id int)"/>
<jsp:setProperty property="dropTableSql" name="dbHelper" value="drop table test_tbl"/>
<%!
private int id = 0;
%>
<%
System.out.println(this); //to check if the servlet is singleton
id++;
synchronized(com.jesse.jsp.bean.DBHelper.class) {
dbHelper.createTable();
System.out.println(id + " created the table.");
Thread.sleep(5000);
dbHelper.dropTable();
System.out.println(id + " dropped the table.");
}
%>
</body>
</html>
Java代码
[email protected]
Executed sql [create table test_tbl(id int)] success.
closed db connection.
1 created the table.
[email protected]
Executed sql [drop table test_tbl] success.
closed db connection.
2 dropped the table.
Executed sql [create table test_tbl(id int)] success.
closed db connection.
2 created the table.
Executed sql [drop table test_tbl] success.
closed db connection.
2 dropped the table.
Note:本意是要让log打印出来是哪个session在执行,看到结果...又长知识了 <%! %> 查了下,觉得这种说法有道理,暂不深究: <%%>是代码段,在由jsp转换成Servlet后 <%%>中的代码是放在serive方法中,相当于doGet()和doPost()方法 <%!%>是jsp声明,用来定义属性和方法的,在由jsp转换成Servlet后 <%!%>中的代码是放serive方法之外的.