javascript - JS SQLITE,读取一个数据库并写入另一个数据库

标签 javascript sqlite titanium

我有以下函数,它从一个数据库读取大约 15,000 行,格式化数据并写入另一个数据库。目前执行此操作大约需要 6 秒。有没有一种方法可以在不使用 javascript 格式化数据而仅使用 sqlite 查询的情况下做到这一点?或者有其他方法可以加快速度?

谢谢

      var events = db.open(events.sqlite3);
      function updateTimetable() {
        var rows = users.execute("SELECT id, complete, strftime('%s000',time) AS realTime, strftime('%H:%M',time) AS Time FROM exerciseLists WHERE patientId = ? ORDER BY time ASC", Alloy.Globals.currentUser);
          events.execute("DELETE FROM Events");
          events.execute('BEGIN');
          while (rows.isValidRow()) {
              var colorType;
              var active;
              var time = rows.fieldByName('Time');
              var realTime = rows.fieldByName('realTime');
              var now = new Date().getTime();
              if (realTime < now) {
                  colorType = 'red';
                  active = 'no';
              } else {
                  colorType = 'blue';
                  active = 'no';
              };
              if (rows.fieldByName('complete')) {
                  colorType = 'yellow';
              }
              if (Alloy.Globals.sessionButton.button.sessionId === rows.fieldByName('id')) {
                  colorType = 'green';
                  active = 'yes';
              }
              function pad(n) {
                  return n < 10 ? '0' + n : n
              }

              var d = new Date(parseInt(realTime));
              var dYear = d.getFullYear();
              var dDay = pad(d.getDate());
              var dMonth = pad(d.getMonth()+1);
              var dHour = pad(d.getHours()+1);
              var dMinute = pad(d.getMinutes()+1);

              var dFinal = dYear + "-" + dMonth + "-" + dDay + " " + dHour + ":" + dMinute;

              events.execute("INSERT INTO Events (title, date_start, date_end, note, location, identifier, type, attendees, organizer) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)", time, dFinal, '(null)', rows.fieldByName('id').toString(), colorType, rows.fieldByName('id').toString(), active, '(null)', '(null)');

              rows.next();
          }
          rows.close();
          events.execute('COMMIT');
          Alloy.Globals.refreshTimetable();
      };  

最佳答案

Attach将一个数据库连接到另一个数据库,然后使用 INSERT ... SELECT ... :

ATTACH 'users.sqlite' AS users_db;

INSERT INTO Events (title, date_start, date_end,
                    note, location, identifier,
                    type, attendees, organizer)
SELECT strftime('%H:%M', time),
       strftime('%Y-%m-%d %H:%M', time),
       '(null)',  -- why not NULL?
       id,
       CASE WHEN id = ? /* sessionId */   THEN 'green'
            WHEN complete                 THEN 'yellow'
            WHEN time < CURRENT_TIMESTAMP THEN 'red'
            ELSE                               'blue'
       END,
       id,
       CASE WHEN id = ? /* sessionId */ THEN 'yes'
            ELSE                             'no'
       END,
       '(null)',
       '(null)'
FROM users_db.exerciseLists
WHERE patientId = ?
ORDER BY time;

关于javascript - JS SQLITE,读取一个数据库并写入另一个数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15834321/

相关文章:

android - 想要在移动操作系统中为 App 永久存储两个变量

mysql - 使用生产数据库值填充开发数据库

javascript - RegEx用于JavaScript中的灵活时间验证

javascript - Bootstrap 模态未正确关闭(模态中的模态)

javascript - 如何通过 JavaScript 中的按钮用随机数填充表格单元格

php - SQLite3 统计行数

android - 按多列请求分组,结果在一行上 - Android SQLite

ios - 无法在新的 Appcelerator studio 中打包 IOS 应用程序?

javascript - 使用合金 Backbone 模型的参数保存模型

javascript - 为什么这不是 google.maps.Map 的 map 实例?无效值错误 : setMap: not an instance of Map;