2014-11-26 3 views
0

Я пытаюсь создать функцию строки соответствия, которая будет читать базу данных SQLLite (javascript created) из qml и соответствовать строке (адрес веб-страницы, данный ей в моем случае), это мой код файла базы данных:Как сравнить QML-строку из базы данных SQLight

.pragma library 

var db; 
// opens database at launch 
function openDB() 
{ 
    db = openDatabaseSync("BookmarksDB","1.0","Bookmarks Database",1000000); 
    createTable(); 
} 

// creates table if it doesn't exist, otherwise ignores 
function createTable() 
{ 
    db.transaction(
     function(tx) { 
      tx.executeSql("CREATE TABLE IF NOT EXISTS bookmarks (id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT, url TEXT, creationdate TEXT, modified DATETIME)"); 
     } 
    ) 
} 

// deletes table 
function dropTable() 
{ 
    db.transaction(
     function(tx) { 
      tx.executeSql("DROP TABLE IF EXISTS bookmarks"); 
     } 
    ) 
} 

// creates a single bookmark record 
function createBookmark(bookmarkItem) 
{ 
    db.transaction(
     function(tx) { 
      tx.executeSql("INSERT INTO bookmarks (title, url, creationdate, modified) VALUES(?,?,?,?)",[bookmarkItem.title, bookmarkItem.url, bookmarkItem.creationdate, bookmarkItem.modified]); 
     } 
    ) 
} 

// updates a single bookmark record 
function updateBookmark(bookmarkItem) 
{ 
    db.transaction(
     function(tx) { 
      tx.executeSql("UPDATE bookmarks SET title = ?, url = ?, creationdate = ?, modified = ? WHERE id = ?", 
         [bookmarkItem.title, bookmarkItem.url, bookmarkItem.creationdate, bookmarkItem.modified, bookmarkItem.id]); 
     } 
    ) 
} 

// deletes a single bookmark record 
function deleteBookmark(id) 
{ 
    db.transaction(
     function(tx) { 
      tx.executeSql("DELETE FROM bookmarks WHERE id = ?", [id]); 
     } 
    ) 
} 
// read list of bookmarks 
function readBookmarkList(model) 
{ 
    model.clear(); 
    var sqlstring = "SELECT id, title, url, creationdate FROM bookmarks"; 
    db.readTransaction(
     function(tx) { 
      var rs; 
      rs = tx.executeSql(sqlstring); 
      for (var i = 0; i < rs.rows.length; i++) { 
       model.append(rs.rows.item(i)) 
      } 
     } 
    ) 
} 



// read a single bookmark item 
function readBookmarkItem(id) { 
    var data = {} 
    db.readTransaction(
     function(tx) { 
      var rs = tx.executeSql("SELECT * FROM bookmarks WHERE id=?", [id]) 
      if(rs.rows.length === 1) { 
      data = rs.rows.item(0) 
      } 
     } 
    ) 
    return data; 
} 

// create a default bookmark item 
function defaultItem() 
{ 
    return {title: "", url: "", creationdate: new Date(), modified: new Date()} 
} 

Я хотел создать что-то подобное, функция checkUrl (URL) {

если (dbvalues ​​== URL) { возвращающие } еще {возвращение false}

} }

Но у меня нет понятия, как читать все данные из таблиц и сравнивать их с указанным в функции URL.

Может кто-нибудь, пожалуйста, помогите мне?

Я полный нуб с SQL вещи

Использование Qt Quick 1.1 на Symbian

+0

Ну, это как-то странно, так как код, который вы опубликовали, имеет все необходимые функции для этого. Вы получаете данные с помощью 'executeSql()', тогда вы можете ссылаться на него, вызывая 'rs.rows.thenameoffield (number) .attribute', где number - это значение, которое представляет собой частный результат. – Nadarian

+0

. Я искал его для проверки на каждую запись url в базе данных, например rs.rows.url (1) .attribute return 'rs.rows' [undefined] не является объектом. Почему я сказал, что я был noob в SQL-материале – Paul

+0

Возможно, запрос SQL неверен. Получите некоторые основы от f.e. wc3schools и попытайтесь сделать правильный запрос. – Nadarian

ответ

0

Почему бы вам не попробовать что-то вроде

function checkURL(url) { 
    var exists 
    db.readTransaction(function(tx) { 
     var sql = "SELECT url FROM bookmarks WHERE url=? LIMIT 1"; 
     var rs = tx.executeSql(sql, [url]) 
     exists = rs.rows.length > 0 
    }) 
    return exists 
} 

LIMIT 1 пункта расскажет DB двигатель, чтобы остановить поиск, когда он найдет первую строку, соответствующую вашим критериям.

Не пробовал это сам, но он должен работать.

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