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

为什么db中没有插入数据代码中有什么错误

东门令
2023-03-14
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/autosave", "root", "");

PreparedStatement pstmt;
pstmt = con.prepareStatement("SELECT * FROM `saver` WHERE 1");
pstmt = con.prepareStatement("UPDATE `saver` SET `post_id`=?,`post_title`=?,`post_description`=?,`post_status`=?, WHERE 1");

String q = ("INSERT into saver(post_id,post_title,post_description,post_status) " +
"values('" + id + "','" + title + "'," + description + ",'" + status + "')");

pstmt.executeUpdate();
out.println(" done").

共有1个答案

越姚石
2023-03-14

这里有三个独立的SQL。

您的第一个代码(select)永远不会运行,因为您会立即在下一行替换pstmt中的内容。

第二个参数(update)具有参数占位符,但您从未填写这些参数(通过pstmt.setintpstmt.setstring等),因此对其调用executeupdate应该会失败,并出现错误。

您的第三个(insert)只是一个字符串,您从不使用它来执行任何操作(这很好,因为它使用字符串连接来填充值,这绝不是一个好主意,它使您的代码容易受到SQL注入攻击,不管是有意的还是无意的)。

结尾处还有一个语法错误,是.而不是

我不知道您使用的是什么RDBMS,但我使用过的大多数RDBMS都不允许在set子句的最后一个项后面加上逗号,所以您可能想要删除最后一个逗号。

请注意,update使用了反勾来引用表名和列名,但您的insert代码没有这样做。我建议保持一致。

下面是使用代码中使用的变量执行update的示例:

try (
    PreparedStatement pstmt = con.prepareStatement(
        "UPDATE `saver` " +
        "SET `post_id`=?,`post_title`=?,`post_description`=?,`post_status`=? " +
        "WHERE 1"
    );
) {
    pstmt.setInt(1, id);
    pstmt.setString(2, title);
    pstmt.setString(3, description);
    pstmt.setString(4, status);
    pstmt.executeUpdate();
    out.println(" done");
}

(这是一个try-with-resources语句,使用该语句时,无论代码如何离开该块 ;-错误或成功 ;-该语句都会被释放。)

或者如果您想要执行insert,那么它基本上是相同的,只是不同的SQL:

try (
    PreparedStatement pstmt = con.prepareStatement(
        "INSERT INTO `saver` (`post_id`, `post_title`, `post_description`, `post_status`) " +
        "VALUES (?, ?, ?, ?)"
    );
) {
    pstmt.setInt(1, id);
    pstmt.setString(2, title);
    pstmt.setString(3, description);
    pstmt.setString(4, status);
    pstmt.executeUpdate();
    out.println(" done");
}
 类似资料:
  • 我的数据库代码是这样的。 出现成功保存的消息,但在数据库中找不到该值。请告诉我为什么会这样?

  • 我公司使用汇流维基,这里有一些文档和共享记录。但是我发现这不是很方便,例如插入一些代码块,我必须键入然后选择code block然后选择language(例如bash java等),如果使用markdown就。 有没有什么方式可以在汇合中快速插入代码?

  • 使用指南 - 数据报告 - 百度推广 - 为什么推广报告中没有数据 如果确认代码安装正确(点此查看如何检查代码安装正确),那么百度推广报告中没有数据或者数据显示不全,可能有以下原因: 1、您的查看时间为添加代码的当天,此时百度推广数据尚未生成,要等次日查看; 2、如果是某个特定的计划、单元或关键词没有数据,请检查: (1)您是否在全部的百度推广URL中安装了代码? 请确保在全部的百度推广URL都安

  • 这段代码是我用Java Swing制作的Tic-Tac-Toe程序的一部分。为什么在添加用于添加按钮的for语句时返回NullPointerException?

  • 问题内容: 我知道每次键入字符串文字时,字符串池中都会引用相同的String对象。 但是,为什么String API不包含,所以我可以使用引用? 至少,这将节省编译时间,因为编译器将知道引用现有的String,而不必检查是否已创建它以进行重用,对吗?我个人认为,字符串文字(尤其是很小的文字)在许多情况下是一种“代码异味”。 那么是否没有String.Empty背后的宏伟设计原因,还是语言创建者根本

  • 问题内容: 在Java中,有和接口。两者都属于Java的标准框架,并提供了一种访问元素的分类方法。 但是,据我了解没有。你可以用来对列表进行排序。 知道为什么要这样设计吗? 问题答案: 列表迭代器首先确保你以列表的内部顺序(也称为插入顺序)获取列表的元素。更具体地说,它是按照插入元素的顺序或操作列表的方式进行的。排序可以看作是对数据结构的一种操作,有几种方法可以对列表进行排序。 我将按照自己的见解