项目搭建完毕后直接运行Test.java里面的Main函数即可!
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
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
|
/**
* @ProjectName ChangeDBSourceDEMO
* @Package com.le
* @ClassName Test
* @Description 测试类,直接运行Main函数即可测试动态切换数据连接配置功能
* @Author LE
* @CreateDate 2015-09-10
* @Version 1.0
*/
package
com.le;
import
java.io.BufferedReader;
import
java.io.InputStreamReader;
public
class
Test {
private
static
final
String C_OPERATE_MSG =
"请输入您要进行的操作 \n%s \n%s \n%s \n%s \n%s \n%s \n%s \n%s"
;
private
static
final
String C_OPE_MSG_RESET_CONFIG =
"0:重置用户配置"
;
private
static
final
String C_OPE_MSG_CHANGE_HOST =
"1:更改主机地址"
;
private
static
final
String C_OPE_MSG_CHANGE_PORT =
"2:更改端口号"
;
private
static
final
String C_OPE_MSG_CHANGE_DB_NAME =
"3:更改数据库实例名"
;
private
static
final
String C_OPE_MSG_CHANGE_UNAME =
"4:更改数据库用户名"
;
private
static
final
String C_OPE_MSG_CHANGE_PWD =
"5:更改数据库密码"
;
private
static
final
String C_OPE_MSG_CHANGE_DB_SOURCE =
"8:更改数据源"
;
private
static
final
String C_OPE_MSG_EXIT =
"9:退出系统"
;
// 初始化用户配置
private
static
final
int
I_OPE_LIST_RESET_USER_CONFIG =
0
;
// 更改主机地址
private
static
final
int
I_OPE_LIST_CHANGE_HOST =
1
;
// 更改端口号
private
static
final
int
I_OPE_LIST_CHANGE_PORT =
2
;
// 更改数据库实例名
private
static
final
int
I_OPE_LIST_CHANGE_DB_NAME =
3
;
// 更改用户名
private
static
final
int
I_OPE_LIST_CHANGE_UNAME =
4
;
// 更改密码
private
static
final
int
I_OPE_LIST_CHANGE_PWD =
5
;
// 更改数据源
private
static
final
int
I_OPE_LIST_CHANGE_DB_SOURCE =
8
;
// 退出系统
private
static
final
int
I_OPE_LIST_EXIT =
9
;
private
static
final
int
[] I_OPE_LIST = {
0
,
1
,
2
,
3
,
4
,
5
,
8
,
9
};
public
static
void
main(String[] args) {
DBUtil dbu =
new
DBUtil();
// 操作提示信息
String sOpeMsg = String.format(C_OPERATE_MSG, C_OPE_MSG_RESET_CONFIG,
C_OPE_MSG_CHANGE_HOST, C_OPE_MSG_CHANGE_PORT,
C_OPE_MSG_CHANGE_DB_NAME, C_OPE_MSG_CHANGE_UNAME,
C_OPE_MSG_CHANGE_PWD, C_OPE_MSG_CHANGE_DB_SOURCE,
C_OPE_MSG_EXIT);
// 创建数据流接收对象
BufferedReader br =
new
BufferedReader(
new
InputStreamReader(System.in));
String sInput =
""
;
// 一直循环调用,直至选择退出
int
iOpe = -
1
;
boolean
bExitFlag =
false
;
System.out.println(
"系统已启动"
);
while
(
true
) {
switch
(iOpe) {
case
I_OPE_LIST_RESET_USER_CONFIG:
dbu.initUserConfig();
break
;
case
I_OPE_LIST_CHANGE_HOST:
sInput = inputIP(br);
dbu.setsHostUser(sInput);
break
;
case
I_OPE_LIST_CHANGE_PORT:
sInput = inputPort(br);
dbu.setsPortUser(sInput);
break
;
case
I_OPE_LIST_CHANGE_DB_NAME:
sInput = inputDBName(br);
dbu.setsDBNameUser(sInput);
break
;
case
I_OPE_LIST_CHANGE_UNAME:
sInput = inputUName(br);
dbu.setsUNameUser(sInput);
break
;
case
I_OPE_LIST_CHANGE_PWD:
sInput = inputPWD(br);
dbu.setsPWDUser(sInput);
break
;
case
I_OPE_LIST_CHANGE_DB_SOURCE:
if
(dbu.changeDBSourceByUser()) {
System.out.println(
"数据源切换成功!!!"
);
}
else
{
System.out.println(
"数据源切换失败,请核对您的配置是否正确!!!"
);
}
break
;
case
I_OPE_LIST_EXIT:
int
nExit = GlobalUtil.readInt(br,
"您确定要退出系统?1:是 2:否"
,
false
,
new
int
[] {
1
,
2
});
if
(nExit ==
1
) {
bExitFlag =
true
;
}
break
;
}
// 如果用户选择了确认退出,则退出循环
if
(bExitFlag) {
System.out.println(
"系统已正常关闭"
);
break
;
}
// 未选择退出则重复等待用户选择操作
iOpe = GlobalUtil.readInt(br, sOpeMsg,
false
, I_OPE_LIST);
}
}
/**
* 等待控制台输入一个数据库密码
*
* @param br
* 数据接收对象
* @return 用户输入的密码
*/
public
static
String inputPWD(BufferedReader br) {
return
GlobalUtil.readString(br,
"请输入数据库密码"
,
false
);
}
/**
* 等待控制台输入一个数据库用户名
*
* @param br
* 数据接收对象
* @return 用户输入的用户名
*/
public
static
String inputUName(BufferedReader br) {
return
GlobalUtil.readString(br,
"请输入数据库用户名"
,
false
);
}
/**
* 等待控制台输入一个数据库实例名
*
* @param br
* 数据接收对象
* @return 用户输入的数据库实例名
*/
public
static
String inputDBName(BufferedReader br) {
return
GlobalUtil.readString(br,
"请输入数据库实例名"
,
false
);
}
/**
* 等待控制台输入一个合法的IP地址
*
* @param br
* 数据接收对象
* @return 一个合法的IP地址或空字符串
*/
public
static
String inputIP(BufferedReader br) {
String sHost =
""
;
// 循环等待用户输入一个合法的IP地址
while
(
true
) {
// 接收控制台输入的字符串
sHost = GlobalUtil.readString(br,
"请输入一个合法的IP地址"
,
false
);
// 如果不是一个合法的IP地址,则让用户重新输入,直至输入一个合法的IP地址
if
(!GlobalUtil.isValiIP(sHost)) {
continue
;
}
break
;
}
return
sHost;
}
/**
* 等待控制台输入一个合法的端口号
*
* @param br
* 数据接收对象
* @return 一个合法的端口或空字符串
*/
public
static
String inputPort(BufferedReader br) {
int
nPort =
0
;
// 循环等待用户输入一个合法的端口
while
(
true
) {
// 接收控制台输入的字符串
nPort = GlobalUtil.readInt(br,
"请输入一个合法的数据库端口"
,
false
,
null
);
// 如果不是一个合法的数据库端口,则让用户重新输入,直至输入一个合法的数据库端口
if
(!GlobalUtil.isValiPort(nPort)) {
continue
;
}
break
;
}
return
nPort +
""
;
}
}
|
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
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
|
/**
* @ProjectName ChangeDBSourceDEMO
* @Package com.le
* @ClassName GlobalUtil
* @Description 常用工具类,主要提供一些公用的方法
* @Author LE
* @CreateDate 2015-09-10
* @Version 1.0
*/
package
com.le;
import
java.io.BufferedReader;
import
java.util.regex.Matcher;
import
java.util.regex.Pattern;
public
class
GlobalUtil {
//合法端口号起始值
public
static
final
int
N_PORT_BEGIN =
1024
;
//合法端口号结束值
public
static
final
int
N_PORT_END =
65535
;
/**
* 在命令行接收一个字符串
*
* @param br
* 数据接收对象
* @param sPromptMsg
* 提示信息
* @param allowNull
* 是否允许录入空字符串
* @return 控制台录入的字符串
*/
public
static
String readString(BufferedReader br, String sPromptMsg,
boolean
allowNull) {
// 如果为空则初始化一个提示
if
(sPromptMsg ==
null
||
""
.equals(sPromptMsg)) {
sPromptMsg =
"请输入一个字符串"
;
}
System.out.println(sPromptMsg);
String result =
""
;
try
{
// 循环读取数据
while
(
true
) {
result = br.readLine();
// 如果不允许为空,则一直输入,直到输入一个非空字符串为止
if
(allowNull) {
break
;
}
// 如果不为空,则不允许空或空格输入
if
(
""
.equals(result) ||
""
.equals(result.trim())) {
System.out.println(sPromptMsg);
continue
;
}
else
{
break
;
}
}
}
catch
(Exception e) {
result =
""
;
}
return
result;
}
/**
* 在控制台接收一个int输入值
*
* @param br
* 数据接收对象
* @param sPromptMsg
* 提示信息
* @param allowNull
* 是否允许输入空值
* @return
*/
public
static
int
readInt(BufferedReader br, String sPromptMsg,
boolean
allowNull,
int
[] iRange) {
// 如果为空则初始化一个提示
if
(sPromptMsg ==
null
||
""
.equals(sPromptMsg)) {
sPromptMsg =
"请输入一个数字"
;
}
System.out.println(sPromptMsg);
int
result =
0
;
String sResult =
""
;
try
{
// 读取一行数据
while
(
true
) {
boolean
bRange =
true
;
sResult = br.readLine();
// 如果当前输入为空,并且不允许为空的话,继续输入
if
(
""
.equals(sResult) && !allowNull) {
System.out.println(sPromptMsg);
continue
;
}
else
if
(!isNumeric(sResult)) {
// 如果不允许为空并且不是一个有效的数字则让用户重新输入
System.out.println(sPromptMsg);
continue
;
}
result = Integer.parseInt(sResult);
// 判断是否在指定范围内
if
(iRange !=
null
) {
bRange =
false
;
for
(
int
i =
0
; i < iRange.length; i++) {
if
(result == iRange[i]) {
bRange =
true
;
break
;
}
}
// 如果有输入范围限制并且当前输入值不在范围内,则让用户重新输入
if
(!bRange) {
System.out.println(sPromptMsg);
continue
;
}
}
break
;
}
}
catch
(Exception e) {
result =
0
;
}
return
result;
}
/**
* 判断参数是否可以转换成数字
|