我有一个对我来说似乎很困难的问题,我有一个表Category和一个表Questions(该表的category_id字段默认为0),在我的表单上我可以从组合框中选择一个类别,然后问我一个问题,如何插入/将表格中的新问题更新到表格中?到目前为止,我的代码仅添加了一个新问题,该问题的类别为0,而不是组合框(组合框仅显示文本) 字符串SQL2 =“ UPDATE gamequestions SET question_id ='gamecategory.category_name =” + jComboBox1.getSelectedItem()。toString()+“,gamequestions.category_id = gamecategory.category_id'WHERE question_id ='0';”; 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填充列问题。 最佳答案 我不知道您的代码应该做什么。您说要插入category_id列具有指定值的新行(不是硬编码零),或者要更新现有行以更改category_id列的值。让我们从需要发送到数据库的SQL文本开始。要更改现有行,例如:UPDATE gamequestions q SET q.category_id = 2 WHERE q.question_id = 42例如,要插入新行(假设question_id为auto_increment):INSERT INTO gamequestions (question_id, category_id) VALUES (NULL, 2)从组合框选择中返回的值将替换上例中的“ 2”。如果您的组合框没有返回category_id值,而是从gamecategory表返回了其他列的值,并且您希望SQL语句对表使用category_id值,一种实现方法是将子查询作为分配给列的值...: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对于gamecategory,如果只想在category_name文本与INSERT表中的行匹配时插入一行,则可以使用如下SQL: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如果category_name表中没有与gamecategory匹配指定值的行(在gamecategory处提供),则不会插入任何行。如果您要继续并插入行,即使category_name文本不匹配,并且category_name设置为默认值0,则类似这样,在SELECT列表中有一个子查询: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第一步实际上是获得一些可以执行所需操作的SQL语句。第二步是使用适当的绑定变量/替换将SQL文本嵌入到您的应用程序中,并避免SQL注入漏洞。第二步很难找出,而不必同时制定第一步。跟进如果要在?中插入行,我们希望INSERT语句中提供category_id列的值,而该值将不会来自gamequestions表中的行。我们作为INSERT的一部分运行的question是从gamequestions表中获取SELECT的值的;无需加入gamequestions表。我认为您需要以下形式的SQL: 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这将插入一个新行,其值为category_id设置为42的整数gamecategory设置为some_id的字符串值another_column设置为'fee fi fo fum'的字符串值question设置为从'my question text goes here'表检索的值理想情况下,您根本不需要从数据库中查找category_id。理想情况下,您的组合框将显示category_id,但返回值gamecategory,因此您可以直接将其插入: 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 )无需在插入文件上运行SELECT。理想情况下,组合框将返回适当的category_name值,而不是返回category_id文本作为值。将“查找”放入下拉菜单例如,代表category_name表内容:id category_name-- --------------- 0 Uncategorized 1 Action-Adventure 2 Adventure 3 Aerial Combat 4 Fighting 5 First Person Shooter 6 Fitness在这样的HTML组合框中: <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>要从javascript的组合框中获取值,例如:$('select[name="category_id"]').val();跟进category_id语句中可以省略gamecategory列,因此我们不需要为其提供question_id值。 INSERT INTO gamequestions (category_id, question, another_column) VALUES (5, 'my question text goes here', 'fee fi fo fum');-要么- INSERT INTO gamequestions (category_id, question, another_column) SELECT 5, 'my question text goes here', 'fee fi fo fum'跟进问:如果我在使用INSERT INTO游戏问题时在问题列中插入多行怎么办,那么我可以拥有3个文本字段,每个文本字段包含不同的问题,但每个文本字段都属于同一游戏类别INSERT INTO游戏问题(question_id,category_id,question,another_column,some_id )值(NULL,5,'我的问题文本在这里','fee fi fofum',42)答:使用VALUES子句,您可以进行多行插入(MySQL提供的功能非常强大且非标准的扩展)。您将发送到数据库的SQL看起来应该像这样:INSERT INTO gamequestions (category_id,question,another_column,some_id)VALUES (5, 'my question text goes here' , 'fee fi fo fum' , 42),(5, 'another question to be added', 'i smell the blood' , 84),(5, 'and this is a third row' , 'of an englishman' , 17)(我省略了question_id列,我们将其分配为DEFAULT NULL值,而实际值将由AUTO_INCREMENT分配。请注意,该列仍与该行的其余部分一起被“插入”,只是给出不完整的列列表,并让MySQL为我们未指定的列分配默认值。)这里真正的“技巧”是我们有三行,三组值。每一行的值集都用括号括起来,就像在单行插入中一样。但是MySQL允许我们加上逗号,为另一行加上另一组值。必须为每行分别提供在每行上分配的category_id,它可以与前几行相同,也可以完全不同,没有任何区别。 (值的唯一区别是,由于违反约束,转换数据类型的问题等原因,MySQL是否将引发错误。)(MySQL忽略了所有间距,我只是添加了间距以使其更具可读性。)关于mysql - 批处理执行的SQL语句可更新两个表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22676624/ 10-11 03:14