首页 > 解决方案 > 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;

我只想将值设置为对象而不删除格式

希望你能帮助我。

谢谢!

标签: javaspring-mvcsqlite

解决方案


推荐阅读