我正在编写一个函数,该函数将位于一个在Web DB中创建表的外部文件中。这一切都是使用Javascript和HTML 5本地数据库完成的。我想传入一个变量来生成表名,如:
mydb.transaction(function(tx) {
tx.executeSql('CREATE TABLE IF NOT EXISTS **?** (id INTEGER PRIMARY KEY, name TEXT)', [**DB_Table**]);
});
但要明白问号只能代替literals来解决这个问题吗?
答案 0 :(得分:0)
不,没有办法参数化模式名称。如果您确实需要允许动态名称,则必须手动将它们编码为模式名称文字。
模式名称文字的ANSI SQL格式是用双引号括起来,并用双引号替换字符串中的任何双引号字符。
var txlit= '"'+tc.replace(/"/g, '""')+'"';
query= 'CREATE TABLE IF NOT EXISTS '+txlit+' (id INTEGER ...)';
答案 1 :(得分:0)
嗯,sql参数限制有一些原因。
但我认为您正面临元编程问题,因此请查看StringTemplate。
使用StringTemplate,它不会强迫您专门使用它。它只是一种用于任何目的的String模板语言。
不幸的是,StringTemplate不支持JavaScript,但我认为它的设计理念仍值得知道。