在 Java 中格式化数据并输入数据库
Formatting data and inputting to a database in Java
我正在 java 中使用进程构建器从 cmd 获取硬件数据。
//get info from cmd
ProcessBuilder processBuilder = new ProcessBuilder();
processBuilder.command("cmd.exe", "/c", "systeminfo ");
try {
Process process = processBuilder.start();
BufferedReader reader =
new BufferedReader(new InputStreamReader(process.getInputStream()));
//write the output to the variables
String line;
//a loop which ensures all the data is read in
while ((line = reader.readLine()) != null) {
hardwareInfo.add(line);//hardwareInfo is an arraylist i currently save all this information to
}
此 returns 所有相关信息 以及更多 。我的输出如下所示:
[, Host Name: LJDESKTOP, OS Name: Microsoft Windows 10 Education, OS Version: 10.0.18363 N/A Build 18363
等...
我想根据名称将这些字段中的 一些 添加到 SQL 数据库中(例如主机名:- 是的,OS 名称: - 不)。 SQL 连接已设置 我只需要找到保存这些变量的最佳方法,这样我就可以将它们直接插入到我的数据库中。
那么我如何摆脱 Host Name:
并仍然在我的数据库中输入 LJDESKTOP
以及我从 cmd 命令获得的其余信息的相同原则。
我也在尝试考虑效率,我希望它在计算上尽可能“轻”,但这不是必需的。
到目前为止我已经尝试过:
我尝试在每个变量的“:”处拆分字符串并 trimming。这为我提供了我需要的准确信息,但我无法将其保存到单个变量中。这是因为我 trimmed 是我确定我的变量的方式。 (我可以将 trim 功能添加到我的 setter 吗?)
我试过了:
while ((line = reader.readLine()) != null) {
if (line.startsWith("Host Name:")) {
setHostname(line.replaceFirst("Host Name: ", ""));}
对每个变量重复 if 语句,但是每次它通过 while 循环时都会将每个变量添加到我的数组中。
你可以这样试试:
...
final Map<String,String> inputValues = new HashMap<>();
//a loop which ensures all the data is read in
while ((line = reader.readLine()) != null) {
// Read each line as key and value into a the inputValues map
final String[] pieces = line.split(":",2); // only split at the first ':'!
// Was a ':' found, e.g. the string split into two pieces?
if ( pieces.length > 1 ) {
String key = pieces[0]; // e.g. "Host Name"
String value = pieces[1]; // e.g. " LJDESKTOP"
value = value.trim(); // remove leading/trailing whitespaces from value
inputValues.put(key,value); // Store key+value to map.
}
}
// Now we can access the input values by key, e.g.:
String hostName = inputValues.get("Host Name");
String osName = inputValues.get("OS Name");
// To do: Do something with the values above, e.g. send to DB...
我正在 java 中使用进程构建器从 cmd 获取硬件数据。
//get info from cmd
ProcessBuilder processBuilder = new ProcessBuilder();
processBuilder.command("cmd.exe", "/c", "systeminfo ");
try {
Process process = processBuilder.start();
BufferedReader reader =
new BufferedReader(new InputStreamReader(process.getInputStream()));
//write the output to the variables
String line;
//a loop which ensures all the data is read in
while ((line = reader.readLine()) != null) {
hardwareInfo.add(line);//hardwareInfo is an arraylist i currently save all this information to
}
此 returns 所有相关信息 以及更多 。我的输出如下所示:
[, Host Name: LJDESKTOP, OS Name: Microsoft Windows 10 Education, OS Version: 10.0.18363 N/A Build 18363
等...
我想根据名称将这些字段中的 一些 添加到 SQL 数据库中(例如主机名:- 是的,OS 名称: - 不)。 SQL 连接已设置 我只需要找到保存这些变量的最佳方法,这样我就可以将它们直接插入到我的数据库中。
那么我如何摆脱 Host Name:
并仍然在我的数据库中输入 LJDESKTOP
以及我从 cmd 命令获得的其余信息的相同原则。
我也在尝试考虑效率,我希望它在计算上尽可能“轻”,但这不是必需的。
到目前为止我已经尝试过:
我尝试在每个变量的“:”处拆分字符串并 trimming。这为我提供了我需要的准确信息,但我无法将其保存到单个变量中。这是因为我 trimmed 是我确定我的变量的方式。 (我可以将 trim 功能添加到我的 setter 吗?)
我试过了:
while ((line = reader.readLine()) != null) {
if (line.startsWith("Host Name:")) { setHostname(line.replaceFirst("Host Name: ", ""));}
对每个变量重复 if 语句,但是每次它通过 while 循环时都会将每个变量添加到我的数组中。
你可以这样试试:
...
final Map<String,String> inputValues = new HashMap<>();
//a loop which ensures all the data is read in
while ((line = reader.readLine()) != null) {
// Read each line as key and value into a the inputValues map
final String[] pieces = line.split(":",2); // only split at the first ':'!
// Was a ':' found, e.g. the string split into two pieces?
if ( pieces.length > 1 ) {
String key = pieces[0]; // e.g. "Host Name"
String value = pieces[1]; // e.g. " LJDESKTOP"
value = value.trim(); // remove leading/trailing whitespaces from value
inputValues.put(key,value); // Store key+value to map.
}
}
// Now we can access the input values by key, e.g.:
String hostName = inputValues.get("Host Name");
String osName = inputValues.get("OS Name");
// To do: Do something with the values above, e.g. send to DB...