สามารถเข้าถึงฐานข้อมูล SQLite จาก JavaScript ได้หรือไม่?


97

ฉันมีชุดไฟล์ HTML และฐานข้อมูล SQLite ซึ่งฉันต้องการเข้าถึงจากเบราว์เซอร์โดยใช้ file: // schema สามารถเข้าถึงฐานข้อมูลและสร้างแบบสอบถาม (และตาราง) โดยใช้ JavaScript ได้หรือไม่?


3
ตามfile:แบบแผนคุณหมายถึงบนคอมพิวเตอร์ที่เบราว์เซอร์ทำงานอยู่หรือไม่?

3
ใช่. ขณะนี้ฉันมีเครื่องมือที่สร้างรายงาน (รูปภาพจำนวนมากไฟล์ html และฐานข้อมูล sqlite) ฉันสามารถเปิดรายงานนี้ในเครื่อง (เช่น $ google-chrome report_out / index.html) ฉันต้องการทำให้สิ่งนี้มีการโต้ตอบมากขึ้นดังนั้นจาวาสคริปต์จะอ่านข้อมูลที่สร้างขึ้นจากฐานข้อมูลและสร้างสถิติจากมัน
Pal Szasz

ฉันเชื่อว่าเป็นไปได้ที่จะทำการเชื่อมต่อผ่านพร็อกซี WebSocket แต่ต้องใช้เวลาค่อนข้างนานในการตั้งค่า
hanshenrik

คำตอบ:


41

ที่จริงคำตอบคือใช่ นี่คือตัวอย่างวิธีที่คุณสามารถทำได้: http://html5doctor.com/introducing-web-sql-databases/

สิ่งที่ไม่ดีก็คือเบราว์เซอร์รองรับอย่าง จำกัด

ข้อมูลเพิ่มเติมที่นี่HTML5 IndexedDB ฐานข้อมูล Web SQL และสงครามเบราว์เซอร์

PS: ในฐานะที่เป็น @Christoph กล่าวว่าSQL บนเว็บไม่ได้อยู่ในการบำรุงรักษาการใช้งานและการใช้งานเว็บคณะทำงานไม่ได้ตั้งใจที่จะรักษามันต่อไปเพื่อให้ดูที่นี่https://developer.mozilla.org/en-US/docs/IndexedDB

SQL.js

แก้ไข

ในฐานะที่เป็น @clentfort กล่าวว่าคุณสามารถเข้าถึงฐานข้อมูล SQLite กับ JavaScript ฝั่งไคลเอ็นต์โดยใช้SQL.js


15
FYI websql ถูกละทิ้ง ... โปรโมตindexedDBแทน
Christoph

2
แต่สามารถเชื่อมต่อกับฐานข้อมูลที่มีอยู่แล้วได้หรือไม่? ฉันมีข้อมูลจำนวนมากอยู่แล้วซึ่งฉันต้องการประมวลผลด้วยจาวาสคริปต์
Pal Szasz

คุณสามารถใช้งานด้านเซิร์ฟเวอร์หรือลองใช้ Node.JS สำหรับcodeforgeek.com/2014/07/node-sqlite-tutorial
Mrug

40

คุณสามารถใช้SQL.jsซึ่งเป็น SQLlite lib ที่คอมไพล์เป็น JavaScript และจัดเก็บฐานข้อมูลในที่จัดเก็บในตัวเครื่องที่แนะนำใน HTML5


9
ที่เก็บข้อมูลในเครื่องช้าและเงอะงะมาก ... คุณควรใช้ indexedDB แทน อย่างไรก็ตามนี่เป็นวิธีแก้ปัญหาที่ใช้งานได้ฉันเดา
Christoph

2
แม้ว่า localstorage จะไม่ดีเท่า indexedDB แต่ก็รองรับได้ทุกที่ SQL.js ไม่ได้ใช้ localstorage โดยตรง (อยู่ในหน่วยความจำ) ดังนั้นคุณต้องอ่านจาก / เขียนไปยัง localstorage เมื่อเริ่มต้น / ปิดระบบคุณสามารถบันทึกสถานะของ SQL.js บนเซิร์ฟเวอร์ได้ หากคุณต้องการให้ผู้ใช้บันทึกการเปลี่ยนแปลงโดยเฉพาะไม่ดีหากผู้ใช้ออกไปโดยไม่ปล่อยให้บันทึกอาจทำให้สิ่งต่างๆเสียหายได้
Perkins

20

คำตอบที่ทันสมัย

ส้อมของฉัน sql.js ได้ถูกรวมเข้าไปในรุ่นเดิมใน repo

เอกสารที่ดียังมีอยู่ใน repo เดิม

