The source code

    Ext.sql.Table = function(conn, name, keyName){
    	this.conn = conn;
    	this.name = name;
    	this.keyName = keyName;
    };

    Ext.sql.Table.prototype = {
    	update : function(o){
    		var clause = this.keyName + " = ?";
    		return this.updateBy(o, clause, [o[this.keyName]]);
    	},

    	updateBy : function(o, clause, args){
    		var sql = "UPDATE " + this.name + " set ";
    		var fs = [], a = [];
    		for(var key in o){
    			if(o.hasOwnProperty(key)){
    				fs[fs.length] = key + ' = ?';
    				a[a.length] = o[key];
    			}
    		}
    		for(var key in args){
    			if(args.hasOwnProperty(key)){
    				a[a.length] = args[key];
    			}
    		}
    		sql = [sql, fs.join(','), ' WHERE ', clause].join('');
    		return this.conn.execBy(sql, a);
    	},

    	insert : function(o){
    		var sql = "INSERT into " + this.name + " ";
    		var fs = [], vs = [], a = [];
    		for(var key in o){
    			if(o.hasOwnProperty(key)){
    				fs[fs.length] = key;
    				vs[vs.length] = '?';
    				a[a.length] = o[key];
    			}
    		}
    		sql = [sql, '(', fs.join(','), ') VALUES (', vs.join(','), ')'].join('');
            return this.conn.execBy(sql, a);
        },

    	lookup : function(id){
    		return this.selectBy('where ' + this.keyName + " = ?", [id])[0] || null;
    	},

    	exists : function(id){
    		return !!this.lookup(id);
    	},

    	save : function(o){
    		if(this.exists(o[this.keyName])){
                this.update(o);
            }else{
                this.insert(o);
            }
    	},

    	select : function(clause){
    		return this.selectBy(clause, null);
    	},

    	selectBy : function(clause, args){
    		var sql = "select * from " + this.name;
    		if(clause){
    			sql += ' ' + clause;
    		}
    		args = args || {};
    		return this.conn.queryBy(sql, args);
    	},

    	remove : function(clause){
    		this.deleteBy(clause, null);
    	},

    	removeBy : function(clause, args){
    		var sql = "delete from " + this.name;
    		if(clause){
    			sql += ' where ' + clause;
    		}
    		args = args || {};
    		this.conn.execBy(sql, args);
    	}
    };