用Java格式化数据并输入数据库

用Java格式化数据并输入数据库,java,sql,cmd,processbuilder,dataformat,Java,Sql,Cmd,Processbuilder,Dataformat,我使用java中的process builder从cmd获取硬件数据 //get info from cmd ProcessBuilder processBuilder = new ProcessBuilder(); processBuilder.command("cmd.exe", "/c", "systeminfo "); try { Process proces

我使用java中的process builder从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
            }
这将返回所有相关信息以及更多信息。我的输出如下所示:

[, Host Name:                 LJDESKTOP, OS Name:                   Microsoft Windows 10 Education, OS Version:                10.0.18363 N/A Build 18363
等等

我想根据这些字段的名称(例如主机名:-是,操作系统名:-否)将其中的一些字段添加到SQL数据库中。SQL连接已经建立,我只需要找到保存这些变量的最佳方法,这样我就可以直接将它们插入数据库

那么,我如何摆脱主机名:,仍然将
LJDESKTOP
输入我的数据库,以及从cmd命令获得的其余信息的相同原则呢

<>我也试着考虑效率,我希望这是尽可能的计算“光”,但这不是必要的。 到目前为止我所尝试的:

  • 我尝试过在“:”处为每个变量和修剪拆分字符串。这正好提供了我需要的信息,但我无法将其保存到单个变量中。这是因为我修剪的部分是如何确定变量的。(我是否可以将微调功能添加到我的设定器中?)

  • 我试过:

    而((line=reader.readLine())!=null){


  • 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...
    
    。。。
    final Map inputValues=新HashMap();
    //确保读取所有数据的循环
    而((line=reader.readLine())!=null){
    //将每行作为键和值读入inputValues映射中的
    final String[]pieces=line.split(“:”,2);//仅在第一个“:”处拆分!
    //是否找到了“:”,例如,绳子被分成两段?
    如果(件长>1){
    字符串键=片断[0];//例如“主机名”
    字符串值=个数[1];//例如“LJDESKTOP”
    value=value.trim();//从value中删除前导/尾随空格
    inputValues.put(键,值);//存储要映射的键+值。
    }
    }
    //现在我们可以通过键访问输入值,例如:
    字符串hostName=inputValues.get(“主机名”);
    字符串osName=inputValues.get(“OS名称”);
    //要执行的操作:使用上述值执行操作,例如发送到DB。。。
    
    到目前为止您尝试了什么?这回答了您的问题吗?看起来它可能需要一些字符串解析。删除“[”,用逗号拆分字符串以获得“主机名:LJDESKTOP”,用“:”拆分以进一步获得“主机名”,“LJDESKTOP”对,去掉字符串以去掉前后的空格,最后将得到“主机名”、“LJDESKTOP”。此时,您将能够比较键(如“主机名”)并确定在何处放置值(如“LJDESKTOP”)在JDBC调用中。@SaahilMalhotra不,我不相信这回答了我的问题,因为我没有从我的数据库中获取信息。我从我的电脑中获取信息,然后我想根据cmd返回的字段名输入到我的数据库中。@vc669抱歉,我可能真的不擅长解释这一点,但是的,我认为这是一个错误我认为解决这个问题的方法是,但我不知道它的代码。如果你能给我几分钟的时间,我将发布我到目前为止尝试过的内容。此外,我需要在执行此操作之前将其保存为变量,这会增加额外的复杂性,我无法理解…将LJDESKTOP保存为变量“hostname”(不带“Host Name:”)然后将该变量的值输入到我的数据库中。谢谢,看起来散列图就是我要找的。这也非常整洁!
    ...
    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...