当前位置: 首页 > 知识库问答 >
问题:

关于Spring Framework应用程序中JDBC逻辑的一些信息

柴衡
2023-03-14

我正在学习如何在Spring应用程序中使用JDBC,但我对此有些怀疑。

因此,让我解释一下我对一个实际例子的怀疑:

如果我有一个实现我的DAO接口的类,并且这个类包含以下方法,在我的数据库的学生表中插入一个新行:

public void create(String name, Integer age) {
    String SQL = "insert into Student (name, age) values (?, ?)";

    jdbcTemplateObject.update(SQL, name, age);
    System.out.println("Created Record Name = " + name + " Age = " + age);
    return;
}

好的...我认为SQL字符串Rapper呈现了我的SQL查询,必须执行这些查询才能在我的表中插入新行

我不明白这段代码到底是什么意思:值(?,?)

我认为,当我在JdbcTemplate对象上调用update()方法时,向它传递SQL查询、名称和*AGE值这些?占位符被替换为这些值。

对吗?

替换这些占位符的是update()方法吗?

我也读到过使用这些占位符是为了让我不必担心转义我的值...转义值到底是什么意思?

最后一个问题是关于PreparedStatment的使用...阅读我读过的Spring文档,我也可以将PreparedStatment传递给update()方法...有什么区别?在这种情况下,是Spring使用SQL字符串和2输入参数创建了一个新的PreparedStatment,还是我使用了一些不同的东西?

共有1个答案

甘骞尧
2023-03-14

主要是为了避免SQL注入。

如果你只是这么做:

"insert into Student (name, age) values ('"+name+"', "+age+")"

考虑一下如果name“Mary',3),('john',13)--”会发生什么

insert into Student (name, age) values ('mary', 3), ('john', 13)--', 24)
insert into Student (name, age) values ('mary', 3), ('john', 13)

将插入2个记录。

当然,您可以转义或过滤名称字符串,但这很容易出错,而且很容易忘记并使某些查询易受攻击,不妨使用准备好的语句来实现这一点。

转义意味着在任何SQL元字符之前预置一个转义字符,以使其含义发生变化。

insert into Student (name, age) values ('\', 3), (\'john\', 13)--', 24)
 类似资料:
  • 我正在研究如何在Spring框架中使用JDBC在数据库上执行查询。 我遵循这个教程:http://www.tutorialspoint.com/spring/spring_jdbc_example.htm 在本教程中,我定义了一个StudentDAO接口,它只定义我想要的CRUD方法。 然后定义了Student类,它是我希望在Student数据库表中持久化的实体。 然后,定义了作为RowMappe

  • Adding application logic (添加应用程序逻辑) 构建一个应用时,通常需要实现自定义逻辑来处理数据,并响应客户端请求之前执行其他操作. 在 Loopback 中,可以通过以下三种方法实现. 添加 model 逻辑 - 使用 remote methods,remote hooks 和 operation hooks. 启动脚本 - 目录 /server/boot 中的文件,在应

  • 此外,在微服务之间具有HTTP依赖关系,例如当使用HTTP请求链创建长请求/响应周期时,如图4-15的第一部分所示,不仅使微服务不自治,而且一旦链中的一个服务表现不佳,它们的性能就会受到影响。 来源:https://docs.microsoft.com/en-us/dotnet/standard/microservices-architecture/architect-microservice-c

  • 几天前,我发布了这个问题,来自Azure IOT中心的短信 我曾尝试实现建议的logic app,我的问题是logic app没有通过服务总线接收任何消息,事实上没有消息到达服务总线。当我尝试在logic应用程序中运行触发器时,它会弹出一个对话框,告诉我“When_a_message_is_received_in_a_queue”。当我运行logic应用程序时,它说工作流程在几分钟后超时。 我复制

  • 问题内容: 我是一个长期的python开发人员,最近被介绍给Prolog。我喜欢在某些任务中使用关系规则的概念,并希望将其添加到我的曲目中。 是否有用于Python逻辑编程的良好库?我已经在Google上进行了一些搜索,但发现以下内容: jtauber关于relational_python的博客系列 很想与其他人比较…谢谢! -aj 问题答案: 也许您应该使用Google“ Python逻辑编程”

  • 我有一个逻辑应用程序,它由EventGrid主题触发,但使用事件中传递的SessionId从服务总线队列读取消息。 服务总线peek读取在一个直到循环中完成,该循环在服务总线peek读取超时时退出。(我已在操作设置中将超时设置为30秒)。 我遇到的问题是,尽管队列已满,但在循环退出之前只读取了大约20条消息。为什么会这样?