คำตอบเดิม (ล้าสมัย)

คุณควรใช้รุ่นที่ใหม่กว่า sql.js เป็นพอร์ตของ sqlite 3.8 มีเอกสารที่ดีและได้รับการดูแลอย่างแข็งขัน (โดยฉัน) สนับสนุนคำสั่งที่เตรียมไว้และชนิดข้อมูล BLOB


ฉันสามารถใช้ sql.js เพื่อเข้าถึง (แทรกอัพเดตอ่าน) ฐานข้อมูล SQLite ซึ่งอยู่บนฝั่งเซิร์ฟเวอร์ได้หรือไม่
Abhee

@lovasoa ถ้าฉันใช้ sql.js คอมพิวเตอร์ใหม่สามารถเรียกใช้ไซต์ของฉันและทำ CRUD ไปยังฐานข้อมูลได้ (ฐานข้อมูลที่เก็บไว้ในเส้นทางเดียวกันกับโฟลเดอร์ HTML) โดยไม่ต้องทำการติดตั้งใด ๆ
Jeaf Gilbert

1
@JeafGilbert No. sql.js ทำงานเฉพาะในหน่วยความจำไม่มีอะไรคงอยู่ หากคุณต้องการเขียนไฟล์ฐานข้อมูลบนระบบไฟล์ของคุณคุณจะต้องเขียนตรรกะนั้นด้วยตัวเอง
lovasoa

4

หนึ่งในคุณสมบัติที่น่าสนใจที่สุดHTML5คือความสามารถในการจัดเก็บข้อมูลในเครื่องและเพื่อให้แอปพลิเคชันทำงานแบบออฟไลน์ มี API ที่แตกต่างกันสามแบบที่จัดการกับคุณลักษณะเหล่านี้และการเลือกหนึ่งขึ้นอยู่กับว่าคุณต้องการทำอะไรกับข้อมูลที่คุณวางแผนจะจัดเก็บในเครื่อง:

  1. ที่จัดเก็บบนเว็บ: สำหรับการจัดเก็บในเครื่องพื้นฐานที่มีคู่คีย์ / ค่า
  2. ที่เก็บข้อมูลออฟไลน์: ใช้รายการเพื่อแคชไฟล์ทั้งหมดสำหรับการใช้งานออฟไลน์
  3. ฐานข้อมูลบนเว็บ: สำหรับการจัดเก็บฐานข้อมูลเชิงสัมพันธ์

สำหรับข้อมูลอ้างอิงเพิ่มเติมโปรดดูการแนะนำ API พื้นที่เก็บข้อมูล HTML5

และวิธีการใช้

http://cookbooks.adobe.com/post_Store_data_in_the_HTML5_SQLite_database-19115.html


5
ฮิฮิลองดูการแก้ไขคำตอบของคุณครั้งที่สองที่นั่นคุณสามารถอ่านได้;)
คริสตอฟ

1

แล้วการใช้ PouchDB ล่ะ? http://pouchdb.com/


ดังที่คุณเห็นผู้เขียนคำถามมีsqlite DB และคุณยังไม่ได้ให้ตัวอย่างและสคริปต์สำหรับการแปลง SQLITE => POUCHDB
maxkoryukov

-2

IMHO วิธีที่ดีที่สุดคือเรียก Python โดยใช้ POST ผ่าน AJAX และทำทุกอย่างที่คุณต้องทำกับ DB ภายใน Python จากนั้นส่งผลลัพธ์กลับไปที่ javascript การสนับสนุน json และ sqlite ใน Python นั้นยอดเยี่ยมและมีการติดตั้งในตัว 100% แม้กระทั่งเวอร์ชันล่าสุดของ Python ดังนั้นจึงไม่มี "ติดตั้งสิ่งนี้ติดตั้ง" ความเจ็บปวดนั้น ใน Python:

import sqlite3
import json

... นั่นคือทั้งหมดที่คุณต้องการ เป็นส่วนหนึ่งของการแจกแจง Python ทุกครั้ง

@Sedrick Jefferson ขอตัวอย่างดังนั้น (ค่อนข้างช้า) ฉันได้เขียนกลับไปกลับมาระหว่าง Javascript และ Python ที่นี่


2
คำถามที่มี"... ซึ่งผมอยากจะเข้าถึงได้จากเบราว์เซอร์ ..." ดังนั้นคำตอบของคุณ (ด้วยpython) จึงไม่อยู่ในพื้นที่ (อย่างน้อยวันนี้เมื่อมันไม่ใช่เรื่องง่ายที่จะเรียกใช้ python จากเบราว์เซอร์)
maxkoryukov
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.