-1.使用脚本建立kasai数据库,并插入初始权限相关信息,及超级用户信息。数据库脚本如下:
-- KASAI数据库创建
-- for MySQL 4.x and above
CREATE TABLE kasai_users
(
id VARCHAR(50) NOT NULL,
first_name VARCHAR(50),
last_name VARCHAR(50),
email VARCHAR(254),
password VARCHAR(254),
blocked INT,
description VARCHAR(254),
data TEXT,
super_user TINYINT default 0,
PRIMARY KEY (id)
) TYPE=InnoDB;
CREATE TABLE kasai_groups
(
id VARCHAR(50) NOT NULL,
description VARCHAR(254),
blocked INT,
system TINYINT default 0,
data TEXT,
PRIMARY KEY CLUSTERED (id)
) TYPE=InnoDB;
CREATE TABLE kasai_users_groups
(
id_user VARCHAR(50) NOT NULL,
id_group VARCHAR(50) NOT NULL,
PRIMARY KEY (id_user,id_group ),
INDEX IDX_kasai_users_groups_user (id_user),
INDEX IDX_kasai_users_groups_group (id_group),
CONSTRAINT FK_users_groups_users FOREIGN KEY( id_user )
REFERENCES kasai_users ( id )
ON UPDATE NO ACTION
ON DELETE CASCADE,
CONSTRAINT FK_users_groups_groups FOREIGN KEY( id_group )
REFERENCES kasai_groups ( id )
ON UPDATE NO ACTION
ON DELETE CASCADE
) TYPE=InnoDB;
CREATE TABLE kasai_operatives
(
id VARCHAR(254) NOT NULL,
sequence INT,
description VARCHAR(254),
PRIMARY KEY CLUSTERED (id )
) TYPE=InnoDB;
CREATE TABLE kasai_objects
(
id VARCHAR(254) NOT NULL,
PRIMARY KEY (id )
) TYPE=InnoDB;
CREATE TABLE kasai_roles
(
id int auto_increment NOT NULL,
name VARCHAR(50) NOT NULL,
description VARCHAR(254),
PRIMARY KEY (id )
) TYPE=InnoDB;
CREATE TABLE kasai_roles_operatives
(
id_role int NOT NULL,
id_operative VARCHAR(254) NOT NULL,
PRIMARY KEY (id_role,id_operative ),
INDEX IDX_kasai_roles_operatives_role (id_role),
INDEX IDX_kasai_roles_operatives_operative (id_operative),
CONSTRAINT FK_roles_operatives_operatives FOREIGN KEY( id_operative )
REFERENCES kasai_operatives ( id )
ON UPDATE NO ACTION
ON DELETE CASCADE,
CONSTRAINT FK_roles_operatives_roles FOREIGN KEY( id_role )
REFERENCES kasai_roles ( id )
ON UPDATE NO ACTION
ON DELETE CASCADE
) TYPE=InnoDB;
CREATE TABLE kasai_objects_users_roles(
id int auto_increment NOT NULL,
id_object VARCHAR(254) NOT NULL,
id_user VARCHAR(50) NOT NULL,
id_role int NOT NULL,
PRIMARY KEY (id ),
UNIQUE (id_object, id_user, id_role),
INDEX IDX_kasai_objects_users_roles_object (id_object),
INDEX IDX_kasai_objects_users_roles_user (id_user),
INDEX IDX_kasai_objects_users_roles_role (id_role),
CONSTRAINT FK_objects_users_roles_roles FOREIGN KEY( id_role )
REFERENCES kasai_roles ( id )
ON UPDATE NO ACTION
ON DELETE CASCADE,
CONSTRAINT FK_objects_users_roles_objects FOREIGN KEY( id_object )
REFERENCES kasai_objects ( id )
ON UPDATE NO ACTION
ON DELETE CASCADE,
CONSTRAINT FK_objects_users_roles_users FOREIGN KEY( id_user )
REFERENCES kasai_users ( id )
ON UPDATE NO ACTION
ON DELETE CASCADE
) TYPE=InnoDB;
CREATE TABLE kasai_objects_groups_roles(
id int auto_increment NOT NULL,
id_object VARCHAR(254) NOT NULL,
id_group VARCHAR(50) NOT NULL,
id_role int NOT NULL,
PRIMARY KEY (id ),
INDEX IDX_kasai_objects_groups_roles_object (id_object),
INDEX IDX_kasai_objects_groups_roles_group (id_group),
INDEX IDX_kasai_objects_groups_roles_role (id_role),
UNIQUE (id_object, id_group, id_role),
CONSTRAINT FK_objects_groups_roles_roles FOREIGN KEY( id_role )
REFERENCES kasai_roles ( id )
ON UPDATE NO ACTION
ON DELETE CASCADE,
CONSTRAINT FK_objects_groups_roles_objects FOREIGN KEY( id_object )
REFERENCES kasai_objects ( id )
ON UPDATE NO ACTION
ON DELETE CASCADE,
CONSTRAINT FK_objects_groups_roles_groups FOREIGN KEY( id_group )
REFERENCES kasai_groups ( id )
ON UPDATE NO ACTION
ON DELETE CASCADE
) TYPE=InnoDB;
CREATE TABLE kasai_audit(
audit_id INT AUTO_INCREMENT NOT NULL,
user_id VARCHAR(50) NOT NULL,
date_time DATETIME NOT NULL,
return_code INT NOT NULL,
error_description VARCHAR(254),
duration INT,
client_ip VARCHAR(15),
operation VARCHAR(254) NOT NULL,
object_id VARCHAR(254),
transaction_data TEXT,
PRIMARY KEY (audit_id)
) TYPE=InnoDB;
-- Operatives
INSERT INTO kasai_operatives (id,sequence,description) VALUES('kasai','1','All permissions over Kasai');
INSERT INTO kasai_operatives (id,sequence,description) VALUES('kasai.object.modifyaccess','2','Modify an object permissions');
INSERT INTO kasai_operatives (id,sequence,description) VALUES('kasai.user','5','All permissions involving users');
INSERT INTO kasai_operatives (id,sequence,description) VALUES('kasai.user.read','6','Read user information');
INSERT INTO kasai_operatives (id,sequence,description) VALUES('kasai.user.delete','7','Delete a user');
INSERT INTO kasai_operatives (id,sequence,description) VALUES('kasai.user.commit','8','Create and update a users information');
INSERT INTO kasai_operatives (id,sequence,description) VALUES('kasai.user.resetpassword','9','Reset a users password');
INSERT INTO kasai_operatives (id,sequence,description) VALUES('kasai.user.block','10','Block a user');
INSERT INTO kasai_operatives (id,sequence,description) VALUES('kasai.user.unblock','11','Unblock a user');
INSERT INTO kasai_operatives (id,sequence,description) VALUES('kasai.group','12','All permissions involving groups');
INSERT INTO kasai_operatives (id,sequence,description) VALUES('kasai.group.read','13','Read group information');
INSERT INTO kasai_operatives (id,sequence,description) VALUES('kasai.group.delete','14','Delete a group');
INSERT INTO kasai_operatives (id,sequence,description) VALUES('kasai.group.commit','15','Create and update a groups information');
INSERT INTO kasai_operatives (id,sequence,description) VALUES('kasai.group.block','16','Block a group');
INSERT INTO kasai_operatives (id,sequence,description) VALUES('kasai.group.unblock','17','Unblock a group');
INSERT INTO kasai_operatives (id,sequence,description) VALUES('kasai.group.user.delete','18','Remove users from a group');
INSERT INTO kasai_operatives (id,sequence,description) VALUES('kasai.group.user.add','19','Add users to a group');
INSERT INTO kasai_operatives (id,sequence,description) VALUES('kasai.role.commit','20','Create and update a role information');
INSERT INTO kasai_operatives (id,sequence,description) VALUES('kasai.role.read','21','Read role information');
INSERT INTO kasai_operatives (id,sequence,description) VALUES('kasai.role.delete','22','Delete a role');
INSERT INTO kasai_operatives (id,sequence,description) VALUES('blacklist.add',100,'add');
INSERT INTO kasai_operatives (id,sequence,description) VALUES('blacklist.delete',101,'delete');
INSERT INTO kasai_operatives (id,sequence,description) VALUES('blacklist.edit',102,'edit');
INSERT INTO kasai_operatives (id,sequence,description) VALUES('blacklist.query',103,'query');
INSERT INTO kasai_operatives (id,sequence,description) VALUES('blacklist.detail',104,'detail');
-- Groups
insert into kasai_groups (id,description,blocked,data) values ('Administrators','Administrators group',0,null);
insert into kasai_groups (id,description,blocked,system,data) values ('AllUsers','All system users',0,1,null);
-- Users
-- This two sample users have the password set to "password" using a SHA hashing algorithm
insert into kasai_users (id, password,blocked, super_user) values ('admin','5b-56-61-1c-37-47-3f-3f-6-7e-25-b-6c-8-33-1b-7e-1a-71-28',0,1);
insert into kasai_users (id, password,blocked, super_user) values ('guest','5b-56-61-1c-37-47-3f-3f-6-7e-25-b-6c-8-33-1b-7e-1a-71-28',0,0);
-- user/group
insert into kasai_users_groups (id_user,id_group) values ('admin','Administrators');
insert into kasai_users_groups (id_user,id_group) values ('admin','AllUsers');
insert into kasai_users_groups (id_user,id_group) values ('guest','AllUsers');
-- operatives/roles
insert into kasai_roles (id,name,description) values (1,'Administrator','Can perform any action');
insert into kasai_roles (id,name,description) values (2,'Guest','Can not perform any action by default');
insert into kasai_roles (id,name,description) values (3,'User','Can read users, roles and groups information');
----Administrator Role
insert into kasai_roles_operatives values (1,'kasai');
---User Role
insert into kasai_roles_operatives values (3,'kasai.group.read');
insert into kasai_roles_operatives values (3,'kasai.role.read');
insert into kasai_roles_operatives values (3,'kasai.user.read');
-- Entities
insert into kasai_objects values ('/kasai/');
insert into kasai_objects values ('/kasai/user/');
insert into kasai_objects values ('/kasai/group/');
insert into kasai_objects values ('/kasai/role/');
insert into kasai_objects values ('/kasai/user/admin');
insert into kasai_objects values ('/kasai/user/guest');
insert into kasai_objects values ('/kasai/group/Administrators');
insert into kasai_objects values ('/kasai/group/AllUsers');
insert into kasai_objects values ('/kasai/role/1');
insert into kasai_objects values ('/kasai/role/2');
insert into kasai_objects values ('/kasai/role/3');
-- Assign permissions on objects
insert into kasai_objects_groups_roles values (1,'/kasai/','Administrators',1);
--插入初始权限相关信息,及超级用户信息
-- user
INSERT INTO kasai_users(id,first_name,last_name,email,password,blocked,super_user) VALUES('wangpan@sohu-rd.com','empty','empty','empty@empty.com','empty',0,0);
-- object
INSERT INTO kasai_objects(id) VALUES ('kasai/kasai_objects');
INSERT INTO kasai_objects(id) VALUES ('kasai/kasai_objects_users_roles');
INSERT INTO kasai_objects(id) VALUES ('kasai/kasai_operatives');
INSERT INTO kasai_objects(id) VALUES ('kasai/kasai_roles');
INSERT INTO kasai_objects(id) VALUES ('kasai/kasai_roles_operatives');
INSERT INTO kasai_objects(id) VALUES ('kasai/kasai_users');
INSERT INTO kasai_objects(id) VALUES ('test/tb_domain');
INSERT INTO kasai_objects(id) VALUES ('test/tb_prefix');
-- role
INSERT INTO kasai_roles(id,name,description) VALUES (9,'owner_test','Permission to add,delete,modify,list');
INSERT INTO kasai_roles(id,name,description) VALUES (10,'viewer_test','Permission to list');
INSERT INTO kasai_roles(id,name,description) VALUES (11,'guest_test','Permission to do nothing');
-- user-object-role
INSERT INTO kasai_objects_users_roles(id_object,id_user,id_role) VALUES ('kasai/kasai_objects','wangpan@sohu-rd.com',9);
INSERT INTO kasai_objects_users_roles(id_object,id_user,id_role) VALUES ('kasai/kasai_objects_users_roles','wangpan@sohu-rd.com',9);
INSERT INTO kasai_objects_users_roles(id_object,id_user,id_role) VALUES ('kasai/kasai_operatives','wangpan@sohu-rd.com',9);
INSERT INTO kasai_objects_users_roles(id_object,id_user,id_role) VALUES ('kasai/kasai_roles','wangpan@sohu-rd.com',9);
INSERT INTO kasai_objects_users_roles(id_object,id_user,id_role) VALUES ('kasai/kasai_roles_operatives','wangpan@sohu-rd.com',9);
INSERT INTO kasai_objects_users_roles(id_object,id_user,id_role) VALUES ('kasai/kasai_users','wangpan@sohu-rd.com',9);
INSERT INTO kasai_objects_users_roles(id_object,id_user,id_role) VALUES ('test/tb_domain','wangpan@sohu-rd.com',9);
INSERT INTO kasai_objects_users_roles(id_object,id_user,id_role) VALUES ('test/tb_prefix','wangpan@sohu-rd.com',9);
-- operative
INSERT INTO kasai_operatives(id,sequence,description) VALUES ('list_test',1000,'List');
INSERT INTO kasai_operatives(id,sequence,description) VALUES ('add_test',1001,'Add');
INSERT INTO kasai_operatives(id,sequence,description) VALUES ('delete_test',1002,'Delete');
INSERT INTO kasai_operatives(id,sequence,description) VALUES ('modify_test',1003,'Modify');
-- role-operative
INSERT INTO kasai_roles_operatives(id_role,id_operative) VALUES (9,'add_test');
INSERT INTO kasai_roles_operatives(id_role,id_operative) VALUES (9,'delete_test');
INSERT INTO kasai_roles_operatives(id_role,id_operative) VALUES (9,'list_test');
INSERT INTO kasai_roles_operatives(id_role,id_operative) VALUES (9,'modify_test');
INSERT INTO kasai_roles_operatives(id_role,id_operative) VALUES (10,'list_test');
0.使用建库脚本在目标机上建立,tb_domain,tb_prefix表,注意在url字段上建立索引,后面的脚本中不包含。建库脚本如下所示:
CREATE TABLE `tb_actlog` (
`id` int(10) NOT NULL auto_increment,
`db_name` varchar(255) NOT NULL,
`db_type` int(1) NOT NULL,
`db_url` varchar(255) NOT NULL,
`db_user` varchar(255) NOT NULL,
`act` int(1) NOT NULL,
`sub_date` TIMESTAMP(14),
`ip` varchar(255) NOT NULL,
`info` varchar(255) default NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=gbk;
DROP TABLE IF EXISTS `tb_domain`;
CREATE TABLE `tb_domain` (
`id` int(10) NOT NULL auto_increment,
`url` varchar(255) NOT NULL,
`tag_block` int(1) NOT NULL,
`tag_reversible` int(1) NOT NULL,
`reserve_id_str` varchar(255) NOT NULL,
`extra_attr` varchar(50) NOT NULL,
`user` varchar(255) NOT NULL,
`sub_date` TIMESTAMP(14),
`info` varchar(255) default NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=gbk;
DROP TABLE IF EXISTS `tb_prefix`;
CREATE TABLE `tb_prefix` (
`id` int(10) NOT NULL auto_increment,
`url` varchar(255) NOT NULL,
`tag_selfinclude` int(1) NOT NULL,
`tag_block` int(1) NOT NULL,
`tag_reversible` int(1) NOT NULL,
`reserve_id_str` varchar(255) NOT NULL,
`extra_attr` varchar(50) NOT NULL,
`user` varchar(255) NOT NULL,
`sub_date` TIMESTAMP(14),
`info` varchar(255) default NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=gbk;
DROP TABLE IF EXISTS `tb_protective_white`;
CREATE TABLE `tb_protective_white` (
`id` int(10) NOT NULL auto_increment,
`url` varchar(255) NOT NULL,
`type` int(1) NOT NULL,
`ip` varchar(255) NOT NULL,
`user` varchar(255) NOT NULL,
`sub_date` TIMESTAMP(14),
`info` varchar(255) default NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=gbk;
CREATE TABLE `dm_extra_attr` (
`id` int(10) NOT NULL auto_increment,
`code` int(3) NOT NULL,
`content` varchar(50) NOT NULL,
`remark` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=gbk;
1.将真实数据dmp文件,导入到目标机mysql的不同方案(test)中,即缓冲方案;
2.通过insert select 语句,按照域名-》前缀-》死链-》无价值的顺序,从缓冲方案中,导入到sogou_blacklist 方案的两个主要表中。语法如下:
2.0 自增字段设为从1开始,便于分页整理域名表数据
alter table sogou_blacklist.tb_domain AUTO_INCREMENT = 1;
--------域名-------
2.1 把缓冲方案【域名表】中的记录,导入到 sogou_blacklist 方案【域名表】 中,额外属性置为【普通】
insert into sogou_blacklist.tb_domain(url,tag_block,tag_reversible,reserve_id_str,extra_attr,`user`,sub_date) select url,1-`type`,0,'','普通',user,sub_date from test.domain;
---------前缀-------
2.2 把缓冲方案【前缀表】中的记录,导入到 sogou_blacklist 方案【前缀表】 中,额外属性置为【普通】
insert into sogou_blacklist.tb_prefix(url,tag_selfinclude,tag_block,tag_reversible,reserve_id_str,extra_attr,`user`,sub_date) select url,1-`type`,1-black,0,'','普通',user,sub_date from test.url;
--------死链-------
2.3 把缓冲方案【死链表】中的【域名】记录,导入到 sogou_blacklist 方案【域名表】 中,额外属性置为【死链】
insert into sogou_blacklist.tb_domain(url,tag_block,tag_reversible,reserve_id_str,extra_attr,`user`,sub_date) select url,1,0,'','死链',user,sub_date from test.deadlink where type=1;
2.4 把缓冲方案【死链表】中的【前缀】记录,导入到 sogou_blacklist 方案【前缀表】 中,额外属性置为【死链】
insert into sogou_blacklist.tb_prefix(url,tag_selfinclude,tag_block,tag_reversible,reserve_id_str,extra_attr,`user`,sub_date) select url,1,1,0,'','死链',user,sub_date from test.deadlink where type=0;
--------无价值---------
2.5 把缓冲方案【无价值表】中的【无价值】记录,导入到 sogou_blacklist 方案【域名表】 中,额外属性置为【无价值】
insert into sogou_blacklist.tb_domain(url,tag_block,tag_reversible,reserve_id_str,extra_attr,`user`,sub_date) select url,1,0,'','无价值',user,sub_date from test.novalue where type=0;
2.6 把缓冲方案【无价值表】中的前缀形式的【非中文】记录 删除掉
delete from test.novalue where url like 'http://%';
2.7 把缓冲方案【无价值表】中的【非中文】记录,导入到 sogou_blacklist 方案【域名表】 中,额外属性置为【非中文】
insert into sogou_blacklist.tb_domain(url,tag_block,tag_reversible,reserve_id_str,extra_attr,`user`,sub_date) select url,1,0,'','非中文',user,sub_date from test.novalue where type=1;
2.8 把【域名表】中sub_date字段中0000-00-00 00:00:00转换成当天记录
update sogou_blacklist.tb_domain set sub_date=NOW() where sub_date like '%0000-00-00 00:00:00%'
2.9 把【前缀表】中sub_date字段中含有0000的记录转换成当天
update sogou_blacklist.tb_prefix set sub_date=NOW() where sub_date like '%0000%'
3.执行次序是
(2.6)可选
域名表
2.1
2.3
2.5
2.7
(2.8)可选
前缀表
2.2
2.4
2.9
4.相关的倒库JAVA程序
Dump.java
package dataDump;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.HashMap;
public class Dump {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
JDBCUtilsTest();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void JDBCUtilsTest() throws Exception {
double begin;
begin=System.currentTimeMillis();
Connection conn = null;
Statement st = null;
ResultSet rs = null;
String sql;
int num = 0;
try {
/**
* 第一大步:插入domain表
*/
conn = JDBCUtils.getConnection();
st = conn.createStatement();
//2.0 自增字段设为从1开始,便于分页整理域名表数据
sql= "alter table sogou_blacklist.tb_domain AUTO_INCREMENT = 1";
st.executeUpdate(sql);
//2.1
sql= "insert into sogou_blacklist.tb_domain(url,tag_block,tag_reversible,reserve_id_str,extra_attr,`user`,sub_date) select url,1-`type`,0,'','普通',user,sub_date from test.domain";
num = st.executeUpdate(sql);
System.out.println("2.1步插入的数据条数:"+num);
//2.3
sql= "insert into sogou_blacklist.tb_domain(url,tag_block,tag_reversible,reserve_id_str,extra_attr,`user`,sub_date) select url,1,0,'','死链',user,sub_date from test.deadlink where type=1";
num = st.executeUpdate(sql);
System.out.println("2.3步插入的数据条数:"+num);
//2.5
sql= "insert into sogou_blacklist.tb_domain(url,tag_block,tag_reversible,reserve_id_str,extra_attr,`user`,sub_date) select url,1,0,'','无价值',user,sub_date from test.novalue where type=0";
num = st.executeUpdate(sql);
System.out.println("2.5步插入的数据条数:"+num);
//2.7
sql= "insert into sogou_blacklist.tb_domain(url,tag_block,tag_reversible,reserve_id_str,extra_attr,`user`,sub_date) select url,1,0,'','非中文',user,sub_date from test.novalue where type=1";
num = st.executeUpdate(sql);
System.out.println("2.7步插入的数据条数:"+num);
//2.8给表中sub_date字段中0000-00-00 00:00:00转换成当天记录
sql= "update sogou_blacklist.tb_domain set sub_date=NOW() where sub_date like '%0000-00-00 00:00:00%'";
num = st.executeUpdate(sql);
System.out.println("2.8步更新日期字段的数据条数:"+num);
/**
* 第二大步:插入prefix表
*/
//2.2
sql= "insert into sogou_blacklist.tb_prefix(url,tag_selfinclude,tag_block,tag_reversible,reserve_id_str,extra_attr,`user`,sub_date) select url,1-`type`,1-black,0,'','普通',user,sub_date from test.url";
num = st.executeUpdate(sql);
System.out.println("2.2步插入的数据条数:"+num);
//2.4
sql= "insert into sogou_blacklist.tb_prefix(url,tag_selfinclude,tag_block,tag_reversible,reserve_id_str,extra_attr,`user`,sub_date) select url,1,1,0,'','死链',user,sub_date from test.deadlink where type=0";
num = st.executeUpdate(sql);
System.out.println("2.4步插入的数据条数:"+num);
//2.9 把【前缀表】中sub_date字段中含有0000的记录转换成当天
sql= "update sogou_blacklist.tb_prefix set sub_date=NOW() where sub_date like '%0000%'";
num = st.executeUpdate(sql);
System.out.println("2.9步更新日期字段的数据条数:"+num);
} finally {
JDBCUtils.free( rs,st, conn);
}
System.out.println("耗费时间:"+(System.currentTimeMillis()-begin));
}
}
JDBCUtils.java
package dataDump;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public final class JDBCUtils {
private JDBCUtils() {
}
private static String url = "jdbc:mysql://10.11.89.108:3306/sogou_blacklist?useUnicode=true&characterEncoding=gbk";
private static String user = "sogou_blacklist";
private static String password = "m6i1m2a3";
static {
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
throw new ExceptionInInitializerError(e);
}
}
public static Connection getConnection() throws SQLException {
return DriverManager.getConnection(url, user, password);
}
public static void free(ResultSet rs, Statement st, Connection conn) {
try {
if (rs != null)
rs.close();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (st != null)
st.close();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (conn != null)
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
public static void free(Statement st, Connection conn) {
try {
if (st != null)
st.close();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (conn != null)
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}