habe mir mal die Datenbank-Funktionen in HTML5 angeschaut - Es geht!
Es gibt eigentlich "nur" eine Einschränkung: Im HTML5-Standard muss man die maximale Datenbankgröße angeben. Das geschieht hier über die Konstante dbSize;
Edit: Diese Frage zu Arrays ist gelöst!!
Ich hänge gerade an der Funktion loaddbitems, die alle (Select abgefragten) Daten in ein Array laden soll, da ich mit JavaScript noch nicht viel gemacht habe... Frage: Wie bekomme ich Daten in ein 2-dimensionales Array. Wenn das jemand lösen könnte/würde, käme die SQLite-Sache einen großen Schritt voran!
Grüße,
J.
Code: Alles auswählen
Achtung: Der Datenbank-Zugriff in HTML5 ist asynchron. Wird CloseDatabase(); zu früh aufgerufen, wird das Datenbank-Objekt vor der Abfrage entfernt. Oder das Ergebnis liegt noch nicht vor.
To-Do:
DatabaseID
GetDatabaseBlob
CheckDatabaseNull
DatabaseColumnSize
DatabaseColumnType
IsDatabase
SetDatabaseBlob
- Datenbank-ID zurückgeben, auch mit #PB_Any (für mehrere Datenbank-Objekte)
- testen
- Rückgabe von Status und Ergebnis der einzelnen Funktionen
- testen
- eventuelle Speicherlecks finden und ausmerzen
- testen
Nicht möglich/nötig
- OpenDatabaseRequester
Bisher eingebaut
+ AffectedDatabaseRows
+ CloseDatabase
+ DatabaseColumnIndex
+ DatabaseColumnName
+ DatabaseColumns
+ DatabaseDriverDescription
+ DatabaseDriverName
+ DatabaseError
+ DatabaseQuery
+ DatabaseUpdate
+ ExamineDatabaseDrivers
+ FinishDatabaseQuery
+ FirstDatabaseRow
+ GetDatabaseDouble
+ GetDatabaseFloat
+ GetDatabaseLong
+ GetDatabaseQuad
+ GetDatabaseString
+ NextDatabaseDriver
+ NextDatabaseRow
+ OpenDatabase
+ PreviousDatabaseRow
+ UseSQLiteDatabase
Code: Alles auswählen
// UseSQLiteDatabase()
const dbSize = 5 * 1024 * 1024; // 5MB
function UseSQLiteDataBase() {
SQLiteDataBase = {};
SQLiteDataBase.webdb = {};
SQLiteDataBase.webdb.db = null;
SQLiteDataBase.lastError = "";
SQLiteDataBase.currentRow = 0;
}
// Result = OpenDatabase(#Database, DatabaseName$, User$, Password$ [, Plugin])
function OpenDatabase(Database,DatabaseName,user,Password) {
SQLiteDataBase.webdb.db = openDatabase(DatabaseName, "1.0", DatabaseName, dbSize);
db = SQLiteDataBase.webdb.db;
// this one is needed, to initialize the onSucces, onError-functions
db.transaction(function(tx) { tx.executeSql("SELECT 1", [], SQLiteDataBase.webdb.onSuccess, SQLiteDataBase.webdb.onError); });
}
// Result = DatabaseUpdate(#Database, Request$)
function DatabaseUpdate(Database, Request) {
db.transaction(function(tx) { tx.executeSql(Request, [], SQLiteDataBase.webdb.onSuccess, SQLiteDataBase.webdb.onError); });
}
// CloseDatabase(#Database)
function CloseDatabase(Database) {
SQLiteDataBase.webdb.db = null;
SQLiteDataBase.webdb = null;
SQLiteDataBase.result = null;
SQLiteDataBase.lastError = null;
SQLiteDataBase = null;
db = null;
}
// Result = DatabaseQuery(#Database, Request$)
function DatabaseQuery(Database, Request) {
SQLiteDataBase.webdb.getItems = function(renderFunc) {
db.transaction(function(tx) { tx.executeSql(Request, [], renderFunc, SQLiteDataBase.webdb.onError); });
}
}
// Text$ = DatabaseColumnName(#Database, Column)
function DatabaseColumnName(Database, Column) {
var keys = Object.keys(SQLiteDataBase.result[0]);
return keys[Column];
}
// Result = DatabaseColumnIndex(#Database, ColumnName$)
function DatabaseColumnIndex(Database, ColumnName) {
var keys = Object.keys(SQLiteDataBase.result[0]);
keys = keys.toString();
keys = keys.split(",");
for (var i=0; i < keys.length; i++) {
if (ColumnName == keys[i]) { return i; }
}
}
// Result = ExamineDatabaseDrivers()
function ExamineDatabaseDrivers() {
return 1;
}
// Result = NextDatabaseDriver()
function NextDatabaseDriver() {
return 0;
}
// Text$ = DatabaseDriverName()
function DatabaseDriverName() {
return "Web-SQLite.";
}
// Text$ = DatabaseDriverDescription()
function DatabaseDriverDescription() {
return "HTML5-Database, SQLite-based.";
}
// Error$ = DatabaseError()
function DatabaseError() {
return SQLiteDataBase.lastError;
}
// Text$ = GetDatabaseString(#Database, Column)
function GetDatabaseString(Database, Column) {
var values = Object.keys(SQLiteDataBase.result[SQLiteDataBase.currentRow]).map(function (key) { return SQLiteDataBase.result[SQLiteDataBase.currentRow][key]; });
return values[Column];
}
// Result.d = GetDatabaseDouble(#Database, Column)
function GetDatabaseDouble(Database, Column) {
return parseFloat(GetDatabaseString(Database,Column));
}
// Result.f = GetDatabaseFloat(#Database, Column)
function GetDatabaseFloat(Database, Column) {
return parseFloat(GetDatabaseString(Database,Column));
}
// Result = GetDatabaseLong(#Database, Column)
function GetDatabaseLong(Database, Column) {
return parseInt(GetDatabaseString(Database,Column));
}
// Result = GetDatabaseQuad(#Database, Column)
function GetDatabaseQuad(Database, Column) {
return parseInt(GetDatabaseString(Database,Column));
}
// Result = FirstDatabaseRow(#Database)
function FirstDatabaseRow(Database) {
var count = DatabaseColumns(Database);
if (count != 0) { SQLiteDataBase.currentRow = 0; }
return count;
}
// Text$ = CheckDatabaseNull(#Database, Column) !!!
function CheckDatabaseNull(Database, Column) {
}
// Result = AffectedDatabaseRows(#Database)
function AffectedDatabaseRows(Database) {
return SQLiteDataBase.result.length;
}
// Result = NextDatabaseRow(#Database)
function NextDatabaseRow(Database) {
if (SQLiteDataBase.result.length == SQLiteDataBase.currentRow ) { return 0; }
SQLiteDataBase.currentRow++;
}
// Result = PreviousDatabaseRow(#Database)
function PreviousDatabaseRow(Database) {
if (SQLiteDataBase.currentRow < 1 ) { return 0; }
SQLiteDataBase.currentRow--;
}
// FinishDatabaseQuery(#Database)
function FinishDatabaseQuery(Database) {
SQLiteDataBase.result = null;
SQLiteDataBase.lastError = null;
SQLiteDataBase.currentRow = null;
}
// Result = DatabaseColumns(#Database)
function DatabaseColumns(Database) {
var keys = Object.keys(SQLiteDataBase.result[0]);
return keys.length;
}
// hier alle Einträge pushen
function loaddbitems(tx, rs) {
SQLiteDataBase.result = null;
SQLiteDataBase.result = new Array();
for (var i=0; i < rs.rows.length; i++) { SQLiteDataBase.result.push(rs.rows.item(i)); }
}
UseSQLiteDataBase();
OpenDatabase(null,"test");
//DatabaseUpdate(null,"CREATE TABLE IF NOT EXISTS todo (ID INTEGER PRIMARY KEY ASC, todo TEXT, added_on DATETIME)");
//DatabaseUpdate(null,"INSERT INTO todo (todo, added_on) VALUES ('Hallo',1234567)");
DatabaseQuery(null,"SELECT * FROM todo");
//CloseDatabase();
setTimeout(function() {alert(typeof(GetDatabaseString(null,1)));},1000);
SQLiteDataBase.webdb.onError = function(tx, e) {
SQLiteDataBase.lastError = e.message;
}
SQLiteDataBase.webdb.onSuccess = function(tx, r) {
SQLiteDataBase.webdb.getItems(loaddbitems);
}