java - Sqlite3:如何对查询结果进行 URLEncode?
问题描述
我有一个连接到 SMS 网关的系统。我使用 sqlite3 连接到网关的数据库。系统连接到网关并检索消息,然后将其保存到 Oracle 数据库。我的问题是,一旦我将消息的值设置为对象,消息的格式就会消失。有什么方法可以对查询中的消息进行编码?
我试过这样做:
SELECT URLENCODE(*) FROM SMSRECV;
我知道这不是一个合适的功能,但我仍然尝试,因为我真的找不到方法
通过 ssh 连接到网关
private String getSmsDump() {
StringBuilder sb = new StringBuilder();
try {
String command = "sqlite3 /persistent/var/lib/asterisk/db/MyPBX.sqlite \".read /persistent/script/cwms/smsrecv_html.sqlc\"";
String host = this.sshHost;
String user = this.sshUser;
String password = this.sshPassword;
int port = this.sshPort;
JSch jsch = new JSch();
Session session = jsch.getSession(user, host, port);
Properties config = new Properties();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);
session.setPassword(password);
session.connect();
Channel channel = session.openChannel("exec");
((ChannelExec) channel).setCommand(command);
channel.setInputStream(null);
((ChannelExec) channel).setErrStream(System.err);
InputStream input = channel.getInputStream();
channel.connect();
try {
InputStreamReader inputReader = new InputStreamReader(input);
BufferedReader bufferedReader = new BufferedReader(inputReader);
String line = null;
while ((line = bufferedReader.readLine()) != null) {
sb.append(line);
}
bufferedReader.close();
inputReader.close();
} catch (Exception ex) {
LOGGER.error("BUFFERED READER ERROR: "+ex);
}
channel.disconnect();
session.disconnect();
} catch (JSchException | IOException ex) {
LOGGER.error("SSH CONNECTION ERROR: "+ex);
}
return sb.toString();
} // end getSmsHtmlDump()
将值设置为对象:
public List<SmsMessage> getSmsMessages() {
List<SmsMessage> result = new ArrayList();
String smsDump = getSmsDump();
String received = "RECEIVED";
String status = "1";
if (null != smsDump) {
Document messageDump = Jsoup.parse("<html><head></head><body><table>" + smsDump + "</table></body></html>");
Elements rows = messageDump.getElementsByTag("tr");
String hasRead = "0"; //no
// Lambda expression for iterating row elements
rows.stream().map((Element row) -> {
SmsMessage message = new SmsMessage();
Elements cols = row.getElementsByTag("td");
message.setMessageId(cols.get(0).text()); // Message ID
message.setSender(cols.get(1).text()); // Sender
message.setSmsc(cols.get(2).text()); // SMSC
message.setPortId(cols.get(3).text()); // Port ID
message.setContent(cols.get(4).text());
LOGGER.debug(cols.get(4).text());// Content
message.setReceiveTime(cols.get(5).text()); // Receive Time
message.setHasRead(hasRead); // Has Read
message.setTypeOfMessage(received);
message.setMessageStatus(status);
return message;
}).forEachOrdered((message) -> {
result.add(message);
//LOGGER.debug(message.toString());
});
}
return result;
} // end getSmsMessages()
文件内容smsrecv_html.sqlc
:
.mode html
SELECT * FROM SMSRECV;
我只想将值设置为对象而不删除格式
希望你能帮助我。
谢谢!
解决方案
推荐阅读
- java - 如何使用 GeoTools MathTransform?
- python - 根据双重条件对txt中的行进行排序
- android - DocumentsUI 在请求访问目录时显示“匿名”应用程序
- python - 在 Python 中计算低于平均值 2.5% 和高于平均值 2.5%
- apache-spark - spark使用什么算法将相同的密钥组合在一起
- maven-surefire-plugin - 未能执行目标 org.apache.maven.plugins:maven-surefire-plugin 2:22.2
- amazon-web-services - python s3fs中的配置文件参数
- input - 悬停输入元素,这会影响占位符
- cron - 通过 cron 的 PHP 脚本未找到代码中调用的文件
- react-native - 用于不变循环的反应钩子 - 可以接受吗?