【发布时间】:2014-07-27 00:46:14
【问题描述】:
我目前正在尝试创建一个 java 文件以允许基本用户界面连接到 derby 客户端服务器。我需要更新学生课程表中的一行,用户将知道学生 ID (SID),并且可能需要输入学生课程 1、2 和 3 以及课程费用 1、2、3 并将它们更改为输入的新数据。并且学生课程 ID SCID 和 SID 目前应该保持不变我正在使用方法从用户那里获取数据并将这些数据存储在 Java 中的变量中,然后我需要能够通过 SID 搜索但不能更改它然后输入剩余数据。 我一直在尝试使用准备好的语句来实现这一点,但我遇到了问题。
---SQLException Caught---
SQLState: XCL14
Severity: 20000
Message: The column position '10' is out of range. The number of columns for t
his ResultSet is '9'.
java.sql.SQLException: The column position '10' is out of range. The number of
columns for this ResultSet is '9'.
at org.apache.derby.client.am.SQLExceptionFactory40.getSQLException(Unkn
own Source)
at org.apache.derby.client.am.SqlException.getSQLException(Unknown Sourc
e)
at org.apache.derby.client.am.ColumnMetaData.getColumnType(Unknown Sourc
e)
at org.apache.derby.client.am.PreparedStatement.setString(Unknown Source
)
at StudentPayments.main(StudentPayments.java:186)
Caused by: org.apache.derby.client.am.SqlException: The column position '10' is
out of range. The number of columns for this ResultSet is '9'.
at org.apache.derby.client.am.ColumnMetaData.checkForValidColumnIndex(Un
known Source)
... 3 more
Students database finishing. . . .
这是表的架构
CREATE TABLE STUDENT_COURSES
(SCID INT NOT NULL GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
SID INT ,
CID1 INT ,
CID2 INT ,
CID3 INT ,
CC1 INT ,
CC2 INT ,
CC3 INT ,
TOTAL INT ,
foreign key (SID) references STUDENT(SID),
foreign key (CID1) references COURSES(CID),
foreign key (CID2) references COURSES(CID),
foreign key (CID3) references COURSES(CID),
UNIQUE (TOTAL)
);
这是我在 Java 中所拥有的,但它不起作用
PreparedStatement scUpdate;
ResultSet StudentCourse;
String SCID, CID1, CID2, CID3, CC1, CC2, CC3;
String studentTotalCost;
String responseSC;
stuUpdate = connect.prepareStatement("UPDATE STUDENT SET FIRSTNAME = ?, LASTNAME = ?, DOB = ?, ADDRESS = ?, SUBURB = ?, PROVINCE = ?, POSTCODE = ?, PHONE = ?, EMAIL = ? WHERE SID = ?");
responseSC=getTableChoiceFromUser();
if( ( responseSC.substring(0,1).equals("3") || responseSC.substring(0,Math.min(responseSC.length(),mUpdate.length())).toUpperCase().equals(mUpdate) ))
//checks the Users selection
{
SID = getStudentSIDFromUser();
if(! SID.substring(0,Math.min(SID.length(),mEXIT.length())).toUpperCase().equals(mEXIT) )
//checks to make sure User does not want to exit this step and return to start.
{
CID1 = getCIDFromUser();
CID2 = getCIDFromUser();
CID3 = getCIDFromUser();
CC1 = getCCFromUser();
CC2 = getCCFromUser();
CC3 = getCCFromUser();
SCID = getCIDFromUser();
studentTotalCost = CC1 + CC2 + CC3;
scUpdate.setString(1, SID);
scUpdate.setString(2, CID1);
scUpdate.setString(3, CID2);
scUpdate.setString(4, CID3);
scUpdate.setString(5, CC1);
scUpdate.setString(6, CC2);
scUpdate.setString(7, CC3);
scUpdate.setString(8, studentTotalCost);
scUpdate.setString(9, SCID);
scUpdate.executeUpdate();
System.out.println(Bar);
System.out.println("Students Courses Successfully Updated.");
System.out.println(Bar);
}
【问题讨论】:
-
你忘记
commit更新了吗? -
自动提交没有关闭,所以应该自动提交。
-
是否有错误或异常?你的问题究竟是什么?
-
对不起,我忘了提及我遇到的异常。我已经更新了问题。
-
照原样,您的代码为表
STUDENT准备语句stuUpdate,并为表scUpdate使用STUDENT_COURSES,您没有显示它是如何准备的。没有它就无法提供更多帮助。