在SBT项目中运行SQLite脚本遇SCHEMA语法错误,求解决方法
搞定你的SQLite语法错误问题
嘿,我来帮你解决SBT项目里运行SQL脚本时遇到的SQLite语法错误。你看到的[SQLITE_ERROR] near "SCHEMA": syntax error主要是两个原因导致的:SQLite不识别你的注释格式,还有你用了PostgreSQL专属的SQL语法,SQLite根本不认。下面一步步给你修复:
1. 先把注释改对
SQLite不支持用#当单行注释(这是MySQL的玩法),你脚本开头的# Air SCHEMA #会被SQLite当成无效代码。换成SQLite支持的注释方式就行:
-- Air SCHEMA
2. 替换PostgreSQL专属的数据类型
你的脚本里用了BIGSERIAL和BIGINT(2500),这俩都是PostgreSQL的专属语法,SQLite不买账:
BIGSERIAL:SQLite没有自增序列类型,用INTEGER PRIMARY KEY AUTOINCREMENT代替,这是SQLite实现自增主键的标准写法BIGINT(2500):SQLite的BIGINT不需要指定长度参数,直接写BIGINT就好
3. 删掉多余的索引(可选但推荐)
你给id字段创建了products._idx索引,但id已经是主键了,SQLite会自动为主键创建唯一索引,手动加这个索引完全没必要,删掉就行。
修复后的完整脚本
-- Air SCHEMA --- !Ups CREATE TABLE products ( id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, title VARCHAR(254) NOT NULL, description VARCHAR(254) NOT NULL, price BIGINT NOT NULL ); --- !Downs DROP TABLE products;
额外小提醒
如果你是用Play Framework的演化插件(SBT里的play-evolutions),要确认数据库配置确实指向SQLite,别不小心混了PostgreSQL的配置;另外SQLite会自动把VARCHAR(254)转成TEXT类型,这是正常现象,不影响使用。
内容的提问来源于stack exchange,提问作者pik4
相关产品推荐
相关产品推荐

