【问题标题】:org.h2.jdbc.JdbcSQLSyntaxErrorException h2 database javaorg.h2.jdbc.JdbcSQLSyntaxErrorException h2 数据库 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
  

【问题讨论】:

    标签: java mysql h2


    【解决方案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

      【讨论】:

      • 是的,我想念他们,谢谢
      猜你喜欢
      • 1970-01-01
      • 2019-12-17
      • 2021-12-01
      • 1970-01-01
      • 2021-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-23
      相关资源
      最近更新 更多