2011-03-09 32 views
12

XCode'da bir PhoneGap projesi kullanıyorum. Javascript kullanarak bir SQLite veritabanına bağlanmaya çalışıyorum.Javascript'te SQLite veritabanı yerel olarak

Bir SQLite aracında "myDatabase.sqlite" dosyası yaptım. Şimdi sorum şu, bu veritabanımı kodumda nasıl açabilirim? Şu anda aşağıdaki kodu kullanıyorum:

var db; 
var shortName = 'myDatabase'; 
var version = '1.0'; 
var displayName = 'myDatabase'; 
var maxSize = 65535; 


db = openDatabase(shortName, version, displayName,maxSize); 

db.transaction(function(transaction) { 
    transaction.executeSql('SELECT * FROM User;', [], 
    function(transaction, result) { 

     if (result != null && result.rows != null) { 
      for (var i = 0; i < result.rows.length; i++) { 
       var row = result.rows.item(i); 
       alert(row.ID); 
      } 
     } 
    }, errorHandler); 
}, errorHandler, nullHandler); 

sorun bunu çalıştırdığınızda bu hatayı 'Hayır böyle bir tablo' verir, çünkü veritabanı boş olmasıdır. "myDatabase" adında yeni bir veritabanı oluşturduğunu ve bu nedenle neden tabloları olmadığını düşünüyorum.

Dosyamı, içindeki tüm tablolarla nasıl açabileceğimi bilen var mı?

Teşekkürler!

cevap

11

Bu komut size yardımcı olacaktır:

<script type="text/javascript"> 
     function createDatabase(){ 
     try{ 
       if(window.openDatabase){ 
       var shortName = 'db_xyz'; 
       var version = '1.0'; 
       var displayName = 'Display Information'; 
       var maxSize = 65536; // in bytes 
       db = openDatabase(shortName, version, displayName, maxSize); 
     } 
    }catch(e){ 
       alert(e); 
      } 
    } 
    function executeQuery($query,callback){ 
    try{ 
     if(window.openDatabase){ 
     db.transaction(
     function(tx){ 
     tx.executeSql($query,[],function(tx,result){ 
     if(typeof(callback) == "function"){ 
       callback(result); 
     }else{ 
       if(callback != undefined){ 
         eval(callback+"(result)"); 
        } 
     } 
     },function(tx,error){}); 
      }); 
      return rslt; 
     } 
     }catch(e){} 
     } 
      function createTable(){ 
      var sql = 'drop table image'; 
       executeQuery(sql); 
       var sqlC = 'CREATE TABLE image (id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, image BLOB)'; 
       executeQuery(sqlC); 
      } 
      function insertValue(){ 
       var img = document.getElementById('image'); 
       var sql = 'insert into image (name,image) VALUES ("sujeet","'+img+'")'; 
       executeQuery(sql,function(results){alert(results)}); 
      } 
<input type="button" name='create' onClick="createDatabase()" value='Create Database'> 
<input type="button" name='create' onClick="createTable()" value='create table'> 
<input type="button" name='insert' onClick="insertValue()" value='Insert value'> 
<input type="button" name='select' onClick="showTable()" value='show table'> 
<input type="file" id="image" > 
<div result></div> 
</script> 

kod go ziyaret url indirmek için: Benim sqlite kodunda

http://blog.developeronhire.com/create-sqlite-table-insert-into-sqlite-table/

+2

Bu kod, tabloyu daha önce sqlite dosyasında yapmış olduğunuz verilerle mi bırakır? Yani yine de kodu tekrar veriye eklemelisin? İhtiyacım olan tüm veriler zaten SQLite dosyasında .. – Tjekkles

+1

Sağladığınız bağlantı öldü, güncelleyebilir misiniz? Teşekkürler –

+0

Bu kodu kullanmayı denedim. IPhone'da bir uygulama olarak bunu oluşturmak için cordova kullanıyorum. Ama ben kod 5 alıyorum. Bana yardımcı olabilir misiniz? @Sujeet – Anu

0

