我有这些列(MemberId
、City
、State
和 Postal
)和(FirstName
和 LastName
)位于 sqlite 表 tblMember
中。
我想在 java 中创建一个查询,如下所示:
SELECT (LastName FirstName) AS 'LastName FirstName',
(City, State Postal) AS 'City, State Postal' FROM tblMember;
因此,我已经搜索并尝试了下面的代码,用于在 java 中创建上述查询,如下所示:
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 运算符来连接列。但是,它成功地组合了空格,但没有将逗号与空格组合,并显示以下语法错误:
SEVERE: null java.sql.SQLException: [SQLITE_ERROR] SQL error or missing database (near "||": syntax error)
at org.sqlite.core.DB.newSQLException(DB.java:890)
at org.sqlite.core.DB.newSQLException(DB.java:901)
请帮我解决这个问题!
最佳答案
我认为您的主要问题是第一个 replaceAll
引入了空格,然后被第二个 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 ";
- 使用单引号
'
而不是双引号"
,因为它们更易于使用。 - 所有没有特别要求的空格均已删除。
- 如果第一个
replaceAll
中需要空格,则使用是否需要空格的指示符,以便添加的空格不会被第二个replaceAll
替换(ASPACEHERE被用作指示剂)。 - 添加了第三个
replaceAll
,以用空格替换启动符 (ASPACEHERE)。
这会产生一个查询:-
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
第一个(更正后的查询)结果(使用如下示例数据):-
使用的整个测试 SQL 是(从输出的 *query 变量复制的 SELECT 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;
关于java - 使用 java 在 sqlite SELECT 中的列之间添加逗号和空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52460972/