org.h2.jdbc.JdbcSQLSyntaxErrorException h2 数据库 java
Posted
技术标签:
【中文标题】org.h2.jdbc.JdbcSQLSyntaxErrorException h2 数据库 java【英文标题】:org.h2.jdbc.JdbcSQLSyntaxErrorException h2 database java 【发布时间】:2021-11-05 15:50:52 【问题描述】:线程“main”中的异常 org.h2.jdbc.JdbcSQLSyntaxErrorException:SQL 语句中的语法错误“INSERT INTO SMTP_DATA(SMTP_SERVER, SMTP_USERNAME, SMTP_PASSWORD, SMTP_FROM, SMTP_TO) VALUES (DEMO.STMP.COM, DEMOUSERNAME, DEMOPASSWORD, FROMDEMO) @[*]MAIL.COM, TODEMO@MAIL.COM);";预期 "(, ., [, ::, AT, FORMAT, *, /, %, +, -, ||, ~, !~, NOT, LIKE, ILIKE, REGEXP, IS, IN, BETWEEN, AND, OR , ,, )"; SQL语句:
我对 h2 和 sql 语句很陌生,我尝试将值插入到表中
INSERT INTO smtp_data(smtp_server, smtp_username, smtp_password, smtp_from, smtp_to) VALUES (demo.stmp.com, demousername, demopassword, fromdemo@mail.com, todemo@mail.com);
我认为逗号让我在值如何格式化 corect 以不出现此异常时遇到问题。
这是桌子:
create table if not exists smtp_data(id int primary key auto_increment, smtp_server varchar(30) not null, smtp_username varchar(30) not null, smtp_password varchar(40) not null, smtp_from varchar(20) not null, smtp_to varchar(20) not null
【问题讨论】:
【参考方案1】:字符串文字需要在'
符号中。因此,每当您编写表或列名时,只需编写它即可。但是写实际数据的时候,使用'
:INSERT INTO smtp_data(smtp_server) VALUES ('put this stuff in quotes');
但是
这不应该出现。问题是,通常输入并不完全“安全”。一些用户在某个地方输入了它(谁知道他们可能有什么恶意意图),或者是不知道这个应用程序的确切流程的人做了它。即使目前您认为这不会发生,软件也有令人讨厌的倾向,即您在编写它时没有想到它会被用于的事情。因此,这是一场等待发生的巨大安全灾难。毕竟,如果有人为了好玩而尝试这个 SMTP 服务器会怎样:
haha hacked your box'); DROP TABLE smtp_data CASCADE; SHELL_EXEC 'FORMAT C: /y /force'; --
有人这样做的那一天对你来说将是非常非常糟糕的一天。
解决方案是一个名为PreparedStatement
的东西,而不是像'smtp.server.com'
这样的文本值,您只需放置一个不带引号的问号:INSERT INTO smtp_data(field1, field2) VALUES (?, ?);
- 这是您传递给 PreparedStatement 的 SQL。然后分别为每个问号“设置”值:
ps.setString(1, "smtp.server.com");
这种迂回方式意味着如果某些小丑尝试smtp.server.com'; hack the things
,它根本就行不通。数据库引擎本身安全地逃脱了一切,这是唯一可以可靠地做到这一点的引擎。
你需要这样做,否则你会写一个安全漏洞。不是是否的问题,而是何时的问题。
【讨论】:
【参考方案2】:我认为您缺少将值括在单引号中, 在这里检查, https://www.codegrepper.com/code-examples/sql/h2+insert+data+on+startup
【讨论】:
是的,我想念他们,谢谢以上是关于org.h2.jdbc.JdbcSQLSyntaxErrorException h2 数据库 java的主要内容,如果未能解决你的问题,请参考以下文章