代码之家  ›  专栏  ›  技术社区  ›  stefan

在sqlite SELECT中使用java在列之间添加带空格的逗号

  •  2
  • stefan  · 技术社区  · 6 年前

    我有这些专栏( MemberId City , State Postal ) ( FirstName LastName tblMember

    我想用java创建一个查询,如下所示:

    SELECT (LastName FirstName) AS 'LastName FirstName', 
           (City, State Postal) AS 'City, State Postal' FROM tblMember;
    

    String[] columns = new String[]{"LastName FirstName", "City, State Postal"};
    String fields = "";
    
    for (int i = 0; i < columns.length; i++) {
        // replace comma Plus space
        String field = columns[i].replaceAll(", ", " || \", \" || ");
        // replace space
        field = field.replaceAll(" ", " || \" \" || "); 
        fields += ",("+field+") AS '" + columns[i] + "' ";
    }
    String query = "SELECT MemberId"+fields+" FROM tblMember ";
    

    注: 在上面的代码中我用过 || 用于列连接的sqlite运算符。但是,它成功地组合了空格,但没有将逗号与空格组合在一起,并显示以下语法错误:

    严重:空
    在org.sqlite.core.DB.newSQLException(DB。java:890)
    在org.sqlite.core.DB.newSQLException(DB。java:901)

    1 回复  |  直到 6 年前
        1
  •  1
  •   MikeT    6 年前

    我相信你的首要问题是 replaceAll .

    我相信以下可能是你想要的:-

        for (int i = 0; i < columns.length; i++) {
            // replace comma Plus space
            String field = columns[i].replaceAll(", ", "||',ASPACEHERE'||");
            // replace space
            field = field.replaceAll(" ", "||' '|| ");
            field = field.replaceAll("ASPACEHERE"," ");
            fields += ",("+field+") AS '" + columns[i] + "' ";
        }
        String query = "SELECT MemberId"+fields+" FROM tblMember ";
    
    • 而不是双引号 " 的,使用了单引号 ' ,因为它们更易于使用。
    • 一开始需要空间的地方 使用了一个空间需求指标,这样添加的空间就不会被第二个空间所取代 全部替换 (此处用ASPACEHERE作为输入)。
    • 三分之一 是用来替换inidcator的( 阿斯帕切尔 )用空格。

    SELECT MemberId,(LastName||' '|| FirstName) AS 'LastName FirstName' ,
        (City||', '||State||' '|| Postal) AS 'City, State Postal'  FROM tblMember
    

    而不是:-

    SELECT MemberId,(LastName || " " || FirstName) AS 'LastName FirstName' ,
        (City || " " || || || " " || ", || " " || " || " " || || || " " || State || " " || Postal) AS 'City, State Postal'  FROM tblMember
    

    第一个(正确的查询)结果是(使用以下示例数据):-

    enter image description here

    使用的整个测试SQL是(从 *查询 正在输出的变量):-

    DROP TABLE If EXISTS tblMember;
    CREATE TABLE IF NOT EXISTS tblMember (MemberId INTEGER, City TEXT, State TEXT, POSTAL TEXT, LastName TEXT, FirstName TEXT);
    INSERT INTO tblMember VALUES(1,'Oxford','Oxfordshire','OX12 0ND','Bloggs','Fred');
    SELECT MemberId,(LastName||' '|| FirstName) AS 'LastName FirstName' ,(City||', '||State||' '|| Postal) AS 'City, State Postal'  FROM tblMember;