插入,替换/更新JDBC

时间:2016-01-13 09:00:13

标签: java sql jdbc derby

我想拥有一个存储所有用户投票的数据库。例如,让我们说用户ABC在问题Y上选择X.然后同一用户ABC决定对单独的问题进行投票,并在问题Z上选择V.每次用户输入时,信息都会添加到数据库中。按下提交按钮。让我们说几天之后,同一个用户ABC决定更改其中一个投票,所以他回到问题Y但是这次选择W而不是X.应该避免新的条目,而是,应该用新选择更新旧版本。

我的投票表包含所有投票和用户以及所有选择:

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

我尝试了不同的方法但都没有成功。

3 个答案:

答案 0 :(得分:1)

在开始实现这些类型的数据库连接之前,总是很好地考虑图表来帮助您了解如何组织数据库表。关系模型是一种非常简单的开始方式。您必须查看您拥有的实体类型,在这种情况下,它是用户和问题。这些实体将各自代表一个表。用户对问题进行投票,因为许多用户可以对每个问题进行投票,并且每个用户可以对许多问题进行投票,这些实体之间的关系"投票"还必须有一张桌子。我们有3张桌子。用户表应该具有您认为适当的id和用户数据,其中id是其主键。问题表应该具有您认为适当的id和用户数据,其id为主键。在投票表上,您应该拥有用户的ID以及与您在那里拥有的任何其他数据一起投票的问题的ID。用户ID和问题ID将在此处形成一个已折叠的主键。这样通过访问投票表,您将能够知道用户在每个问题上投票,并且问题是由用户投票等等...

答案 1 :(得分:0)

我认为你应该在表格中添加一个字段以便提问。

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

答案 2 :(得分:0)

更改您的表格如下:
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

如果存在记录,请更新它或插入新记录;