js如何访问数据库

js如何访问数据库
最新回答
万花丛中一朵菊

2021-04-04 12:17:43

JavaScript 访问数据库的方法主要分为三类:原生 API、第三方库和后端服务。以下是具体实现方式及步骤:

一、原生 JavaScript API1. IndexedDB(推荐)

特点:浏览器内置的 NoSQL 数据库,支持键值对存储和事务操作。步骤

  • 打开数据库:const request = indexedDB.open('myDatabase', 1);request.onupgradeneeded = (e) => { const db = e.target.result; db.createObjectStore('myStore', { keyPath: 'id' });};
  • 操作数据(增删改查):request.onsuccess = (e) => { const db = e.target.result; const transaction = db.transaction('myStore', 'readwrite'); const store = transaction.objectStore('myStore'); // 添加数据 store.add({ id: 1, name: 'Example' }); // 查询数据 const getRequest = store.get(1); getRequest.onsuccess = () => console.log(getRequest.result);};
2. Web SQL(已弃用)

注意:仅部分旧浏览器支持,不建议新项目使用。

const db = openDatabase('myDB', '1.0', 'Test DB', 2 * 1024 * 1024);db.transaction(tx => { tx.executeSql('CREATE TABLE IF NOT EXISTS users (id, name)'); tx.executeSql('INSERT INTO users VALUES (1, "Alice")');});二、第三方库1. SQL.js

特点:在浏览器中运行 SQLite,适合需要 SQL 语法的场景。步骤

  • 引入库:<script src="
    https://cdnjs.cloudflare.com/ajax/libs/sql.js/1.6.1/sql-wasm.js"></script>
  • 执行查询:initSqlJs().then(SQL => { const db = new SQL.Database(); db.run("CREATE TABLE test (id INTEGER, name TEXT);"); db.run("INSERT INTO test VALUES (1, 'Alice');"); const result = db.exec("SELECT * FROM test;"); console.log(result[0].values);});
2. Dexie.js

特点:简化 IndexedDB 操作的封装库。步骤

const db = new Dexie('MyDatabase');db.version(1).stores({ friends: '++id, name, age' });// 添加数据await db.friends.add({ name: 'Alice', age: 25 });// 查询数据const friends = await db.friends.where('age').above(20).toArray();三、后端服务1. Node.js + 数据库驱动

适用场景:服务器端访问 MySQL、MongoDB 等。示例(MySQL)

const mysql = require('mysql');const connection = mysql.createConnection({ host: 'localhost', user: 'root', database: 'test' });connection.connect();connection.query('SELECT * FROM users', (err, results) => { console.log(results);});2. PHP + JavaScript(AJAX)

流程

  1. PHP 后端(api.php):<?php$pdo = new PDO('mysql:host=localhost;dbname=test', 'user', 'pass');$stmt = $pdo->query('SELECT * FROM users');echo json_encode($stmt->fetchAll());?>
  2. 前端调用:fetch('api.php') .then(res => res.json()) .then(data => console.log(data));
四、关键注意事项
  1. 浏览器限制

    IndexedDB 和 Web SQL 仅限客户端,数据存储在用户浏览器中。

    敏感操作需通过后端服务处理。

  2. 安全性

    避免在前端直接暴露数据库凭证。

    使用参数化查询防止 SQL 注入(如 Node.js 的 mysql2/promise)。

  3. 性能

    大数据量操作建议分页或使用 Web Worker 避免阻塞 UI。

总结
  • 客户端存储:优先选择 IndexedDB 或 Dexie.js。
  • 复杂查询:使用 SQL.js(需注意 WASM 文件大小)。
  • 服务器端:Node.js/PHP + 数据库驱动,通过 API 与前端交互。

根据项目需求选择合适方案,平衡功能、性能与安全性。