2013-01-07 28 views
1

表雇主INSERT INTO内部采用Java中JOIN

CREATE TABLE "Employer" ("employerID" INTEGER PRIMARY KEY NOT NULL , 
"name" CHAR, 
"industry" CHAR, 
"contact1" CHAR, 
"contact2" CHAR, 
"email" CHAR, 
"website" CHAR, 
"facts" CHAR, 
"phone" VACHAR) 

表工作

CREATE TABLE "Job" ("jobID" INTEGER PRIMARY KEY NOT NULL , 
"employerID" INTEGER, 
"title" CHAR, 
"description" CHAR, 
"type" CHAR,"salary" CHAR, 
"benefits" CHAR, 
"vacancies" INTEGER, 
"closing" CHAR, 
"requirement" CHAR, 
"placement" BOOL, 
"applyTo" CHAR, 
"status" CHAR, 
"posted" CHAR, 
"location" CHAR) 

try { 
    //String sqlStm = "INSERT INTO Job (employerID,title,description,type,salary,benefits,vacancies,closing,requirement,placement,applyTo,status,posted,location) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?) INNER JOIN Employer ON Job.employerID = Employer.employerID"; 
    String sqlStm = "SET @SELECTED_ID = (SELECT employerID FROM Employer WHERE name = '"+comboEmployer.getSelectedItem().toString()+"') INSERT INTO Job (employerID,title,description,type,salary,benefits,vacancies,closing,requirement,placement,applyTo,status,posted,location)VALUES (@SELECTED_ID,?,?,?,?,?,?,?,?,?,?,?,?,?)"; 
     pst = conn.prepareStatement(sqlStm); 

    pst.setString(2,txtTitle.getText()); 
    pst.setString(3,areaDescription.getText()); 
     pst.setString(4,comboType.getSelectedItem().toString()); 
     pst.setString(5,txtSalary.getText()); 
     pst.setString(6,areaBenefits.getText()); 
     pst.setString(7,txtVac.getText()); 
      pst.setString(8,txtDate.getDateFormatString().toString()); 
      pst.setString(9,areaReq.getText()); 
      pst.setString(10,comboPlace.getSelectedItem().toString()); 
      pst.setString(11,txtWeb.getText()); 
       pst.setString(12,comboStatus.getSelectedItem().toString()); 
       pst.setString(13,"01-01-2013"); 
       pst.setString(14,txtLoc.getText()); 
        pst.executeUpdate(); 
    } catch (Exception e) { 
     JOptionPane.showMessageDialog(null,e); 
    } finally { 
     try { 
      rs.close(); 
      pst.close(); 
     } catch (Exception e) { 
     } 
    } 
} 

我试图让用户的工作添加到系统和形式要求他们从Employer挑雇主表。我不确定如何将JCombobox中选定的雇主与工作联系起来。即Job表中的employerID应与employer表的雇主ID匹配。香港专业教育学院设法做Select声明,

sql = "SELECT Job.jobID as 'Job ID', Employer.name as'Company', Job.title as 'Role', Job.type as 'Type', Job.closing as 'Closing Date' FROM Job INNER JOIN Employer ON Job.employerID=Employer.employerID ORDER BY Employer.name"; 

,但不知道如何INSERT到sqlite的经理。继承人形式:enter image description here

+2

你为什么有INSERT查询中的INNER JOIN?此外,你使用MySQL或SQLite(你包括两个标签)? – PinnyM

+1

@PinnyM它是一个关系数据库,即Job表中的employerID是外键,并且是雇主表的主键。 – Hoody

+0

sqlite,但声明可能在两种情况下都是类似的 – Hoody

回答

0

您的JComboBox应该包含Employer类型的对象。这个雇主类应至少包含雇主的ID(能够唯一标识他)和雇主的名字(在组合框中显示)。

要插入一个新的工作,只是从您的组合框获得所选择的雇主,获得其ID,并把它传递到您的查询(这不应该有任何内部连接):

insert into job (employerID,title, ...) values (?, ?, ...) 
+0

我不确定我的combox是否有该对象,并且能够给我ID。我这样做是这样的http://stackoverflow.com/questions/14171600/immediate-update-to-jcombobox-in-java 你能支持你的答案与示例代码 – Hoody

+0

我如何从组合框中获得id,任何帮助? – Hoody

+0

阅读关于组合框的swing教程:http://docs.oracle.com/javase/tutorial/uiswing/components/combobox.html。要获得所选雇员的ID,您只需执行'((Employee)comboBox.getSelectedItem())。getId()' –

0

您可以从前端编码本身处理它。 Combobox有两件事情 - 价值和文字。组合框项目的值应该是作业ID,文本应该是描述。使用Select查询来检索这部分。然后你可以插入Selected选项的值。因此Job ID将被插入。

+1

@TechBytes这不是我的问题。我的问题是如何将雇主表中的employerID与作业表中的employerID链接到Inserting values中。 – Hoody

+0

没有ComboBox条目没有值和文本。它只有元素,元素可以是任何对象。在这种情况下,对象的类型应该是'雇主'。 –

0

我想我明白你在做什么。您正尝试使用表单中输入的值添加到'工作'表中。由于雇主的下拉框为文本形式,“雇主”表只接受雇主ID,因此您需要将雇主名称转换为雇主ID的内容。

试试这段代码。这是写在香草SQL,所以你可能要做出的SQLite

SET @SELECTED_ID = (SELECT employerID 
        FROM Employer 
        WHERE name = @your_text_box_variable) 

INSERT INTO Job (employerID,title,description,type,salary,benefits,vacancies,closing,requirement,placement,applyTo,status,posted,location) 
VALUES (@SELECTED_ID,?,?,?,?,?,?,?,?,?,?,?,?,?) 

本质上说,我们正在采取从形式(使用变量@your_text_box_variable传输)采取用人单位名称的值以及拉回了一些小的调整与该名称关联的雇主ID。然后我们可以使用这个雇主ID来插入'工作'表。

+0

不好的坏解决方案。如果两个雇主拥有相同的名字会怎样?组合框中的对象类型应该是Employer,OP应该从选定的雇主处获得ID并将其传递给查询。 –

+0

每个雇主都有自己独特的编号 – Hoody

+0

看到这为组合框,我做了http://stackoverflow.com/questions/14171600/immediate-update-to-jcombobox-in-java – Hoody