【发布时间】:2015-12-23 18:11:12
【问题描述】:
我正在尝试通过从 2 个表中选择列中的特定数据来执行插入到 1 个表中的 INSERT INTO SELECT。问题是,它也将涉及来自 JTextField 的用户输入。我已经搜索了许多解决方案,但仍然出现错误,我只是不知道还能做什么。我使用 Java 作为 PL 和 Oracle 作为 DB。这是我到目前为止所得到的:
Class.forName("oracle.jdbc.driver.OracleDriver");
con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","ghost","slayer");
stmt = con.createStatement();
String sbjC = sbjCode.getText(); //textfield for subjectCode
String sbjN = sbjName.getText(); //textfield for subjectName
String matricsno = textstudentid.getText(); //textfield for matrics number
String sbjG = sbjGrade.getText(); //textfield for subjectGrade (not gonna be use in db, just for comparison)
String sql1 = "INSERT INTO transferred (subjectCode,subjectName,credit,prequisite,matricsNo) "
+ "SELECT b.subjectCode,b.subjectName,b.credit,b.prequisite,s.matricsNo "
+ "FROM bitm b, student s "
+ "WHERE b.subjectCode = '"+sbjC+"' AND b.subjectName = '"+sbjN+"' AND s.matricsNo = '"+matricsno+"'";
/* table Transferred has 5 column which are subjectCode,subjectName,credit,prequisite,matricsNo [matricsno as FK]
* table bitm has 5 column [subjectCode as PK]
* table student has 6 column [matricsno as PK]
*/
ps = con.prepareStatement(sql1);
ps.setString(1, sbjC);
ps.setString(2, sbjN);
ps.setString(3, "SELECT credit FROM bitm WHERE subjectCode = '"+sbjC+"' AND subjectName = '"+sbjN+"'");
ps.setString(4, "SELECT prequisite FROM bitm WHERE subjectCode = '"+sbjC+"' AND subjectName = '"+sbjN+"'");
ps.setString(5, "SELECT matricsno FROM student WHERE matricsno = '"+matricsno+"'");
ps.executeUpdate(sql1);
执行并将所需的所有数据插入 JTextField 后,我遇到的唯一错误是 java.sql.SQLException : Invalid column index。
SQL 语句已在 SQL Developer 中测试并成功。只是我对如何在 Java 上做到这一点有点困惑。 感谢您的所有回复和时间。 我是 Java 新手。
【问题讨论】:
-
哪一行会产生该错误?
.setString之一?您使用这些行动态设置的相应?在哪里?见docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html -
您的参数完全关闭。您正在尝试将
select查询设置为参数?我认为你需要退后一步,学习准备好的语句如何工作的基础知识。 -
您的查询没有参数。您需要将
?放入SQL 字符串而不是实际参数中。您也可以不使用select语句作为参数字符串。 -
ps.setString(1, sbjC); ps.setString(2, sbjN); ps.setString(3, "SELECT credit FROM bitm WHERE subjectCode = '"+sbjC+"' AND subjectName = '"+sbjN+"'"); ps.setString(4, "SELECT prequisite FROM bitm WHERE subjectCode = '"+sbjC+"' AND subjectName = '"+sbjN+"'"); ps.setString(5, "SELECT matricsno FROM student WHERE matricsno = '"+matricsno+"'");很奇怪 -
我试过用 ?我得到的错误是 java.sql.SQLException: ORA-01008: not all variables bound
标签: java oracle jdbc prepared-statement