w3c-html-javascript: webdatabase

8119 단어
먼저 예제 원본을 보십시오.
function prepareDatabase(ready, error) {
  return openDatabase('documents', '1.0', 'Offline document storage', 5*1024*1024, function (db) {
    db.changeVersion('', '1.0', function (t) {
      t.executeSql('CREATE TABLE docids (id, name)');
    }, error);
  });
}

function showDocCount(db, span) {
  db.readTransaction(function (t) {
    t.executeSql('SELECT COUNT(*) AS c FROM docids', [], function (t, r) {
      span.textContent = r.rows[0].c;
    }, function (t, e) {
      // couldn't read database
      span.textContent = '(unknown: ' + e.message + ')';
    });
  });
}

prepareDatabase(function(db) {
  // got database
  var span = document.getElementById('doc-count');
  showDocCount(db, span);
}, function (e) {
  // error getting database
  alert(e.message);
});

레코드 읽기
1. openDatabase에 대한 모든 API는 하나의 API입니다. 동기화된 API를 사용하려면 openDatabaseSync를 사용하십시오.
2. 우리가 OpenDatabase 방법을 호출할 때 무슨 일이 일어날지,
            [Supplemental, NoInterfaceObject]
interface WindowDatabase {
  Database openDatabase(in DOMString name, in DOMString version, in DOMString displayName, in unsigned long estimatedSize, in optional DatabaseCallback creationCallback);
};
Window implements WindowDatabase;

[Supplemental, NoInterfaceObject]
interface WorkerUtilsDatabase {
  Database openDatabase(in DOMString name, in DOMString version, in DOMString displayName, in unsigned long estimatedSize, in optional DatabaseCallback creationCallback);
  DatabaseSync openDatabaseSync(in DOMString name, in DOMString version, in DOMString displayName, in unsigned long estimatedSize, in optional DatabaseCallback creationCallback);
};
WorkerUtils implements WorkerUtilsDatabase;

[Callback=FunctionOnly, NoInterfaceObject]
interface DatabaseCallback {
  void handleEvent(in Database database);
};

매개 변수 설명: DOMString name 데이터베이스 이름, DOMString version 데이터베이스 버전, DOMString displayName 디스플레이 이름 (이 매개 변수의 뜻, 예를 들어 브라우저를 통해 웹 데이터베이스의 상태를 보면 이 매개 변수는 더욱 우호적인 문자 설명을 제공할 것), estimated Size 용량 크기 (단위bytes),creationCallback 리셋 함수
1), 브라우저가 웹 데이터베이스를 비활성화하면 이상이 발생합니다.
2), openDatabase는 윈도우 객체에 속합니다.
3), 데이터베이스 버전이 제공되고 데이터베이스 이름이 이미 존재하지만 데이터베이스 버전이 방법 매개 변수의 버전 정보와 일치하지 않으면 이상이 발생합니다. 이때 후속 절차의 처리를 중단합니다.
4), 제공된 데이터베이스 이름이 만들어지지 않으면 어떻게 데이터베이스를 새로 만드는지 성공한 후callback 리셋 함수를 호출합니다. 이때 우리는 데이터의 버전이 비어 있고 아니오자 횟수의 데이터베이스 버전 번호를 설정할 수 있습니다. 방법 파라미터가 제공한 것과 같이 데이터베이스가 존재하면 생성에 실패합니다.
5), openDatabase () 방법에 대한 데이터베이스 대상은 최근에 구축된 대상이며 데이터베이스 이름은 매개 변수 이름입니다.(openDatabaseSync와 동일)
6), openDatabse 또는 openDatabseSync 생성이 실패하면 callback을 제공하더라도 callback은 실행되지 않습니다.
openDatabse 방식에 대해datbase 결과를 callback 함수로 전달하고 호출합니다
openDatabseSync 방식의 경우 callback 방법에 이상이 발생하면 중단됩니다
7), 데이터베이스 결과 반환
3. opendatabase 방법에서 알 수 있듯이 우리는 버전 번호를 지정하여 우리가 원하는 버전의 데이터베이스 대상을 만들 수 있습니다. 버전 번호 파라미터가 비어 있으면 (즉 빈 문자열) 임의의 버전을 만들 수 있습니다.
 
4. sql방면
1), sql 매개 변수도 지원합니까?매개변수 자리 표시자로 사용
2), 만약에 우리가 만든 데이터베이스 대상 버전이 존재하지 않는다면 모든 SQL 동작이 무효가 되고 이상이 발생합니다. 예를 들어 이 버전 번호가callback이면
3), sql 문법이 틀렸고, sql에 지원되지 않는 특성 함수, sql 매개 변수와?자리 표시자가 일치하지 않으면 sqlstatement가 무효입니다
4), 만약 sqltrasaction 사무 모드가read-only라면, 수정 작업을 실행하면 sqlstatement가 무효입니다
비동기식 데이터베이스 API
interface Database {
  void transaction(in SQLTransactionCallback callback, in optional SQLTransactionErrorCallback errorCallback, in optional SQLVoidCallback successCallback);
  void readTransaction(in SQLTransactionCallback callback, in optional SQLTransactionErrorCallback errorCallback, in optional SQLVoidCallback successCallback);

  readonly attribute DOMString version;
  void changeVersion(in DOMString oldVersion, in DOMString newVersion, in optional SQLTransactionCallback callback, in optional SQLTransactionErrorCallback errorCallback, in optional SQLVoidCallback successCallback);
};

[Callback=FunctionOnly, NoInterfaceObject]
interface SQLVoidCallback {
  void handleEvent();
};

[Callback=FunctionOnly, NoInterfaceObject]
interface SQLTransactionCallback {
  void handleEvent(in SQLTransaction transaction);
};

[Callback=FunctionOnly, NoInterfaceObject]
interface SQLTransactionErrorCallback {
  void handleEvent(in SQLError error);
};

1. 위의 방법에서 알 수 있듯이transaction () andreadTransaction () 은 모두 세 개의 매개 변수가 있는데 이 세 가지 매개 변수는 모두Funtion이다. 첫 번째 매개 변수인 Fun은 업무를 처리하는 것이다. 만약에 이 방법이 틀리면 두 번째 errorCallback을 실행할 것이다. 만약에 성공하면 세 번째successCallback을 어떻게 실행할 것인가.
2. 이름에서 알 수 있듯이 readTransaction은 읽기만 하고 transaction은read or write
3. 알이 아프면 현재 데이터베이스 버전을 매개 변수로 지정한 버전으로 전환할 수 있습니다. 전환 과정은 원자적입니다. ok, 그 후의 처리는transaction () 또는readTransaction () 일치할 수 있습니다. (지정한 버전이 존재하지 않으면 전환에 실패할 것입니다. 아마도 현재 버전은 다른 단계로 후속 처리를 수행할 것입니다.)
전환 과정은 주로 두 가지 일을 했다.
         1、Change the database's actual version to the value of the second argument to the changeVersion() method.
         2、Change the Database object's expected version to the value of the second argument to the changeVersion() method.
SQL 문장 실행
typedef sequence<any> ObjectArray;

interface SQLTransaction {
  void executeSql(in DOMString sqlStatement, in optional ObjectArray arguments, in optional SQLStatementCallback callback, in optional SQLStatementErrorCallback errorCallback);
};

[Callback=FunctionOnly, NoInterfaceObject]
interface SQLStatementCallback {
  void handleEvent(in SQLTransaction transaction, in SQLResultSet resultSet);
};

[Callback=FunctionOnly, NoInterfaceObject]
interface SQLStatementErrorCallback {
  boolean handleEvent(in SQLTransaction transaction, in SQLError error);
}
  

executeSql 방법의 절차는 다음과 같다.
1), 새로운 qltransaction을 엽니다. 만약에 업무가read/write라면 현재 업무는 전체 데이터베이스의 독점 자물쇠를 가져와야 합니다. 읽기만 하면 전체 데이터베이스 범위의 공유 자물쇠를 가져와야 합니다. 따라서 모든 요청은 사용할 수 있을 때까지 적당한 자물쇠를 기다려야 합니다.
2), 업무를 시작하는 과정에서 오류가 발생하면errorCallback을 실행하고 rollback 업무를 수행하여 업무 대상을 삭제합니다
3), changeVersion () 방식을 통해 대상 버전을 전환하는 데 오류가 발생하면 끝과 (2)
4), 콜백에 이상이 발생하면 (2)
5), 모든 ql문장이 업무에 배열되면 다음과 같은 일이 발생한다. 우선 ql문장이 정확한지 검사한다(
실패할 수 있음), 올바른 경우 트랜잭션 컨텍스트에서 이 문구를 실행합니다(
실패할 수 있음), 실행에 성공하면 sqlResultSet 대상을 만들어서 sql의 반환 결과를 포장합니다. 다음에callback 리셋 함수 (
실패할 수 있음), 그리고 SqlResultSet 대상을 callback 함수에 전달하고, 다음 Sql 문장을 다시 실행합니다. 상기 단계에서 오류가 발생하면 (실패할 수 있음) 표시는 다음과 같은 상황이 발생합니다. errorCallback을 실행하고, errorCallback return false를 실행하면 다음 sql 문장을 계속 정상적으로 실행합니다. 그렇지 않으면 모든 업무 수행을 종료합니다.
interface SQLResultSet {
  readonly attribute long insertId;
  readonly attribute long rowsAffected;
  readonly attribute SQLResultSetRowList rows;
};
interface SQLResultSetRowList {
  readonly attribute unsigned long length;
  getter any item(in unsigned long index);
};

레코드:
1. insertId sql 삽입을 실행할 때 insertId는 현재 삽입 기록의 ID를 기록하고 여러 개를 삽입하면 마지막 ID를 기록합니다.
2. rowsAffected, 업데이트 작업에 이 속성은 영향을 받는 줄 수를 기록합니다
3. rows가 select 작업에 대해 이 기록은 응답 결과를 저장하는 것이다
4. length는 기록된 개수를 대표한다
5, item 대표 응답 데이터
W3c 설명
   Note:  For the asynchronous API, implementors are encouraged to prefetch all the data for SQLResultSetRowList objects when the object is constructed (before the result set callback is invoked), rather than on-demand, for better responsiveness. For the synchronous API, an on-demand lazy evaluation implementation strategy is encouraged instead, for better performance.Fetching the length might be expensive, and authors are thus encouraged to avoid using it (or enumerating over the object, which implicitly uses it) where possible
 

좋은 웹페이지 즐겨찾기