JS操作sqliteデータベース


JS操作SQLiteデータベース
0.問題の由来
  • MySqlなどの膨大なデータベースが大嫌いで、プロジェクトではできるだけSQLiteデータベース
  • を使っています.
  • ローカルプロジェクトは、イントラネット上で簡単に一部の情報にアクセスできる必要があるため、JavaScriptがSQLiteにアクセスする問題
  • に関連する.
    1.問題の解決
    1.1sql.jsライブラリ
    偉大なgithubがいて、もちろん自分でデータベースアクセスライブラリを書く必要はありません.sql.jsライブラリは、Emscripten(これは何なのか聞かないで、私も知らない)でc++から変換されたsqlite 3データベースにアクセスするJSライブラリで、最新の3.8.7.4.4バージョンのsqlite 3にサポートされています.このライブラリは、単一のファイルを参照するだけで機能し、sqliteから完全に離れます.
    1.2開発環境
    1.EverEdit(この国産エディタをお勧め)64 bit
    2.html+JavaScript+css+sql.js
    3.sqliteのデータベースファイルを準備し、1,2を参照
    4.SQLiteSpyソフトウェア
    1.3主なコード
    
    
    
    <html>
    
        <head>
    
            <meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
    
            <script type="text/javascript" src="sql.js">script>
    
        head>
    
        <body>
    
            <button name="test" type="button" value="val" onclick="save()">Button Textbutton>
    
            <input id="uploadInput" type="file" onchange="getfile()">
    
        body>
    
        <script>
    
            function save() {
    
    
    
                //Create the database
    
                var db = new window.SQL.Database();
    
    
    
                db.run("CREATE TABLE test ( 1 int,  2 char);");         
    
                db.run("INSERT INTO test VALUES (0,'hello');");
    
                db.run("INSERT INTO test VALUES (1,'world');");
    
                db.run("INSERT INTO test VALUES (55,'34534545');");
    
                db.run("INSERT INTO test VALUES (166,'woteggrgrld');");
    
                //save to local file
    
                var data = db.export();
    
                var arraybuff = data.buffer;
    
                var blob = new Blob([arraybuff]);
    
                var url = window.URL.createObjectURL(blob);
    
    
    
                var a = document.createElement("a");
    
                a.href = url;           
    
                a.download = 'test.db';
    
                a.click();
    
                window.URL.revokeObjectURL(url);
    
    
    
            }
    
    
    
            function getfile() {
    
    
    
                var files = document.getElementById("uploadInput").files;//document.getElementById("uploadInput").value;
    
    
    
                var file = files[0];
    
                var fr = new FileReader();
    
                fr.onload = function(){
    
    
    
                    var Uints = new Uint8Array(fr.result);
    
    
    
                    var db = new window.SQL.Database(Uints);
    
    
    
                    var res = db.exec("SELECT  2 FROM test");
    
                    for(i=0;i0].values.length;i++)
    
                    {//query values
    
                        console.log(res[0].values[i]+' ');
    
                    }   
    
    
    
    
    
                }
    
    
    
                fr.readAsArrayBuffer(file);
    
    
    
            }
    
        script>
    
    
    
    html>
    

    1.4説明
    1.15-20行データベースに対する操作はメモリで行い、ローカルに保存するには21行後のコードを実行する必要があります.
    2.上のコードをローカルに保存しても、元のデータベースは上書きされません.
    3.クエリー時resは、複数行のオブジェクトが保存されている配列です.コードドキュメントに書く
    We have the following table, named test :
    id age name
    1 1 Ling
    2 18 Paul
    3 3 Markus
    We query it like that:
    
    var db = new SQL.Database();
    
    var res = db.exec("SELECT id FROM test; SELECT age,name FROM test;");
    
    
    

    res is now :
    [
       {columns: ['id'], values:[[1],[2],[3]]},
    
       {columns: ['age','name'], values:[[1,'Ling'],[18,'Paul'],[3,'Markus']]}
    

    ]
    賞をあげよう
    もし私の文字があなたの問題を解決したら、賞を打って、私にもっと動力を与えてください:)