PostgreSQL:n ja JDBC-ajurin asennus- ja käyttöohje Tietokannat II Kevät 2009 Sampsa Rauti 1 Johdanto Seuraavat ohjeet käsittelevät PostgreSQL:n ja PostgreSQL JDBC -ajurin asentamista Windows-ympäristöön. Lisäksi käydään läpi, miten company-tietokannan saa lisättyä omalle koneelle, ja miten Java-luokkia käännetään ja suoritetaan. Jos lisäkysymyksiä ilmenee, ota yhteyttä kurssiassistenttiin. 2 PostgreSQL:n asennus 1. Lataa PostgreSQL osoitteesta http://www.enterprisedb.com/products/pgdownload.do#windows 2. Suorita asennusohjelma. 3. Kaikissa asennusohjelman kohdissa voi säilyttää oletusasetukset. Eräässä vaiheessa ohjelma kysyy salasanaa, joka tulee käyttöön pääkäyttäjätunnukselle postgres. 3 Tietokannan luonti Kun PostgreSQL on asennettu, voit luoda company-tietokannan tai minkä tahansa muun tietokannan). Luonti tapahtuu pgadmin III -työkalua käyttämällä seuraavasti: 1. Valitse Käynnistä-valikosta Kaikki ohjelmat - PostgreSQL 8.3 - pgadmin III. 2. Kaksoisnapsauta objektien selaus -kohdassa paikallista PostgreSQL 8.3 -palvelinta, jolloin ohjelma kysyy sinulta pääkäyttäjän salasanaa. Jos saat virheilmoituksen, ettei serveri kuuntele, käynnistä serveriohjelma: Käynnistä-valikko - Kaikki ohjelmat - PostgreSQL 8.3 - Start Server. Vaihtoehtoisesti palomuurisi asetukset saattavat estää porttiin 5432 yhdistämisen.) 3. Avaa Tietokannat-objektin pikavalikko ja valitse Uusi tietokanta.
4. Anna uuden tietokannan nimeksi company. 5. Valitse company-tietokanta listalta ja valitse työkaluriviltä Suorita SQL-kysely. Kyselyikkuna avautuu. 6. Kopioi tähän ikkunaan company-tietokannan luontikäskyt, jotka löytyvät esimerkiksi tämän dokumentin liitteestä A. Paina sitten Suorita kysely vihreä nuoli). Nyt company-tietokanta on luotu palvelimelle. Kyselyikkunassa voi testata SQL-kyselyjen tekemistä company-tietokantaan.
4 Ajurin asennus ja käyttö Seuraavaksi company-tietokannan käyttöä voi testata Javalla. Tähän tarvitaan JDBC PostgreSQL -ajuri. 1. Lataa ajuri osoitteesta http://jdbc.postgresql.org/download.html 2. Laita lataamasi jar-tiedosto samaan hakemistoon kuin java-luokka, jonka aiot kääntää ja ajaa. 3. Avaa komentorivi ja mene hakemistoon, johon laitoit ajurin. 4. Käännä luokka komennolla javac -classpath postgresql-8.3-604.jdbc3.jar;. Testi.java 5. Aja ohjelma komennolla java -classpath postgresql-8.3-604.jdbc3.jar;. Testi Yllä olevassa kuvassa näkyy toimivan ohjelman tuloste suorituksen jälkeen. Käännös- ja ajokomennoissa korvaa tarvittaessa ajurin nimi, jos käytät eri versiota ajurista JDBC 4 -versio). Kuvassa suoritettu Testi.java, joka tekee company-tietokantaan yksinkertaisen kyselyn, on tämän dokumentin liitteenä B. Huomaa, että salasana on vaihdettava vastaamaan omaa PostgreSQL-salasanaasi.
Liite A: Company-tietokannan luontikäskyt CREATE TABLE EMPLOYEE Fname VARCHAR15) NOT NULL, Minit CHAR, Lname VARCHAR15) NOT NULL, Ssn CHAR9) NOT NULL, Bdate DATE, Address VARCHAR30), Sex CHAR, Salary DECIMAL10, 2), Super_ssn CHAR9), Dno INT NOT NULL, PRIMARY KEYSsn), FOREIGN KEYSuper_ssn) REFERENCES EMPLOYEESsn) CREATE TABLE DEPARTMENT Dname VARCHAR15) NOT NULL UNIQUE, Dnumber INT NOT NULL PRIMARY KEY, Mgr_ssn CHAR9) NOT NULL, Mgr_start_date DATE, FOREIGN KEYMgr_ssn) REFERENCES EMPLOYEESsn) CREATE TABLE DEPT_LOCATIONS Dnumber INT NOT NULL, Dlocation VARCHAR15) NOT NULL, PRIMARY KEYDnumber, Dlocation), FOREIGN KEYDnumber) REFERENCES DEPARTMENTDnumber) CREATE TABLE PROJECT Pname VARCHAR15) NOT NULL, Pnumber INT NOT NULL, Plocation VARCHAR15), Dnum INT NOT NULL, PRIMARY KEYPnumber), UNIQUEPname), FOREIGN KEYDnum) REFERENCES DEPARTMENTDnumber) CREATE TABLE WORKS_ON Essn CHAR9) NOT NULL, Pno INT NOT NULL, Hours DECIMAL3, 1), PRIMARY KEYEssn, Pno), FOREIGN KEYEssn) REFERENCES EMPLOYEESsn), FOREIGN KEYPno) REFERENCES PROJECTPnumber) CREATE TABLE DEPENDENT Essn CHAR9) NOT NULL, Dependent_name VARCHAR15) NOT NULL, Sex CHAR, BDate DATE,
Relationship VARCHAR8), PRIMARY KEYEssn, Dependent_name), FOREIGN KEYEssn) REFERENCES EMPLOYEESsn) EMPLOYEE-taulun data 'James', 'E', 'Borg', '888665555', DATE'1937-11-10', '450 Stone, Houston, TX', 'M', 55000, NULL, 1 'Franklin', 'T', 'Wong', '333445555', DATE'1955-12-08', '638 Voss, Houston, TX', 'M', 40000, '888665555', 5 'John', 'B', 'Smith', '123456789', DATE'1965-01-09', '731 Fondren, Houston, TX', 'M', 30000, '333445555', 5 'Jennifer', 'S', 'Wallace', '987654321', DATE'1941-06-20', '291 Berry, Bellaire, TX', 'F', 43000, '888665555', 4 'Alicia', 'J', 'Zelaya', '999887777', DATE'1968-01-19', '3321 Castle, Spring, TX', 'F', 25000, '987654321', 4 'Ramesh', 'K', 'Narayan', '666884444', DATE'1962-09-15', '975 Fire Oak, Humble, TX', 'M', 38000, '333445555', 5 'Joyce', 'A', 'English', '453453453', DATE'1978-07-31', '5631 Rice, Houston, TX', 'F', 25000, '333445555', 5 'Ahmad', 'V', 'Jabbar', '987987987', DATE'1969-03-29', '980 Dallas, Houston, TX', 'M', 25000, '987654321', 4 DEPARTMENT-taulun data INSERT INTO DEPARTMENT Dname, Dnumber, Mgr_ssn, Mgr_start_date) 'Research', 5, '333445555', DATE'1988-05-22' INSERT INTO DEPARTMENT Dname, Dnumber, Mgr_ssn, Mgr_start_date) 'Administration', 4, '987654321', DATE'1995-01-01' INSERT INTO DEPARTMENT Dname, Dnumber, Mgr_ssn, Mgr_start_date) 'Headquarters', 1, '888665555', DATE'1981-06-19' DEPT_LOCATION-taulun data INSERT INTO DEPT_LOCATIONS Dnumber, Dlocation) 5, 'Bellaire'
INSERT INTO DEPT_LOCATIONS Dnumber, Dlocation) 1, 'Houston' INSERT INTO DEPT_LOCATIONS Dnumber, Dlocation) 5, 'Houston' INSERT INTO DEPT_LOCATIONS Dnumber, Dlocation) 4, 'Stafford' INSERT INTO DEPT_LOCATIONS Dnumber, Dlocation) 5, 'Sugarland' PROJECT-taulun data INSERT INTO PROJECT Pname, Pnumber, Plocation, Dnum) 'ProductX', 1, 'Bellaire', 5 INSERT INTO PROJECT Pname, Pnumber, Plocation, Dnum) 'ProductY', 2, 'Sugarland', 5 INSERT INTO PROJECT Pname, Pnumber, Plocation, Dnum) 'ProductZ', 3, 'Houston', 5 INSERT INTO PROJECT Pname, Pnumber, Plocation, Dnum) 'Computerization', 10, 'Stafford', 4 INSERT INTO PROJECT Pname, Pnumber, Plocation, Dnum) 'Reorginization', 20, 'Houston', 1 INSERT INTO PROJECT Pname, Pnumber, Plocation, Dnum) 'Newbenefits', 30, 'Stafford', 4 WORKS_ON-taulun data INSERT INTO WORKS_ON Essn, Pno, Hours) '123456789', 1, 32.5 INSERT INTO WORKS_ON Essn, Pno, Hours) '123456789', 2, 7.5 INSERT INTO WORKS_ON Essn, Pno, Hours) '666884444', 3, 40 INSERT INTO WORKS_ON Essn, Pno, Hours) '453453453', 1, 20 INSERT INTO WORKS_ON Essn, Pno, Hours) '453453453', 2, 20 INSERT INTO WORKS_ON Essn, Pno, Hours) '333445555', 2, 10 INSERT INTO WORKS_ON Essn, Pno, Hours) '333445555', 3, 10 INSERT INTO WORKS_ON Essn, Pno, Hours) '333445555', 10, 10 INSERT INTO WORKS_ON Essn, Pno, Hours) '333445555', 20, 10 INSERT INTO WORKS_ON Essn, Pno, Hours) '999887777', 30, 30 INSERT INTO WORKS_ON Essn, Pno, Hours) '999887777', 10, 10 INSERT INTO WORKS_ON Essn, Pno, Hours) '987987987', 10, 35 INSERT INTO WORKS_ON Essn, Pno, Hours) '987987987', 30, 5 INSERT INTO WORKS_ON Essn, Pno, Hours) '987654321', 30, 20 INSERT INTO WORKS_ON Essn, Pno, Hours) '987654321', 20, 15 INSERT INTO WORKS_ON Essn, Pno, Hours) '888665555', 20, NULL DEPENDENT-taulun data INSERT INTO DEPENDENT Essn, Dependent_name, Sex, Bdate, Relationship) '333445555', 'Alice', 'F', DATE'1986-04-05', 'Daughter' INSERT INTO DEPENDENT Essn, Dependent_name, Sex, Bdate, Relationship) '333445555', 'Theodore', 'M', DATE'1983-10-25', 'Son' INSERT INTO DEPENDENT Essn, Dependent_name, Sex, Bdate, Relationship) '333445555', 'Joy', 'F', DATE'1958-05-03', 'Spouse' INSERT INTO DEPENDENT Essn, Dependent_name, Sex, Bdate, Relationship) '987654321', 'Abner', 'M', DATE'1942-02-28', 'Spouse' INSERT INTO DEPENDENT Essn, Dependent_name, Sex, Bdate, Relationship) '123456789', 'Michael', 'M', DATE'1988-01-04', 'Son' INSERT INTO DEPENDENT Essn, Dependent_name, Sex, Bdate, Relationship) '123456789', 'Alice', 'F', DATE'1988-12-30', 'Daughter'
INSERT INTO DEPENDENT Essn, Dependent_name, Sex, Bdate, Relationship) '123456789', 'Elizabeth', 'F', DATE'1967-05-05', 'Spouse'
Liite B: Testi.java import java.sql.*; public class Testi { private static Connection kanta = null; public static void mainstring[] args) { Testi.alusta Testi.teeKyselykanta Testi.sulje public static Connection alusta) { try { Class.forName"org.postgresql.Driver").newInstance kanta = DriverManager.getConnection"jdbc:postgresql:company", "postgres", "admin" catch Exception e) { System.out.println"Virhe tietokantakerroksessa: " + e return kanta; public static void sulje) { try { kanta.close catch SQLException e) { System.out.println"Virhe tietokantakerroksessa: " + e public static void teekyselyconnection kanta) { try { Statement lause = kanta.createstatement String kysely = "SELECT fname FROM employee;"; ResultSet tulos = lause.executequerykysely while tulos.next)) { System.out.printlntulos.getString"fname") tulos.close lause.close catch Exception e) { System.out.println"Virhe tietokantakerroksessa: " + e