Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

msg = near "from": syntax error #1

Closed
roytan883 opened this issue Dec 23, 2014 · 26 comments
Closed

msg = near "from": syntax error #1

roytan883 opened this issue Dec 23, 2014 · 26 comments

Comments

@roytan883
Copy link

如果我的对象中一个字段名叫from,liteorm直接就报错了。log显示create table就失败了。 msg = near "from": syntax error 这样的字段话取名还要想想想是不是和sql命令冲突?
我测试加这句就好了@column("ffrom"),但这样好难用。。。

@PrimaryKey(PrimaryKey.AssignType.BY_MYSELF)
@column("id")
private String id;
private String textContent;
private String from;
private String to;

@zouzhenglu
Copy link

from 是数据库的关键词好吧

@roytan883
Copy link
Author

。。。你的意思是所有数据库关键字都不能成为普通对象的属性名字?什么奇葩的逻辑。。。

@zouzhenglu
Copy link

你的意思是数据库的关键字能成为表名列名??什么奇葩的逻辑。。。

@roytan883
Copy link
Author

我定义的是对象的属性名,又不是列名。代码都贴了,看不懂?
private String id;
private String textContent;
private String from;
private String to;

@roytan883
Copy link
Author

是这个库自动用属性名当作列名的,然后库自己报错。
话说用这个库的时候,自己定义对象属性名的时候,还得把数据库所有关键字背一遍???什么奇葩逻辑?

@zouzhenglu
Copy link

不进数据库你用什么orm??你的神逻辑我就不懂了

@zouzhenglu
Copy link

数据库是所有程序员最基本的,,这都不懂,,别做码农了

@roytan883
Copy link
Author

好吧,这奇葩的orm库也是醉了。要用这库还得先把所有关键字背一遍。

@roytan883
Copy link
Author

orm的本意是屏蔽sql,用面向对象的方式使用,但是你又要求使用者先把数据库sql关键字全部先背一遍避免冲突,真实奇葩。

@zouzhenglu
Copy link

好吧,,用这奇葩orm还要学英语,还要学java,还要用ide,,我也是醉了。。

@roytan883
Copy link
Author

我先用其他orm来测试一下,看是不是都像这库一样奇葩。第一次听说用orm库还需要背数据库关键字的。

@roytan883
Copy link
Author

为什么同样的数据定义我用其他orm库就没有问题?对比了一下双方生成的sql语句,就是在sql中字段名简单加一个单引号'就搞定的问题。明显这个问题就是这库生成基本的sql语句就有问题,还要在这里非要说需要背数据库关键字。。。。什么这是所有程序员最基本的。。。
zouzhenglu ? 你是猴子派来的d b 么? 程序员要都像你这样当演员了,也是醉了

@ghost
Copy link

ghost commented Mar 27, 2015

笑死我了,支持@roytan883,哈哈哈。醉了。

@ghost
Copy link

ghost commented Mar 27, 2015

话说,作者也不赖维护。。。

@litesuits
Copy link
Owner

注意:

  1. SQL语句里绝对不能有关键词from select where等等,就像java中不能有命名变量为int,byte一样。这无需多言。(这个地方有误,添加中括号或引号来规避SQL关键字问题)
  2. 建议通过注解@column("_from")规避关键字,默认反射用变量名字做数据表列名。
  3. 框架针对SQL语句中关键字没有做处理,执行时会报异常,目前需要开发者自己避免,注意有没有异常日志

@roytan883
Copy link
Author

  1. SQL语句里绝对不能有关键词from select where等等,就像java中不能有命名变量为int,byte一样。这无需多言。????????????????? 你确信。?????????????????

SQL中用单引号转义都不懂?需要给你贴个教程不?这作者也是奇葩!!!

@roytan883
Copy link
Author

3,需要我贴段代码SQL定义列名为关键字的不?

@litesuits
Copy link
Owner

我也是醉了

@litesuits
Copy link
Owner

SQL语法的建议是尽量不要使用关键字。建议开发者自己在关键字列名前加个下划线,不干扰可读性,也避免潜在问题,框架给加括号或引号要穷举关键字也降低效率

@roytan883
Copy link
Author

1,'SQL语句里绝对不能有关键词', 不知道是我理解错了,还是我没看懂,但最后结果是SQL里面可以有关键字是吧?是不是打你脸了?
2,好你现在说要尽量避免,那我是不是这样理解:简单的说,就是别人家的SQL orm可以定义任意字段名,你家的强行背单词是吧?from to 这些超常用的通信系统结构字段名到你家就玩不转了是吧?
3,这话题没意义了,一个连正视自己技术上错误的勇气都没有repo作者,没有必要再讨论了。

@litesuits
Copy link
Owner

难道SQL语句中可以有关键词?当然要处理!你牛逼你写个好了,你技术屌你来写个更牛逼的不就解决了,别在这叨叨了

@litesuits
Copy link
Owner

或者为开源项目推送修复、完善功能不也挺好吗。好好说话不行?非得语言攻击,撕逼啊,很爽是吧

@litesuits
Copy link
Owner

之前的说法确实有问题,现在情况就是框架针对SQL语句中关键字确实没有做处理,所以不能有,只能开发者自己避免。后边想好了,再完善一下

@roytan883
Copy link
Author

我能这么有底气的撕逼,是因为我在很早前和那人喷之前都敲了代码改库测试通过了,证明是可以处理字段名为SQL关键字的情况下才发的。
本以为我都已经写得很明白了,包括怎么用单引号转义都说了,但是没有想到你作为作者来居然都不先好好看问题,都还没有实际测试,上来就信口开河和那人一样号称什么绝对不能有关键字同名字段。
其实处理起来很简单,就是生成SQL语句的时候,在字段名那个地方用单引号包一下,修改几行代码而已的事情。我反感的是都不先技术验证就来撕逼,很无聊。

@litesuits
Copy link
Owner

是的,是需要加中括号或者引号来‘转义’。
如果每个字段都加引号也不妥,所以最好是判断列名是不是关键字,穷举关键字后需要对关键字字段做‘转义’,也似乎影响性能。
我再想想,后边抽空给解决一下

@zouzhenglu
Copy link

全部都加上为什么不行,那你让人故意在名字上加上那个引号的咋办

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants