Skip to content

indexeddb

2021.02.07 20:03

WHRIA 조회 수:106

로메오의 블로그 :: [Chrome] IndexedDB 사용하기 (tistory.com)

 

아래는 전체 코드입니다.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>IndexedDB</title>

    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
</head>

<body>

    companyName: <input type="text" id="companyName"><br>
    production: <input type="text" id="production"><br>
    <button id="submit">입력</button>
    <button id="clearAll">모두삭제</button>

    <ul id="lists"></ul>

<script>
const DATABASE = 'MyDatabase';
const DB_VERSION = 1;
const DB_STORE_NAME = 'company';

var db;

openDB = () => {
    // DB 생성
    var req = indexedDB.open(DATABASE, DB_VERSION);

    // DB 생성 성공
    req.onsuccess = function (evt) {
        db = this.result;
        getAllData();
    };
    // DB 생성 오류
    req.onerror = function (evt) {
        console.error("indexedDB : ", evt.target.errorCode);
    };
    // DB 마그레이션
    req.onupgradeneeded = function (evt) {
        console.log("indexedDB.onupgradeneeded");
        var store = evt.currentTarget.result.createObjectStore(DB_STORE_NAME,
            { keyPath: 'id', autoIncrement: true });

        store.createIndex('company', 'company', { unique: true });
        store.createIndex('production', 'production', { unique: false });
    };
}

openDB()

// Store를 반환한다.
getObjectStore = (store_name, mode) => {
    return db.transaction(store_name, mode).objectStore(store_name);
}

// 데이터 입력하기
$('#submit').on('click', () => {
    const companyName = $('#companyName').val()
    const production = $('#production').val()
    if (!companyName) {
        return alert('company name은 필수입니다.')
    }
    if (!production) {
        return alert('production은 필수입니다.')
    }

    // 입력한 데이터를 추가한다.
    let store = getObjectStore(DB_STORE_NAME, 'readwrite');
    let req
    const obj = { 
        company: companyName, 
        production: production
    };

    try {
        req = store.add(obj);
    } catch (e) { }

    req.onsuccess = function (evt) {
        console.log("입력 되었습니다.");
    };
    req.onerror = function () {
        console.error(this.error);
    };
})

// 모든 데이터를 가지고 온다.
getAllData = () => {
    // get
    store = getObjectStore(DB_STORE_NAME, 'readonly');
    let req = store.openCursor();
    let strBuffer = []
    req.onsuccess = evt => {
        const cursor = evt.target.result;
        if (cursor) {
            req = store.get(cursor.key);
            req.onsuccess = function (evt) {
                const value = evt.target.result;
                strBuffer.push('<li>')
                strBuffer.push(value.company + ' (' + value.production + ')')
                strBuffer.push(' [<a href="#" data-delete="' + value.id + '">삭제</a>]')
                strBuffer.push('</li>')
                console.log(value)
            }
            cursor.continue();
        }
        $('#lists').html(strBuffer.join(''))

        // 데이터를 삭제한다.
        $('[data-delete]').on('click', evt => {
            const id = $(evt.currentTarget).attr('data-delete')
            store = getObjectStore(DB_STORE_NAME, 'readwrite');
            store.delete(id)
                .onsuccess = event => {
                    console.log('deleted')
                }
        })
    }
}

// 데이터를 모두 삭제한다.
$('#clearAll').on('click', () => {
    // clear
    var store = getObjectStore(DB_STORE_NAME, 'readwrite');
    var req = store.clear();
    req.onsuccess = function (evt) {
        console.log('clear')
    };
    req.onerror = function (evt) {
        console.log('error')
    };
})
</script>
</body>

</html>
번호 제목 글쓴이 날짜 조회 수
1581 우분투 7.10 으로 업그레이드 WHRIA 2007.12.03 7745
1580 VirtualBox WHRIA 2007.10.07 7745
1579 비상 [1] WHRIA 2007.11.12 7742
1578 Pidgin WHRIA 2007.09.01 7726
1577 partimage 사용법 WHRIA 2011.04.25 7725
1576 이랬으면 좋겠네. WHRIA 2012.07.15 7708
1575 토미그린 (tomygreen) 해외 핸드폰 (nexus 4) 에 설치하기 file WHRIA 2013.04.03 7700
1574 추석 WHRIA 2007.09.25 7689
1573 Minor update WHRIA 2007.08.09 7685
1572 Interpretation of the Outputs of Deep Learning Model Trained with Skin Cancer Dataset [1] WHRIA 2018.06.02 7678
1571 Face It. WHRIA 2007.08.09 7678
1570 frame WHRIA 2008.12.11 7675
1569 gomphoto 1.0.1 file WHRIA 2013.01.10 7643
1568 whria.net 복구 WHRIA 2012.12.09 7642
1567 deskzoom file WHRIA 2012.05.22 7596

Powered by Xpress Engine / Designed by Sketchbook

sketchbook5, 스케치북5

sketchbook5, 스케치북5

나눔글꼴 설치 안내


이 PC에는 나눔글꼴이 설치되어 있지 않습니다.

이 사이트를 나눔글꼴로 보기 위해서는
나눔글꼴을 설치해야 합니다.

설치 취소