2015-12-24 1 views
5

У меня есть файл, содержащийЧтение текстового файла с JQuery и хранить в базе данных

1 : "Benz" 
2 : "Bmw" 
3 : "Porche" 
4 : "Ferrari" 

И я хотел бы, чтобы прочитать его с Jquery и хранить их в локальной базе данных в OpenDatabase, с 1 будет несколько шаг и Benz будет другим полем в базе данных.

мой код для чтения файла

jQuery.get('file/words.txt', function(data) { 
    alert(data) 
}); 

и мой код для создания базы данных

var db = openDatabase(’mydb’, ’1.0’, 
        ’database for test’, 
        2 * 1024 * 1024 
       ); 
db.transaction(function (tx) { 
tx.executeSql(’CREATE TABLE IF NOT EXISTS Car 
       (number INT, name VARCHAR(100))’); 

}); 

Я не знаю, как я могу разделить данные и поместить их в базу данных с помощью JavaScript.

Спасибо.

+0

Это действительно так, но вы можете попробовать получить файл и использовать '.split()' javascript, чтобы сделать его массивом? – Stardust

+0

Я думаю, что я должен использовать матч, но я не знаю, как – joseva

ответ

1

Вот код, сделать что вы хотите:

// assume this is your data (I've added the newline as well) 
var textData = '1 : "Benz" \n2 : "Bmw" \n3 : "Porche"\n4 : "Ferrari" '; 

// turn data into array 
var ary = textData.split('\n').map(function(v) { 
    return v.split(':').map(function(v2) { 
     // make sure we remove the quotes and spaces 
     return v2.replace(/"/g, '').trim(); 
    }); 
}) 

// function to escape double quotes to prevent sql injection 
function escapeSql(str) { 
    return (typeof str === 'number' ? str : str.replace(/"/g, '"')); 
} 

// open database 
var db = openDatabase('mydb', '1.0', 'database for test', 2 * 1024 * 1024); 

// create table 
db.transaction(function(tx) { 
    tx.executeSql('create table if not exists Car(step, make)'); 
}); 

// insert data 
db.transaction(function(tx) { 
    // loop through each item and insert the data, notice how we call escapeSql to prevent sql injection 
    ary.forEach(function(item) { 
     var sql = 'insert into Car(step, make) values(' + escapeSql(item[0]) + ', "' + escapeSql(item[1]) + '")'; 
     tx.executeSql(sql); 
    }); 
}); 

var sql, 
    cars = []; 

// read data from table 
db.transaction(function(tx) { 
    tx.executeSql('select * from Car', [], function(tx, results) { 
     var len = results.rows.length; 
     for (var i = 0; i < len; i++) { 
      cars.push({ 
       step: results.rows.item(i).step, 
       make: results.rows.item(i).make 
      }); 
     } 

     console.log(cars); 
    }, null); 
}); 

Выход:

enter image description here

+0

Спасибо за ваш код и специально для комментариев. оно работает. – joseva

1

Избавьтесь от номеров и котировок в текстовом файле, если сможете, они не должны быть необходимы (ваш счетчик сделает это за вас).

Изменить код для чтения текстового файла с этим:

var file = "file/words.txt"; 
    function getFile(){ 
     $.get(file, function(txt){ 
      var lines = txt.responseText.split("\n"); 
      for (var i = 0, len = lines.length; i < len; i++) { 
       save(lines[i]); 
      } 
     }); 
    } 

Теперь у вас есть массив с каждой строкой файла; если вы удалили цифры и кавычки, это должны быть только названия автомобилей.

for (var i = 0; i < lines.length; i++) { 
    tx.executeSql('INSERT INTO Car (id, name) VALUES (i, lines[i]); 
} 

Если вы хотите сохранить файл как есть, изменить строку ниже, как показано на рисунке:

var lines = txt.responseText.split(":"); 

Теперь массив содержит номер и название автомобиля (нечетное это число, даже это название автомобиля). Мы можем хотеть, чтобы избавиться от двойных кавычек (SQL может бросить ошибку на них):

lines.replace(/"/g, '').trim(); 

for (var i = 0; i < lines.length; i++) { 
     tx.executeSql('INSERT INTO Car (id, name) VALUES (i, lines[i+1])'); 
     i++; // we iterate again because we want an odd number 
      // (we skip over one iteration as that'd be the car, and we want the next # instead). 
    } 
+0

, к сожалению, мне нужны цифры и цитаты. на самом деле файл есть, и я должен его использовать. числа означают, что результатом шага 1 будет Benz, а результатом шага 2 будет Bmw – joseva

+0

@joseva. Прекрасно, изменение кода относительно просто. Просто измените .split ("\ n") на .split (":"), так как это разделитель b/w # и название автомобиля. Я уточню свой ответ с более подробной информацией. – Boris

 Смежные вопросы

  • Нет связанных вопросов^_^