# Parte 2: Integrazione con SQLite

Benvenuti a questa lezione su ZioMark's HUB, dove esploreremo come utilizzare Node.js in combinazione con SQLite per creare applicazioni web che interagiscono con un database.

### La storia di SQLite

SQLite è un motore di database relazionale leggero che, a differenza di altri sistemi di gestione di database come MySQL o PostgreSQL, non è basato su un'architettura client-server. SQLite è incorporato direttamente nei programmi. Il progetto è stato avviato nel 2000 da [D. Richard Hipp ](https://en.wikipedia.org/wiki/D._Richard_Hipp)e si è diffuso ampiamente per la sua affidabilità, semplicità e la natura open source, essendo un database ideale per dispositivi embedded, applicazioni per desktop e siti web che necessitano di un setup semplice senza l'onere di gestire un database server separato.

### Cos'è SQLite?

SQLite è un database SQL completo archiviato in un singolo file cross-platform. Supporta gran parte dello standard SQL e non richiede una configurazione separata del server, processo o sistema operativo. È molto usato per applicazioni leggere, soprattutto dove la semplicità e la minima configurazione sono essenziali.

### Integrare SQLite con Node.js

Per utilizzare SQLite con Node.js, possiamo utilizzare il modulo npm chiamato `sqlite3`, che fornisce un'interfaccia asincrona, non bloccante per interagire con il database SQLite.

#### Installazione

Prima di iniziare, assicurati di avere Node.js installato. Poi installa il pacchetto `sqlite3` usando npm:

```bash
npm install sqlite3
```

### Esercizio Pratico: Creare e Interrogare un Database

Per il nostro esercizio, creeremo un semplice database SQLite che gestisce dati degli utenti e scriviamo uno script Node.js per interagire con esso.

#### Passaggi dell'Esercizio

1. **Crea un file `database.js`**: Questo file conterrà il codice per configurare il database.
2. **Inizializza il Database**: Apri il tuo editor di testo e incolla il seguente codice in `database.js`:

```javascript
const sqlite3 = require('sqlite3').verbose();

// Connessione al database SQLite
let db = new sqlite3.Database('./users.db', sqlite3.OPEN_READWRITE | sqlite3.OPEN_CREATE, (err) => {
    if (err) {
        console.error(err.message);
    }
    console.log('Connessione al database riuscita.');
});

// Crea una tabella
db.run(`CREATE TABLE IF NOT EXISTS users (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL,
    email TEXT NOT NULL UNIQUE
)`);

// Chiudi la connessione al database
db.close((err) => {
    if (err) {
        console.error(err.message);
    }
    console.log('Connessione al database chiusa.');
});
```

3. **Esegui lo Script**: Apri il terminale, naviga alla cartella contenente `database.js` e digita:

```bash
node database.js
```

Questo script creerà un database chiamato `users.db` con una tabella `users`. Se il database esiste già, lo script semplicemente si connetterà a esso.

{% hint style="info" %}
Consigliamo la lettura di <https://learn.ziomark.xyz/sql/parte-1-introduzione-a-sql> per conoscere meglio il funzionamento della sintassi SQL (che viene utilizzata anche da sqlite)
{% endhint %}

### Conclusione

Con questa lezione, hai appreso come integrare SQLite in un'applicazione Node.js, creando e gestendo un database direttamente dal tuo codice JavaScript. Queste competenze sono fondamentali per costruire applicazioni web che richiedono una persistenza dei dati efficiente e leggera.

Continua a sperimentare con SQLite e Node.js per esplorare ulteriori possibilità e perfezionare le tue abilità di sviluppo backend.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://learn.ziomark.xyz/javascript/node.js/parte-2-integrazione-con-sqlite.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
