The source code

     Ext.data.AirDB = Ext.extend(Ext.data.SqlDB, {
    	open : function(db, cb, scope){
    		this.conn = new air.SQLConnection();

    		var file = air.File.applicationResourceDirectory.resolve(db);

    		this.conn.addEventListener(air.SQLEvent.OPEN, this.onOpen.createDelegate(this, [cb, scope]));
    		this.conn.addEventListener(air.SQLEvent.CLOSE, this.onClose.createDelegate(this));
    		this.conn.open(file, true);
    	},

    	close : function(){
    		this.conn.close();
    	},

    	onOpen : function(cb, scope){
    		this.openState = true;
    		Ext.callback(cb, scope, [this]);
    		this.fireEvent('open', this);
    	},

    	onClose : function(){
    		this.fireEvent('close', this);
    	},

    	onError : function(e, stmt, type, cb, scope){
    		Ext.callback(cb, scope, [false, e, stmt]);
    	},

    	onResult : function(e, stmt, type, cb, scope){
    		if(type == 'exec'){
    			Ext.callback(cb, scope, [true, e, stmt]);
    		}else{
    			var r = [];
    			var result = stmt.getResult();
    			if(result && result.data){
    		        var len = result.data.length;
    		        for(var i = 0; i < len; i++) {
    		            r[r.length] = result.data[i];
    		        }
    		    }
    			Ext.callback(cb, scope, [r, e, stmt]);
    		}
    	},

    	createStatement : function(type, cb, scope){

    		var stmt = new air.SQLStatement();

    		stmt.addEventListener(air.SQLErrorEvent.ERROR, this.onError.createDelegate(this, [stmt, type, cb, scope], true));
    		stmt.addEventListener(air.SQLEvent.RESULT, this.onResult.createDelegate(this, [stmt, type, cb, scope], true));

    		stmt.sqlConnection = this.conn;

    		return stmt;
    	},

    	exec : function(sql, cb, scope){
    		var stmt = this.createStatement('exec', cb, scope);
    		stmt.text = sql;
    		stmt.execute();
    	},

    	execBy : function(sql, args, cb, scope){
    		var stmt = this.createStatement('exec', cb, scope);
    		stmt.text = sql;
    		this.addParams(stmt, args);
    		stmt.execute();
    	},

    	query : function(sql, cb, scope){
    		var stmt = this.createStatement('query', cb, scope);
    		stmt.text = sql;
    		stmt.execute(this.maxResults);
    	},

    	queryBy : function(sql, args, cb, scope){
    		var stmt = this.createStatement('query', cb, scope);
    		stmt.text = sql;
    		this.addParams(stmt, args);
    		stmt.execute(this.maxResults);
    	},

        addParams : function(stmt, args){
    		if(!args){ return; }
    		for(var key in args){
    			if(args.hasOwnProperty(key)){
    				if(!isNaN(key)){
    					stmt.parameters[parseInt(key)+1] = args[key];
    				}else{
    					stmt.parameters[':' + key] = args[key];
    				}
    			}
    		}
    		return stmt;
    	}
    });