【问题标题】:how can I create a store procedure to insert 4 values into a table?如何创建存储过程以将 4 个值插入表中?
【发布时间】:2013-02-26 23:36:02
【问题描述】:

我正在使用 Swing 组件创建一个 java 应用程序,但我不知道如何创建一个存储过程来将 4 个值插入到表中,或者如果使用触发器更好。 这是我的界面:

Question: ______textbox_____      correct answer:(bonne reponse )
Reponse A: _____textbox______     *A (Radio button)
Reponse B: _____textbox______     *B (Radio button)   [Add button]
Reponse C: _____textbox______     *C (Radio button)
Reponse D: _____textbox______     *D (Radio button)
(levels)Paliers: _______ComboBox___

这些是我在 mysql 中的表

-- -----------------------------------------------------
-- Table `mydb`.`questions`
-- -----------------------------------------------------
CREATE  TABLE `questions` (
  `idquestion` INT NOT NULL AUTO_INCREMENT ,
  `question` VARCHAR(150) NULL ,
  `palier_fk` INT NULL ,
  PRIMARY KEY (`idquestion`) ,
  INDEX `palier_fk` (`palier_fk` ASC) ,
  CONSTRAINT `palier_fk`
    FOREIGN KEY (`palier_fk` )
    REFERENCES `paliers` (`idpalier` )
   )

-- -----------------------------------------------------
-- Table `reponses`
-- -----------------------------------------------------
CREATE  TABLE `reponses` (
  `idreponse` INT NOT NULL AUTO_INCREMENT ,
  `response` VARCHAR(60) NULL ,
  `bonne` TINYINT(1)  NULL ,
  `question_fk` INT NULL ,
  PRIMARY KEY (`idreponse`) ,
  INDEX `question_fk` (`question_fk` ASC) ,
  CONSTRAINT `question_fk`
    FOREIGN KEY (`question_fk` )
    REFERENCES `questions` (`idquestion` )
   )

但问题是如何创建存储过程以插入 4 个值并同时使用 idpalier (1,2,3) 插入表问题

我试过了,但它不正确

CREATE PROCEDURE sp_reponses_INSERT
(

IN idreponse int(11),
IN reponse varchar(60),
IN bonne tinyint(1),
IN question_fk int(11)
)
BEGIN

INSERT INTO reponses(
    reponse,
    bonne,
    question_fk
)
VALUES
(   
    reponse,
    bonne,
    question_fk

),

(   
    reponse,
    bonne,
    question_fk

),
(   
    reponse,
    bonne,
    question_fk

),
(   
    reponse,
    bonne,
    question_fk

),

;

END 

GO

另一方面,我正在考虑创建一个触发器而不是存储过程,但我对此不太确定。因为我必须在表格问题中插入问题以及表格响应中的 4 个响应。

有什么想法吗?

【问题讨论】:

  • 你得到什么错误信息?
  • 据我了解,您的程序将在保存表单期间被调用。为什么不直接调用 4 次插入?
  • 现在的存储过程是正确的!但我不知道是否可以创建触发器并在插入答案之后抛出触发器以插入问题或相反。
  • @lezti,触发一个用于操作数据库中已有数据的操作。由于您在数据库中没有问题和答案时,触发器是无用的。您可以在插入例如问题时添加触发器。首先你插入问题。在触发执行时,它只知道您插入的问题和数据库中已经存在的所有数据,它对答案一无所知。由于触发器不接受参数,因此无法给出答案。

标签: java mysql stored-procedures triggers


【解决方案1】:

您可以按如下方式重写您的存储过程:

CREATE PROCEDURE sp_reponses_INSERT
(
@reponse varchar(60),
@bonne tinyint(1),
@question_fk int(11)
)
BEGIN

INSERT INTO reponses(
    reponse,
    bonne,
    question_fk
)
VALUES
(   
    @reponse,
    @bonne,
    @question_fk

)
END

您现在可以传入变量并执行此存储过程。但是,此过程适用于 1 次执行。您必须调用它 4 次,每次都传入新的变量集。

在此之后,您可以在响应表上添加一个触发器,然后插入到问题表中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多