ما هي أبسط طريقة لاستيراد ملف SQLite SQL في قاعدة بيانات SQL على الويب

StackOverflow https://stackoverflow.com/questions/2834534

سؤال

ربما أفتقد شيئًا ما ، لكني أحتاج إلى قاعدة بيانات من جانب العميل مسبقًا مع حمولة من البيانات.

لاختبار ما إذا كانت قواعد بيانات جانب العميل تصل إلى المهمة ، قمت بإنشاء بعض الجداول الوهمية مع بيانات وهمية باستخدام transaction.executeSql() طريقة. ولكن من ما يمكنني جمعه ، فإنه يتطلب مكالمة executesql لكل جدول إنشاء وإدراج في الاستعلام. أنا كسول ، ويبدو أن هذا الكثير من العمل بالنسبة لي.

أنا أتساءل ...: يمكنني إنشاء جدول sqlite بسرعة إلى حد ما باستخدام واجهة المستخدم الرسومية sqlite. لقد حاولت تصدير ملف SQL وتشغيله جميعًا في عبارة تنفيذ واحدة ، لكن هذا يعالج فقط "إنشاء جدول" لا أي من الإدراج.

هل هناك طريقة خاصة لكائن المعاملة لست على دراية بها لتشغيل استفسارات متعددة في وقت واحد؟

هذا لصالح Safari المتنقل شراء الطريق ، الذي وفقا ل Apple يستخدم قاعدة بيانات SQLite لتشغيل أشياء قاعدة بيانات جانب العميل الخاصة بهم.

هل كانت مفيدة؟

المحلول

لقد وضعت جميع رمز SQL في ملف مع أمر واحد لكل سطر ثم استخدمت ajax لسحب الملف والحلقة على كل سطر تنفيذ SQL

نصيحة: استخدم إذا لم يكن موجودًا حتى تتمكن من الاتصال به في كل مرة لبدء قاعدة البيانات الخاصة بك

نصائح أخرى

على سطر الأوامر (في مربع Linux) ، استخدم

sqlite3 myDatabase.sqlite .dump > myDatabase.sql

الآن لديك ملف sqlite ملقاة على ملف SQL عادي. سيحتوي على عبارات جدول إنشاء وبيانات إدراج.

بعد ذلك ، فإن بعض كود العملاء (ربما يحتاجون إلى بعض التعديل ، ولكن ستحصل على الفكرة)

أولا ، الاستيلاء على تفريغ SQL. (مثال باستخدام jQuery)

$.get('./dumps/myDatabase.sql', function(response) {
  // console.log("got db dump!", response);
  var db = openDatabase('myDatabase', '1.0', 'myDatabase', 10000000);
  processQuery(db, 2, response.split(';\n'), 'myDatabase'); 
});

تعمل وظيفة ProcessQuery على جميع العبارات واحدة تلو الأخرى ، وتتجاهل الأخطاء بصمت.

function processQuery(db, i, queries, dbname) {
    if(i < queries.length -1) {
      console.log(i +' of '+queries.length);
      if(!queries[i+1].match(/(INSERT|CREATE|DROP|PRAGMA|BEGIN|COMMIT)/)) {
        queries[i+1] = queries[i]+ ';\n' + queries[i+1];
         return processQuery(db, i+1, queries, dbname);
      }
      console.log('------------>', queries[i]);
      db.transaction( function (query){ 
        query.executeSql(queries[i]+';', [], function(tx, result) {
          processQuery(db, i +1, queries,dbname);  
        });          
      }, function(err) { 
      console.log("Query error in ", queries[i], err.message);                          
      processQuery(db, i +1, queries, dbname);   
      });
  } else {
      console.log("Done importing!");
  }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top