code: public function recreate($file)
      {
          if (is_file($file)) {
              return;
          }
          $virtual = $tables = $indexes = array();
          if ($result = $this->query('SELECT type, name, sql FROM sqlite_master')) {
              while (list($type, $name, $sql) = $this->fetch($result)) {
                  if (!empty($sql)) {
                      switch ($type) {
                          case 'table':
                              $tables[$name] = $sql;
                              break;
                          case 'index':
                              $indexes[] = $sql;
                              break;
                      }
                  }
              }
              $this->close($result);
          }
          foreach ($tables as $name => $sql) {
              if (strpos($sql, 'VIRTUAL TABLE')) {
                  $virtual[] = $name;
              }
          }
          foreach ($virtual as $table) {
              foreach ($tables as $name => $sql) {
                  if (strpos($name, "{$table}_") === 0) {
                      unset($tables[$name]);
                  }
              }
          }
          $db = new self($file);
          $this->exec('ATTACH DATABASE '.$this->dbEscape($file).' AS recreate');
          foreach ($tables as $table => $sql) {
              $db->connection()->exec($sql);
              if ($fields = $this->row('SELECT * FROM '.$table.' LIMIT 1', '', 'assoc')) {
                  $fields = implode(', ', array_keys($fields));
                  $this->exec("INSERT INTO recreate.{$table} ({$fields}) SELECT * FROM {$table}");
              }
          }
          foreach ($indexes as $sql) {
              $db->connection()->exec($sql);
          }
          $db->connection()->close();
      }
docs: When you overwhelm an SQLite database with overlapping inserts and updates, there's a chance it may become corrupted.  If it does, I've been able to recreate it using this method.
  
  @param string $file The **NEW** SQLite database file location.  The one you want to create.