myDatabase ve myDatabase.sqlite 2 farklı dosya adıdır, uzantı ile doğru dosya adını başvurmak için kodunuzu güncelleyin.

Var olmayan bir veritabanını açmaya çalıştığınızda, SQLite otomatik olarak yeni bir boş veritabanı oluşturur.

+0

myDatabase.sqlite programı OpenDatabase komutunun (daha önce ve bu satırdan sonra bir uyarı koyduk durur ... ve ikincisini ilk uyarı gösterir, ancak. Öyleyse neden bu sorun olduğunu düşünüyordum ... Herhangi bir fikrin var mı? – Tjekkles

1

Üç js hata ayıklama için sqlite birini kontrol etmeye yönelik dosyasını kullanıyorum amaç, sorguları yürütmek için bir diğeri veritabanını başlatmak ve temel tablolar oluşturmak için diğeridir.


startup.js
query.js

Reference URL ishttp://allinworld99.blogspot.in/2016/04/sqlite-first-setup.html
startup.js

var CreateTb1 = "CREATE TABLE IF NOT EXISTS tbl1(ID INTEGER PRIMARY KEY AUTOINCREMENT, CreatedDate TEXT,LastModifiedDate TEXT, Name TEXT)"; 
var CreateTb2 = "CREATE TABLE IF NOT EXISTS tbl2(ID INTEGER PRIMARY KEY AUTOINCREMENT, CreatedDate TEXT,LastModifiedDate TEXT,Mark INTEGER)"; 

var DefaultInsert = "INSERT INTO tbl1(CreatedDate,Name) select '" + new Date() + "','Merbin Joe' WHERE NOT EXISTS(select * from tbl1)"; 

var db = openDatabase("TestDB", "1.0", "Testing Purpose", 200000); // Open SQLite Database 

$(window).load(function() 
{ 
    initDatabase(); 
}); 

function createTable() // Function for Create Table in SQLite. 
{ 

    db.transaction(function(tx) 
    { 
    tx.executeSql(CreateTb1, [], tblonsucc, tblonError); 
    tx.executeSql(CreateTb2, [], tblonsucc, tblonError); 

    insertquery(DefaultSettingInsert, defaultsuccess); 

    }, tranonError, tranonSucc); 
} 

function initDatabase() // Function Call When Page is ready. 
{ 
    try 
    { 
    if (!window.openDatabase) // Check browser is supported SQLite or not. 
    { 
     alert('Databases are not supported in your device'); 
    } 
    else 
    { 
     createTable(); // If supported then call Function for create table in SQLite 
    } 
    } 
    catch (e) 
    { 
    if (e == 2) 
    { 
     // Version number mismatch. 
     console.log("Invalid database version."); 
    } 
    else 
    { 
     console.log("Unknown error " + e + "."); 
    } 
    return; 
    } 
} 

debug.js

function tblonsucc() 
{ 
    console.info("Your table created successfully"); 
} 

function tblonError() 
{ 
    console.error("Error while creating the tables"); 
} 

function tranonError(err) 
{ 
    console.error("Error processing SQL: " + err.code); 
} 

function tranonSucc() 
{ 
    console.info("Transaction Success"); 
} 

query.js debug.js Adını kullandığınızda

function insertquery(query, succ_fun) 
{ 
    db.transaction(function(tx) 
    { 
    tx.executeSql(query, [], eval(succ_fun), insertonError); 
    }); 
} 

function deletedata(query, succ_fun) 
{ 
    db.transaction(function(tx) 
    { 
    tx.executeSql(query, [], eval(succ_fun), deleteonError); 
    }); 
} 

function updatedata(query, succ_fun) 
{ 
    db.transaction(function(tx) 
    { 
    tx.executeSql(query, [], eval(succ_fun), updateonError); 
    }); 
} 

function selectitems(query, succ_fun) // Function For Retrive data from Database Display records as list 
{ 
    db.transaction(function(tx) 
    { 
    tx.executeSql(query, [], function(tx, result) 
    { 
     eval(succ_fun)(result.rows); 
    }); 
    }); 
} 
İlgili konular