【问题标题】:POST method in RESTfull problem with the sql or with the Statement to generate id?RESTfull 中的 POST 方法与 sql 或使用语句生成 id 的问题?
【发布时间】:2021-04-19 11:51:51
【问题描述】:

GET、PUT 和 DELETE 有效,但尝试执行 POST 方法却不起作用。在我的数据库中,“usuario”有一个 id、一个名字和年龄(edad)。

@POST
@Consumes({MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON})
public Response crearUsuario(Usuario usuario) {
    try {
        String sql = "INSERT INTO `RedLibros`.`usuario`(`nombre`,`edad`) " + "VALUES('"
    + usuario.getnombre() + "', '" + usuario.getedad() + "');";
        
        PreparedStatement ps = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
        int affectedRows = ps.executeUpdate();
        
        ResultSet generatedID = ps.getGeneratedKeys();
        if (generatedID.next()) {
            usuario.setidusuario(generatedID.getInt(1));
            String location = uriInfo.getAbsolutePath() + "/" + usuario.getidusuario();
            return Response.status(Response.Status.CREATED).entity(usuario).header("Location", location).header("Content-Location", location).build();
        }
        return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity("No se pudo crear el usuario").build();
        
    } catch (SQLException e) {
        return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity("No se pudo crear el usuario\n" + e.getStackTrace()).build();
    }
}

我正在使用 Postman,我的输入内容是:

</usuario idusuario="1">
       <edad>43</edad>
       <nombre>George</nombre>
</usuario>

错误是:Ljava.lang.StackTraceElement;@1aeb297

And this is the script of my db, im not sure if its because the character set, im using UTF-8.

-- MySQL Script generated by MySQL Workbench
-- lun 19 abr 2021 14:13:50 CEST
-- Model: New Model    Version: 1.0
SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';

-- -----------------------------------------------------
-- Schema RedLibros
-- -----------------------------------------------------
CREATE SCHEMA IF NOT EXISTS `RedLibros` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ;
USE `RedLibros` ;

-- -----------------------------------------------------
-- Table `RedLibros`.`usuario`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `RedLibros`.`usuario` (
  `idusuario` INT NOT NULL,
  `nombre` VARCHAR(45) NULL,
  `edad` VARCHAR(45) NULL,
  PRIMARY KEY (`idusuario`))
ENGINE = InnoDB;

【问题讨论】:

  • 能否请您添加 1. POST 的输入 2. 调用 POST 时的错误消息 3. 表结构 4. 表 DB 类型 5 表约束?看起来插入不起作用。
  • 我还以为是SQL语句,但看不出哪里错了。
  • 我认为您没有通过 POST 调用传递 idusuario。如果您希望这是自动递增的,那么您需要相应地定义表。您应该使用如下 auto_increment 语法 - CREATE TABLE IF NOT EXISTS RedLibros.usuario ( idusuario INT NOT NULL AUTO_INCREMENT, nombre VARCHAR(45) NULL, edad VARCHAR(45) NULL, PRIMARY KEY ( idusuario))
  • 是这个问题,非常感谢!它现在可以工作了:)
  • 将其标记为答案... Ty

标签: sql web-project


【解决方案1】:

我认为您没有通过 POST 调用传递 idusuario。如果您希望这是自动递增的,那么您需要相应地定义表。您应该使用如下的 auto_increment 语法 -

CREATE TABLE IF NOT EXISTS RedLibros.usuario ( idusuario INT NOT NULL AUTO_INCREMENT, nombre VARCHAR(45) NULL, edad VARCHAR(45) NULL, PRIMARY KEY (idusuario));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-24
    • 2014-06-08
    • 2011-04-23
    • 1970-01-01
    • 2020-12-06
    • 2013-10-24
    • 2011-09-12
    相关资源
    最近更新 更多