java - 将 SQL 查询中的列名称/值解析为 HashMap <String, String>

标签 java sql hashmap

如何解析 SQL 查询(字符串格式)并提取 HashMap 中的列名和值?

In:
INSERT INTO CUSTOMERS (ID,NAME,AGE)
VALUES (4, 'Chaitali', 25);
Out:
key "ID", value "4";
key "NAME", value "Chaitali";
key "AGE", value "25";

我想出了以下代码,如果值包含逗号,则该代码不起作用。

HashMap<String, String> map = new HashMap<String, String>();    

int startValues = sql.lastIndexOf(" (");
int endValues = sql.length();
String valuesSubstring = sql.substring(startValues +2, endValues-1);
String [] valuesMassive = valuesSubstring.split(",");

int startKeys = sql.indexOf("(");
int endKeys = sql.indexOf(")");
String keysSubstring = sql.substring(startKeys+1, endKeys);
String [] keysMassive = keysSubstring.split(",");

for(int i = 0; i < keysMassive.length; i++) {
    map.put(keysMassive[i].trim(), valuesMassive[i]);
}

return map;

最佳答案

public class SqlSplit {

    public static void main(String[] args) {
        String query = "INSERT INTO CUSTOMERS (ID,NAME,AGE) VALUES (4, 'Chaitali', 25);";
        Pattern pattern = Pattern.compile("\\((.*?)\\)",Pattern.DOTALL);

        Matcher matcher = pattern.matcher(query);
        List<String[]> tokens = new ArrayList<String[]>();
        while(matcher.find()){
            tokens.add(matcher.group().replace("(","").replace(")","").split(","));     
        }

        Map<String,String> map = new HashMap<String,String>();
        if(tokens.size() == 2 && tokens.get(0).length == tokens.get(1).length){
            for(int x = 0; x < tokens.get(0).length; x++){
                map.put(tokens.get(0)[x], tokens.get(1)[x].replace("'", ""));
            }
        }

        for(Entry<String,String> entry: map.entrySet()){
            System.out.println("KEY:" + entry.getKey());
            System.out.println("VALUE:" + entry.getValue());
        }
    }
}

关于java - 将 SQL 查询中的列名称/值解析为 HashMap <String, String>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18249696/

相关文章:

SQL如何让绝对函数正常工作

java - 如何从 arrayList 对象中生成所有可能的幂集(或子集)?

java - 包含多个 "keys"的列表对象

java - 使用 launch4j 将 jar 从 eclipse 转换为 exe 时出错

java : Mutithreading & file reading

java - Hibernate @OneToOne 与多个对象的关系?

sql - 如何在 Hibernate 中使用数组字段创建条件

java - 显示/隐藏自定义 ListView 中每个项目的 TextView

sql - 如何在 NHibernate 中编写以下 SQL 查询

Java HashMap.put() 无法在 invokeLater createAndShowGui 方法内工作