我有一个问题对我来说似乎很难,我有一个表类别和一个表格问题(这个表有category_id字段,默认为0),在我的表格上我可以从组合框中选择一个类别,我的问题给你,如何我可以将新问题插入/更新到现成类别吗? 到目前为止,我的代码只添加一个新问题,其中0为类别,而不是组合框中的那个(组合框仅显示文本)
String SQL2 =" UPDATE gamequestions SET question_id =' gamecategory.category_name =" + jComboBox1.getSelectedItem()的toString()+&#34。 ,gamequestions.category_id = gamecategory.category_id'在哪里问题_id =' 0' ;&#34 ;; stmt.addBatch(SQL2);
这是更新后的代码
"INSERT INTO gamequestions (question_id, category_id, question) SELECT NULL as question_id ,c.category_id, q.question='"+jTextArea1.getText()+"' FROM gamecategory c, gamequestions q WHERE c.category_name = '"+Combo_click+"' ORDER BY c.category_id LIMIT 1"
我无法弄清楚如何让jtextarea填充列问题。
答案 0 :(得分:1)
我无法弄清楚你的代码应该做什么。
您说要插入具有category_id
列指定值的新行(硬编码为零以外的其他行),或者您想要更新现有行以更改{{{ 1}}列。
让我们从需要发送到数据库的SQL文本开始。
要更改现有行,例如:
category_id
要插入新行(假设UPDATE gamequestions q
SET q.category_id = 2
WHERE q.question_id = 42
为auto_increment),例如:
question_id
组合框选择返回的值将取代' 2'在上面的例子中。
如果你的组合框没有返回INSERT INTO gamequestions (question_id, category_id) VALUES (NULL, 2)
值,但是从category_id
表返回其他列的值,你希望SQL语句执行&#34 ;查找"使用gamecategory
值来自category_id
表的gamecategory
值,一种方法是将子查询作为分配给列的值...:
category_name
对于UPDATE gamequestions q
SET q.category_id = (SELECT c.category_id
FROM gamecategory c
WHERE c.category_name = ?
ORDER BY c.category_id
LIMIT 1
)
WHERE q.question_id = 42
,如果您只想在INSERT
文本与category_name
表中的行匹配时插入一行,则可以像这样使用SQL:
gamecategory
如果INSERT INTO gamequestions (question_id, category_id)
SELECT NULL as question_id
, c.category_id
FROM gamecategory c
WHERE c.category_name = ?
ORDER BY c.category_id
LIMIT 1
表中没有与gamecategory
匹配指定值(在category_name
所在位置提供)的行,则不会插入任何行。
如果你想继续插入行,即使category_name文本不匹配,并且?
设置为默认值0,那么这样的事情,带有子查询在SELECT列表中:
category_id
第一步是真正获得一些符合你想要的SQL语句。
第二步是将SQL文本嵌入到您的应用程序中,使用适当的绑定变量/替换并避免SQL注入漏洞。第二步很难弄明白,同时也不必同时完成第一步。
<强>后续强>
如果要在INSERT INTO gamequestions (question_id, category_id)
SELECT NULL as question_id
, IFNULL(
( SELECT c.category_id
FROM category c
WHERE c.category_name = ?
ORDER BY c.category_id
LIMIT 1
)
,0) AS category_id
中插入一行,我们希望在INSERT语句中提供gamequestions
列的值,它不会来自question
表中的行。
我们作为INSERT的一部分运行的gamequestions
从SELECT
表中获取category_id
的值;没有必要加入游戏项目表。
我认为您需要以下形式的SQL:
gamecategory
这将插入一个新行,其值为
INSERT INTO gamequestions
( question_id
, category_id
, question
, another_column
, some_id
)
SELECT NULL
, c.category_id
, 'my question text goes here'
, 'fee fi fo fum'
, 42
FROM gamecategory c
WHERE c.category_name = 'category name text goes here'
ORDER BY c.category_id
LIMIT 1
设置为整数值42 some_id
设置为字符串值another_column
'fee fi fo fum'
设置为字符串值question
'my question text goes here'
设置为从category_id
表理想情况下,您根本不需要从数据库中查找category_id;理想情况下,您的组合框会显示gamecategory
,但会返回category_name
的值,因此您可以直接插入:
category_id
无需在插入上运行SELECT。
理想情况下,组合框不会返回 INSERT INTO gamequestions
( question_id
, category_id
, question
, another_column
, some_id
) VALUES
( NULL
, 5
, 'my question text goes here'
, 'fee fi fo fum'
, 42
)
文本作为值,而是返回相应的category_name
值。把&#34;查找&#34;进入下拉
例如,表示category_id
表内容:
gamecategory
在像这样的HTML组合框中:
id category_name
-- ---------------
0 Uncategorized
1 Action-Adventure
2 Adventure
3 Aerial Combat
4 Fighting
5 First Person Shooter
6 Fitness
要从javascript中的组合框中获取值,例如:
<select name=category_id>
<option value='0' selected>Uncategorized</option>
<option value='1'>Action-Adventure </option>
<option value='2'>Adventure </option>
<option value='3'>Aerial Combat </option>
<option value='4'>Fighting </option>
<option value='5'>First Person Shooter </option>
<option value='6'>Fitness </option>
</select>
<强>后续强>
可以从$('select[name="category_id"]').val();
语句中省略question_id
列,然后我们就不需要为其提供INSERT
值。
NULL
-OR -
INSERT INTO gamequestions (category_id, question, another_column)
VALUES (5, 'my question text goes here', 'fee fi fo fum');
<强>后续强>
问:如果我在使用INSERT INTO游戏问题时在问题列中插入多行,那么我可以拥有3个文本字段,每个文本字段包含不同的问题,但每个都会进入相同的游戏类别INSERT INTO gamequestions (question_id,category_id,question,another_column,some_id)VALUES(NULL,5,&#39;我的问题文本在这里&#39;,&#39;费用为f&f;&#39;,42)
A:使用VALUES子句,您可以执行多行插入(MySQL提供的非常强大且非标准的扩展)。
您要发送到数据库的SQL需要看起来像这样:
INSERT INTO gamequestions (category_id, question, another_column)
SELECT 5, 'my question text goes here', 'fee fi fo fum'
(我已经省略了question_id列,我们将为其分配DEFAULT NULL值,并且实际值将由AUTO_INCREMENT分配。请注意,该列仍在&#34;插入&#34 ;与行的其余部分一起,我们只提供一个不完整的列列表,并让MySQL为我们未指定的列分配默认值。)
真正的&#34;技巧&#34;这是我们有三行,三组值。每行的值集都包含在parens中,就像在单行插入中一样。但MySQL允许我们使用逗号,另一行使用另一组值。
每一行分配的category_id必须为每一行单独提供,它可以是与前一行相同的值,或者完全不同,不会产生任何差异。 (值的唯一区别在于MySQL是否会抛出错误,因为违反了约束,转换数据类型时出现问题,等等。)
(MySQL忽略了所有间距,我只是添加了间距以使其更具可读性。)