Получавам тази грешка, когато вмъквам данни в полетата на една таблица, след това променям SQL оператора resultSet в друга таблица и вмъквам в полетата на таблица 2:
SEVERE: null com.mysql.jdbc.NotUpdatable: Наборът от резултати не може да се актуализира. Този набор от резултати трябва да идва от израз, който е създаден с тип набор от резултати ResultSet.CONCUR_UPDATABLE, заявката трябва да избере само една таблица, не може да използва функции и трябва да избере всички първични ключове от тази таблица. Вижте спецификацията на JDBC 2.1 API, раздел 5.6 за повече подробности.
Операторът resultSet е настроен на актуализираем:
statement = (Statement) connection.createStatement(ResultSet.CONCUR_UPDATABLE, ResultSet.TYPE_SCROLL_INSENSITIVE);
Изразът resultSet за таблица 1 и таблицата:
resultSet = (ResultSet) statement.executeQuery(SELECT * FROM employees);
+----------------------+-----------+----------+------------+----------------------------+----------------+
| socialSecurityNumber | firstName | lastName | birthday | employeeType | departmentName |
+----------------------+-----------+----------+------------+----------------------------+----------------+
| 111-11-1111 | John | Smith | 1945-01-02 | salariedEmployee | R&D |
| 222-22-2222 | Sue | Jones | 1961-02-03 | commissionEmployee | SALES |
| 234435 | ciaran | mooney | 2013-11-28 | commissionEmployee | Sales |
| 333-33-3333 | Bob | Lowis | 1958-10-05 | basePlusCommissionEmployee | SALES |
| 444-44-4444 | Karen | Price | 1972-05-25 | hourlyEmployee | HR |
+----------------------+-----------+----------+------------+----------------------------+----------------+
Таблица 2:
+----------------------+------------+----------------+-------+
| socialSecurityNumber | grossSales | commissionRate | bonus |
+----------------------+------------+----------------+-------+
| 222-22-2222 | 10100 | 0.05 | 0 |
| 222-22-2222 | 12234445 | 0.6 | 300 |
+----------------------+------------+----------------+-------+
2 rows in set (0.00 sec)
//using a object of class employee to update Table employees via resultSet
//manipulate the data in the resultSet, then upadteRow to save changes on DataBase
resultSet.moveToInsertRow();//insert a into a empty row
resultSet.updateString("socialSecurityNumber", addEmployee.getSocialSecurityNumber());
resultSet.updateString("firstName", addEmployee.getFirstName());
resultSet.updateString("lastName", addEmployee.getLastName());
resultSet.updateString("departmentName", addEmployee.getDepartment());
resultSet.updateDate("birthday", new java.sql.Date(addEmployee.getDOB().getTime()));
resultSet.updateString("employeeType", "commissionEmployee");
resultSet.updateString("departmentName", addEmployee.getDepartment());
//EXCEPTION THROWN HERE
//new resultSet for commsionRate employee
statement = (Statement) connection.createStatement(ResultSet.CONCUR_UPDATABLE, ResultSet.TYPE_SCROLL_INSENSITIVE);
resultSet = (ResultSet) statement.executeQuery("SELECT * FROM commissionEmployees");
resultSet.updateString("socialSecurityNumber", addEmployee.getSocialSecurityNumber());
resultSet.updateInt("grossSales", (int)addEmployee.getGrossSales());
resultSet.updateDouble("commissionRate", addEmployee.getCommissionRate());
resultSet.updateDouble("bonus", 0);
//uopdate the database*/
resultSet.insertRow();
//return cursor to orginal position
resultSet.beforeFirst();
Първичният ключ е полето SocialSecurityNumber, присъстващо и в двете таблици. Изключението се хвърля, когато се опитам да променя resultSet на таблица 2, както е подчертано по-горе.
Благодаря предварително...