繁体   English   中英

插入,替换/更新JDBC

[英]Insert, Replace/Update JDBC

我想要一个存储所有用户投票的数据库。 例如,假设用户ABC在问题Y上选择X。然后,同一用户ABC决定对单独的问题进行投票,然后在问题Z上选择V。每当用户按下“提交”按钮时,信息就会添加到数据库中。 假设几天后,同一位用户ABC决定更改其投票之一,因此他回到问题Y,但是这次选择W而不是X。应避免输入新的条目,而应使用旧的条目应该使用新的选择进行更新。

我的投票表保存所有投票和用户以及所有选择:

CREATE TABLE Votes(
  id integer,
  username varchar(16),
  option varchar(16)
)

我尝试过不同的方法,每种方法均未成功。

在开始实现这些类型的数据库连接之前,它总是一种好的方法,即考虑图表以帮助您了解和组织数据库表。 关系模型是一个很好且简单的开始方式。 您必须查看所拥有实体的类型,在这种情况下,这是用户和问题。 这些实体将各自代表一个表。 用户对一个问题进行投票,并且由于许多用户可以对每个问题进行投票,而每个用户可以对许多问题进行投票,因此这些实体“投票”之间的关系也必须具有一个表格。 we,我们有3张桌子。 用户表应具有其ID和您认为合适的用户数据,并且ID是其主键。 问题表应该具有其ID和您认为合适的用户数据,并将其ID作为主键。 在表决表上,您应具有用户ID和已被表决的问题的ID,以及您希望在其中拥有的任何其他数据。 用户ID和问题ID将在此处构成一个重要的主键。 这样,通过访问投票表,您将能够知道哪个用户对每个问题都进行了投票,并且哪个问题是由哪个用户进行了投票等。

我认为您应该在表中再添加一个字段以供提问。

当您在应用程序/数据库中执行此操作时,应检查该用户是否有包含问题和答案的行,如果是,则更新表,或者如果行不退出则插入表。

如下更改表格:
CREATE TABLE votes ( id bigint(20) NOT NULL AUTO_INCREMENT, user_id bigint(20) DEFAULT NULL, question_id bigint(20) DEFAULT NULL, option varchar(255) DEFAULT NULL, PRIMARY KEY (id), UNIQUE KEY user_id (user_id,question_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8

在插入新记录之前,应检查用户是否已通过以下方式回答了此问题:
select * from votes where user_id = ? and question_id = ? limit 1

如果存在记录,请对其进行更新或插入新记录;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM