Язык SQL

Образец приложения базы данных BigHit Video на языке Java 


Обработка карточек учета рабочего времени и расчетных ведомостей служащих, имеющих почасовую оплату, описывалась 7.2.2 в качестве иллюстративного примера использования операторов обновления языка SQL. Пакет для более всесторонней обработки расчетных ведомостей должен содержать некоторую проверку согласованности. Java- приложение будет выполнять операторы обновления языка SQL, а затем проверять полученные расчетные ведомости, чтобы убедиться, что никому из работников не будет заплачено за слишком большое количество часов или по слишком высоким расценкам. Также будут созданы расчетные ведомости для работников с фиксированной зарплатой. Наконец, будет создано сообщение о новых расчетных ведомостях.

На 8.13 представлено определение . класса и методы main и createPayStatements для класса ProcessPayStatements. Метод main образует объект класса, создает расчетные ведомости, проверяет их и печатает сообщение. Метод createPayStatements определяет SQL-операторы и выполняет их. Переменная insertSQL содержит SQL-оператор, приведенный на 7.9, модифицированный таким образом, что атрибут datePaid вставляемых строк является датой, предлагаемой конструктором и хранящейся в переменной datePaid. Это значение заключено в тексте оператора select в одиночные кавычки.5

Проверка расчетных ведомостей осуществляется методом checkPayStatements. Он начинается с выбора новых расчетных ведомостей из базы данных. Затем все эти ведомости просматриваются и производится проверка того, чтобы в каждой ведомости число отработанных часов было не более 80, а общая выплачиваемая сумма не превышала $1,000. Для проверки этих значений необходимо извлечь эти значения из полей как число с плавающей точкой и целое число соответственно. Эта задача осуществляется с помощью следующего кода.

В системе Microsoft Access-константы отмечаются с обеих сторон значками #. Это соглашение демонстрирует неполное соответствие между различными SQL-системами, а также свидетельствует о том, что система Access не под держивает стандартный SQL.

String selectSQL = "select  from Paystatement”

+ "where datePaid = 1" + datePaid try {

ResultSet result « stmt.executeQuery(selectSQL); while (result.next()) {//проверка каждой расчетной ведомости float amount = result.getFloat("amountPaid"); int numHours = result.getlnt("numHours"); if (amount > 1000.00) return false; if (numHours > 80) return false;

}

public class ProcessPayStatements {

protected DBConnect bighitDB « new BigHitDBConnect (); protected String datePaid; // дата новой расчетной ведомости

protected int numPayStatements; //число созданных-ведомостей protected int numTimeCards; // число карточек учета рабочего

времени, ,

// отмеченных как оплаченные public ProcessPayStatements(String datePaid) { // конструктор bighitDB.makeConnection();

stmt » bighitDB.getStatementО» this.datePaid = datePaid;

};

public static void main (String[] args) { // apgs[0] — это datePaid

ProcessPayStatements process

“ new ProcessPayStatements(args[0]); process.createPayStatements(); process. checkPayStatements.(); process.printReport(System.out);

}

public boolean createPayStatements 0 {

String insertSQL . ‘

"insert into Paystatement "

+ " (ssn, hourlyRate, numHours, amountPaid, datePaid)"

+ " select TimeCard.ssn, hourlyRate,"

+ " sum((endTime-startTime)24) as hoursWorked,"

+ " sum((endTime-startTime)24hourlyRate) as amountPaid,"

+ " " + datePaid + "

+ " from TimeCard, HourlyEmployee "

+ " where TimeCard.ssn-=HourlyEmployee.ssn and paid «= false"

+ " group by TimeCard.ssn, hourlyRate"; .

String updateTimeCardSQL =

"update TimeCard set paid = true where paid  false";

try {

numPayStatements »= stmt. executeUpdate (insertSQL); numTimeCards = stmt.executeUpdate(updateTimeCardSQL);

} catch (SQLException e) {

e.printStackTrace(System.out); return false;

}

return true;

} }

Комментарии закрыты