首页  >  文章  >  web前端  >  Ionic:Angular CapacitorJS 和 SQLite

Ionic:Angular CapacitorJS 和 SQLite

Patricia Arquette
Patricia Arquette原创
2024-11-26 01:03:10542浏览

Ionic: Angular  CapacitorJS & SQLite

Angular 18 独立应用程序和 CapacitorJS 中的 SQLite 集成

本教程介绍了如何将 SQLite 集成到使用独立组件和信号的 Angular 18 应用程序中。我们将使用 @capacitor-community/sqlite 插件为 Android 和 iOS 平台启用 SQLite 功能。


先决条件

确保您已安装以下软件:

  • Node.js 和 npm
  • CapacitorJS
  • 具有独立组件和信号的 Angular 18

第 1 步:安装所需的软件包

运行以下命令来安装必要的依赖项:

npm install @capacitor-community/sqlite
npx cap sync

这些命令安装 SQLite 插件并将更改与本机平台同步。


第2步:创建数据库服务

数据库逻辑将封装在服务中,以提高可维护性。

// src/app/services/database.service.ts
import { Injectable } from '@angular/core';
import { CapacitorSQLite, SQLiteConnection, SQLiteDBConnection } from '@capacitor-community/sqlite';

@Injectable({
  providedIn: 'root',
})
export class DatabaseService {
  private sqlite: SQLiteConnection;
  private db: SQLiteDBConnection | null = null;

  constructor() {
    this.sqlite = new SQLiteConnection(CapacitorSQLite);
  }

  async initializeDatabase(): Promise<void> {
    try {
      // Check connection consistency
      const retCC = (await this.sqlite.checkConnectionsConsistency()).result;

      // Check is connected
      const isConnection = (await this.sqlite.isConnection('appDB', false)).result;

      if (!isConnection && !retCC) {
        // Create a new connection
        this.db = await this.sqlite.createConnection('appDB', false, 'no-encryption', 1, false);
        await this.db.open();
        await this.createTables();
      } else {
        // Retrieve existing connection
        this.db = await this.sqlite.retrieveConnection('appDB', false);
        await this.db.open();
      }
    } catch (error) {
      console.error('Error initializing the database:', error);
    }
  }

  private async createTables(): Promise<void> {
    if (!this.db) throw new Error('Database connection is not open');
    const createTableQuery = `
      CREATE TABLE IF NOT EXISTS users (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        name TEXT NOT NULL,
        age INTEGER NOT NULL
      );
    `;
    await this.db.execute(createTableQuery);
  }

  async addUser(name: string, age: number): Promise<void> {
    if (!this.db) throw new Error('Database connection is not open');
    const insertQuery = `INSERT INTO users (name, age) VALUES (?, ?);`;
    await this.db.run(insertQuery, [name, age]);
  }

  async getUsers(): Promise<any[]> {
    if (!this.db) throw new Error('Database connection is not open');
    const result = await this.db.query('SELECT * FROM users;');
    return result.values || [];
  }

  async closeDatabase(): Promise<void> {
    if (this.db) {
      await this.sqlite.closeConnection('appDB');
      this.db = null;
    }
  }
}

第三步:在根组件中初始化数据库服务

在应用程序的根组件中,初始化 DatabaseService。

// src/app/app.component.ts
import { Component, OnInit } from '@angular/core';
import { DatabaseService } from './services/database.service';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
})
export class AppComponent implements OnDestroy, AfterViewInit {
  constructor(private databaseService: DatabaseService) {}

  // Important: Initialize the database connection when the component is created  
  async ngAfterViewInit() {
    await this.databaseService.initializeDatabase();
  }

  // Important: Close the database connection when the component is destroyed
  async ngOnDestroy() {
    await this.databaseService.closeDatabase();
  }
}

第四步:在组件中使用数据库服务

您现在可以在任何组件中使用DatabaseService来执行CRUD操作。

// src/app/components/user-list/user-list.component.ts
import { Component, OnInit } from '@angular/core';
import { DatabaseService } from '../../services/database.service';

@Component({
  selector: 'app-user-list',
  templateUrl: './user-list.component.html',
})
export class UserListComponent implements OnInit {
  users: any[] = [];

  constructor(private databaseService: DatabaseService) {}

  async ngOnInit() {
    await this.databaseService.addUser('Max Mustermann', 25);
    await this.databaseService.addUser('Erika Musterfrau', 30);
    this.users = await this.databaseService.getUsers();
  }
}

笔记

  • 连接一致性:确保使用 checkConnectionsConsistency() 检查连接一致性,以避免重复的连接错误。
  • 单例服务:使用Angular的@Injectable和providedIn:'root'来确保DatabaseService是单例。
  • 在两个平台上进行测试:始终在 Android 和 iOS 设备上测试您的实现。

结论

通过这些步骤,您已成功使用 CapacitorJS 将 SQLite 集成到 Angular 18 独立应用程序中。此实现确保连接一致性并将数据库操作封装在可重用服务中。

以上是Ionic:Angular CapacitorJS 和 SQLite的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn