- •Министерство образования и науки Украины
- •Особенности PostgreSql
- •Причины, по которым можно предпочесть PostgreSql
- •Недостатки PostgreSql
- •Ограничения PostgreSql
- •Обзор применения последней версии PostgreSql 8.1.
- •Доступ к базам данных из Java-программ
- •1. Постановка задачи
- •2.Информационная модель
- •3.Проетирование бд
- •Атрибуты сущности и их типы данных
- •Типы связей между сущностями
- •Функциональные зависимости
- •4.Программная реализация.
- •5.Инструкция пользователя
- •6.Тестовый пример
- •7.Выводы:
- •Список литературы
4.Программная реализация.
Для написания интерфейса я воспользовалась языком программирования JAVA, причину этого, а также осуществление доступа к нашей базе я объяснила во введении.
Т. к. весь программный код не возможно представить в данном документе по причине его довольно большого объема, то мы рассмотрим лишь важные для нас части (связывающие базу с оболочкой).
Метод для подключения:
public boolean setConn(String url,String user,String pass) {
URL = "jdbc:postgresql:"+ url;
username = user;
password = pass;
Conn();
return isConn;
}
public void Conn() {
try {
Class.forName("org.postgresql.Driver");
} catch (Exception e) {
System.out.println("Подключайся же!!!");
}
try {
con = DriverManager.getConnection(URL, username, password);
stmt = con.createStatement();
isConn = true;
} catch (Exception e) {
System.err.println("Проблемы соединения с " + URL);
isConn = false;
}
}
Метод исполнения запроса
private void execSQL(int mode) {
Conn();
try {
if(mode == 1){
rs = stmt.executeQuery(query);
}else{
stmt.executeUpdate(query);
}
} catch (Exception e) {
System.out.println("Ошибка:" + e);
System.out.println(query);
}finally{
query = "";
CloseConn();
}
}
Метод получения результатов запроса
private void getData(){
vkRow.clear();
try {
ResultSetMetaData rsmd1 = rs.getMetaData();
colCount = rsmd1.getColumnCount();
for (int i = 0; i < colCount; i++) {
vkRow.addElement(rsmd1.getColumnName(i+1));
}
rowCount = 1;
while (rs.next()) {
rowCount++;
for (int k = 0; k < colCount; k++) {
vkRow.addElement(rs.getObject(k + 1));
}
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Далее представим запросы и подзапросы:
Получение данных о товаре
public Vector seeTovar() {
query = "select * from tovar " + parametr;
execSQL(1);
getData();
return vkRow;
}
Получение данных о непроданном товаре
public Vector seeNepr(){
query = " select T.nazvanie_tovara, T.model, F.nazvanie_firmi from tovar T, firma_proizvoditelya F where id_tovara not in(select distinct id_tovara from prodaja) and T.id_firmi=F.nomer_firmi" + parametr;
execSQL(1);
getData();
return vkRow;
}
Получение данных о доходах от продажи
public Vector seeDoh(){
query = " select distinct sum(P.kolichestvo_prodaj*T.tsena) from tovar T, prodaja P where P.id_tovara=T.id_tovara" + parametr;
execSQL(1);
getData();
return vkRow;
}
Получение данных о максимальной выгоде по товарам от продажи
public Vector seeVig(){
query = " select max(maximum), nazvanie_tovara from (select max(T.tsena * P.kolichestvo_prodaj)as maximum,T.nazvanie_tovara from tovar T,prodaja P where T.id_tovara=P.id_tovara group by 2) as B group by 2 order by 1 desc " + parametr;
execSQL(1);
getData();
return vkRow;
}
Получение предварительной прибыли от имеющихся товаров
public Vector seePred(){
query = " select sum(kolichestvo_imeushihsa*tsena) from tovar " + parametr;
execSQL(1);
getData();
return vkRow;
}
Удаление поля из сущности tovar, где в качестве параметра могут выступать как код товара, так и его модель
public void delTovar(String condition) {
query = "delete from tovar where " + condition;
execSQL(2);
}
Т.к. я организовала показ всех атрибутов для каждой сущности, то соответственно будут использованы следующие запросы:
public Vector seePost() {
query = "select * from postavshik " + parametr;
execSQL(1);
getData();
return vkRow;
}
public Vector seeTip() {
query = "select * from tip_tovara " + parametr;
execSQL(1);
getData();
return vkRow;
}
public Vector seeFirm() {
query = "select * from firma_proizvoditelya " + parametr;
execSQL(1);
getData();
return vkRow;
}
public Vector seeZakupka(){
query = "select Z.id_zakupki ,Z.data_zakupki,T.nazvanie_tovara, T.model ,Z.tsena_zakupki ,Z.kolichestvo, P.firma_postavshika from zakupka Z,tovar T, postavshik P where (Z.id_tovara=T.id_tovara) and (P.id_postavshika=Z.id_postavki)";
execSQL(1);
getData();
return vkRow;
}
Также осуществляется ввод данных после нажатия соответствующих кнопок.
Ввод данных в tovar:
public void insTovar(Vector<String> insData) {
query = "insert into tovar values (";
for (int i = 0; i < insData.size(); i++) {
if (i != insData.size() - 1) {
if (i == 0 || i == 1 || i == 2 || i == 6 || i == 7) {
query += insData.get(i) + ", ";
} else
query += "'" + insData.get(i) + "', ";
} else {
query += insData.get(i) + ")";
}
}
execSQL(2);
insData.clear();
}
Ввод данных в prodaja:
query = "insert into prodaja values (";
for (int i = 0; i < insData.size(); i++) {
if (i != insData.size() - 1) {
if (i == 0 || i == 1 || i == 2) {
query += insData.get(i) + ", ";
} else
query += "'" + insData.get(i) + "', ";
} else {
query += "'"+insData.get(i) + "'"+")";
}
}
execSQL(2);
insData.clear();
}
Также есть возможность вводить любой из запросов в соответствующей панели
public Vector setSql(String zapros) {
query = zapros;
execSQL(1);
getData();
return vkRow;
}
Основные запросы и подзапросы были представлены выше. В программе также существует множество методов, обеспечивающих связь внутри самой оболочки между ее составляющими.