Fillo库含单引号的查询/更新操作提示无效,求修复方案
解决Fillo库SQL查询中单引号导致的"Invalid query"错误
问题场景
使用Fillo 1.22版本执行SQL查询时,若WHERE条件值或更新内容包含单引号('),会触发"Invalid query"错误。例如:
String query = "Select * from Messages Where message='Let's hangout somewhere.'";
移除字符串中的单引号后查询可正常执行,常规的Java字符串转义(\')无法解决该问题。
可行解决方案
1. 使用参数化查询(推荐)
Fillo支持参数化查询,通过占位符?传递参数,彻底避免单引号转义问题,同时还能防范SQL注入风险。示例代码:
Fillo fillo = new Fillo(); Connection conn = fillo.getConnection("your_excel_file_path.xlsx"); // 用?作为参数占位符 String query = "Select * from Messages Where message=?"; PreparedStatement stmt = conn.prepareStatement(query); // 设置参数值 stmt.setString(1, "Let's hangout somewhere."); ResultSet rs = stmt.executeQuery(); // 处理查询结果 while (rs.next()) { System.out.println(rs.getString("message")); } // 关闭资源 rs.close(); stmt.close(); conn.close();
2. 手动转义单引号(替换为两个单引号)
Fillo底层遵循SQL风格的单引号转义规则:用两个连续的单引号('')表示实际的一个单引号,而非Java中的反斜杠转义。示例代码:
String targetMessage = "Let's hangout somewhere."; // 将单个单引号替换为两个 String escapedMessage = targetMessage.replace("'", "''"); String query = "Select * from Messages Where message='" + escapedMessage + "'"; Fillo fillo = new Fillo(); Connection conn = fillo.getConnection("your_excel_file_path.xlsx"); ResultSet rs = conn.executeQuery(query); // 处理结果...
处理后的查询语句为Select * from Messages Where message='Let''s hangout somewhere.',可被Fillo正确解析。
内容的提问来源于stack exchange,提问作者Akshay_Nayak
相关产品推荐
相关产品推荐

