第一步:连接数据库
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
import
java.sql.Connection;
import
java.sql.DriverManager;
import
java.sql.ResultSet;
import
java.sql.SQLException;
import
java.sql.Statement;
import
javax.swing.JOptionPane;
public
class
DBConnection {
private
static
final
String DBDRIVER =
"com.mysql.jdbc.Driver"
;
//驱动类类名
private
static
final
String DBURL =
"jdbc:mysql://localhost:3306/ibatis"
; //连接URL
private
static
final
String DBUSER =
"root"
;
//数据库用户名
private
static
final
String DBPASSWORD =
"admin"
;
//数据库密码
static
{
//将加载驱动放到静态块中
try
{
Class.forName(DBDRIVER);
//加载驱动
}
catch
(ClassNotFoundException e1) {
//发生加载驱动异常
JOptionPane.showMessageDialog(
null
,
"加载驱动失败!!!"
,
"提示信息"
,
JOptionPane.INFORMATION_MESSAGE);
//提示加载驱动失败
}
}
public
static
Connection getConnection() {
Connection conn =
null
;
//建立Connection接口引用
try
{
conn = DriverManager.getConnection(DBURL, DBUSER, DBPASSWORD);
//建立连接
}
catch
(SQLException e) {
// 发生连接异常
JOptionPane.showMessageDialog(
null
,
"连接MySQL连接失败!!!"
,
"提示信息"
,
JOptionPane.INFORMATION_MESSAGE);
//提示连接MySQL连接失败
}
return
conn;
}
public
static
void
close(Connection conn) {
if
(conn !=
null
) {
//判断Connection对象是否为空
try
{
conn.close();
// 关闭连接数据库资源
}
catch
(SQLException e){
//判断关闭Connection对象时是否发生异常
System.out.println(
"关闭数据库连接发生异常"
);
}
}
}
public
static
void
close(Statement stmt) {
if
(stmt !=
null
){
//判断Statement对象是否为空
try
{
stmt.close();
//关闭操作数据库资源
}
catch
(SQLException e){
//判断关闭Statement对象时是否发生异常
JOptionPane.showMessageDialog(
null
,
"关闭数据库操作资源发生异常!!!"
,
"提示信息"
,
JOptionPane.INFORMATION_MESSAGE);
//提示关闭数据库操作资源发生异常
}
}
}
public
static
void
close(ResultSet rs) {
if
(rs !=
null
) {
//判断结果集是否为空
try
{
rs.close();
//关闭结果集
}
catch
(SQLException e){
//判断结果集是否发生异常
JOptionPane.showMessageDialog(
null
,
"关闭结果集发生异常!!!"
,
"提示信息"
,
JOptionPane.INFORMATION_MESSAGE);
//提示关闭结果集发生异常
}
}
}
}
|
第二步:执行转换:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
|
import
java.io.File;
import
java.io.PrintWriter;
import
java.sql.Connection;
import
java.sql.DatabaseMetaData;
import
java.sql.PreparedStatement;
import
java.sql.ResultSet;
import
java.sql.ResultSetMetaData;
import
java.sql.Types;
import
org.apache.commons.dbutils.DbUtils;
public
class
BuildDTO {
public
void
build(String tableName, String packageName, String className) {
Connection conn =
null
;
PreparedStatement pment =
null
;
ResultSet rs =
null
;
PrintWriter pw =
null
;
String pack = packageName.replace(
"."
,
"/"
);
// 包名
System.out.println(
"src/"
+ pack +
"/"
+ className +
".java"
);
try
{
pw =
new
PrintWriter(
new
File(
"src/"
+ pack +
"/"
+ className
+
".java"
));
pw.println(
"package "
+ packageName +
";\n\n"
);
pw.println(
""
);
pw.println(
"public class "
+ className +
" \n{\t"
);
// 创建连接
conn = DBConnection.getConnection();
// 构建预处理器
pment = conn.prepareStatement(
"select * from "
+ tableName
+
" where 1 = 2;"
);
rs = pment.executeQuery();
ResultSetMetaData metaData = rs.getMetaData();
// 获取表单的列数
int
colum = metaData.getColumnCount();
for
(
int
i =
1
; i <= colum; i++) {
String pStr =
""
;
// setXxxx
String typeStr =
""
;
// 类型
// 获取列名
String columName = metaData.getColumnName(i);
// 获取每一列的数据类型
int
type = metaData.getColumnType(i);
// System.out.println(i+"---"+type);
// 判断
typeStr = type(type);
// 组装 private 的语句
pStr +=
"private "
+ typeStr +
" "
+ columName +
";"
;
// 输出 private 的字段
pw.println(
"\t"
+ pStr +
""
);
}
String constructStr =
""
;
// 构造
// 组装空参构造
constructStr +=
"public "
+ className +
"()\n\t{\n\n\t}"
;
// 输出空参构造
pw.println(
"\n\t"
+ constructStr +
"\n"
);
for
(
int
i =
1
; i <= colum; i++) {
String getStr =
""
;
String setStr =
""
;
String typeStr =
""
;
// 获取列名
String columName = metaData.getColumnName(i);
// 获取每一列的数据类型
int
type = metaData.getColumnType(i);
// 判断
typeStr = type(type);
// 组装 set 的语句
setStr +=
"public void set"
+ columName.substring(
0
,
1
).toUpperCase() +
""
+ columName.substring(
1
) +
"("
+ typeStr +
" "
+ columName +
")\n\t{\n"
;
setStr +=
"\t\tthis."
+ columName +
" = "
+ columName
+
";\n\t}"
;
// 组装get语句
getStr +=
"public "
+ typeStr +
" get"
+ columName.substring(
0
,
1
).toUpperCase() +
""
+ columName.substring(
1
) +
"()\n\t{\n\t"
;
getStr +=
"\treturn this."
+ columName +
";\n\t}"
;
// 输出 set
pw.println(
"\t"
+ setStr);
// 输出 get
pw.println(
"\t"
+ getStr);
}
pw.println(
"}"
);
// 缓冲
pw.flush();
pw.close();
}
catch
(Exception e) {
e.printStackTrace();
}
finally
{
// 关闭连接
DbUtils.closeQuietly(conn, pment, rs);
}
}
public
String type(
int
type) {
String typeStr =
null
;
if
(Types.INTEGER == type) {
typeStr =
"Integer"
;
}
else
if
(Types.VARCHAR == type) {
typeStr =
"String"
;
}
else
if
(Types.CHAR == type) {
typeStr =
"CHAR"
;
}
else
if
(Types.TIMESTAMP == type) {
typeStr =
"Date"
;
}
else
if
(Types.INTEGER == type) {
typeStr =
"Integer"
;
}
else
if
(Types.LONGVARCHAR == type) {
typeStr =
"String"
;
}
return
typeStr;
}
//获取数据库中的所有表
public
void
getTableNameByCon(Connection con) {
try
{
DatabaseMetaData meta = con.getMetaData();
ResultSet rs = meta.getTables(
null
,
null
,
null
,
new
String[] {
"TABLE"
});
while
(rs.next()) {
System.out.println(
"表名:"
+ rs.getString(
3
));
System.out.println(
"表所属用户名:"
+ rs.getString(
2
));
System.out.println(
"------------------------------"
);
}
con.close();
}
catch
(Exception e) {
try
{
con.close();
}
catch
(Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public
static
void
main(String[] args) {
BuildDTO dto =
new
BuildDTO();
dto.build(
"User"
,
"com.mzsx.sql2bean"
,
"User"
);
dto.getTableNameByCon(DBConnection.getConnection());
}
}
|
版权声明:原创作品,如需转载,请注明出处。否则将追究法律责任
本文转自 梦朝思夕 51CTO博客,原文链接:http://blog.51cto.com/qiangmzsx/1305085