Вы находитесь на странице: 1из 13

I PARCIJALNI ISPIT 2011/2012

-------------------------------------------------// baza centrala(msssql) sa tabelom Artikli


// baza Skladiste(mysql) sa tabelom Proizvodi
// napisi metodu koja ce nadopuniti nedostajuce atribute u tabeli proizvodi u skladu sa
tabelom Artikli
-------------------------------------------------Connection konekcija (String drivr, Strimg URL, String user, String pass){
class.forName(driver);
return.getConncection(url,user,pass);
}
Connection konekcija_centrala = konekcija ("mssql", centralaurl, "admin", "admin");
Connection konekcija_skladiste = konekcija ("mysql", skladisteurl, "admin", "admin");
DatabaseMetadata md_centrala = getMetaData (konekcija_centrala);
ResultSet artikli_kolone = md_centrala.GetColums(null, "%", "Artikli", "%");
DatabaseMetadata md_skladiste = getMetaData (konekcija_skladiste);
ResultSet proizvodi_kolone = md_skladiste.GetColums(null, "%", "Proizvodi", "%");
// prolazimo kroz obje tabele i gledamo da li kolona iz artikala postoji u proizvodima
while (artikli_kolone.next()){
bool nadjen = false;
while (proizvodi_kolone.next()){
if(artikli_kolone.GetString("COLUMN_NAME") ==
proizvodi_kolone.GetString("COLUMN_NAME")){
nadjeno = true;
}
}
if(nadjeno==false){
// ubacujemo kolonu koja nedostaje
// prvo pokupimo podatke o trenutnoj koloni koju ubacujemo (naziv, tip, duzina, not
null)
String naziv = artikli_kolone.GetString("COLUMN_NAME");
String tip = artikli_kolone.GetString("COLUMN_TYPE");
String duzina = artikli_kolone.GetString("COLUMN_SYZE");
String not_null = "";
if (artikli_kolone.getBull("NULLABLE") == false){
not_null = "not null";

String UpitDodajKolonu = "ALTER TABLE proizvodi ADD COLUMN ? ? (?) ?";


// prepared statement za bazu koju mijenjamo
PreparedStatement st = konekcija_skladiste.PreparedStatement(UpitDodajKOlonu);
st.addString(1, naziv);
st.addString(2, tip);
st.addString(3, duzina);
st.addString(4, not_null);
st.executeUpdate();

}
}
--------------------------------------------------------------------------------------// II zadatak
// Napisati metodu koja ce prikazati broj artikala iz baze Centrala i br proizvoda iz baze
Skladiste
String upit1 = "SELECT COUNT (*) br_artikala FROM Artikli";
String upit2 = "SELECT COUNT (*) br_proizvoda FROM Proizvodi";
PreparedStatement ps1 = konekcija_centrala.PreparedStatement(upit1);
PreparedStatement ps2 = konekcija_skladiste.PreparedStatement(upit2);
ResultSet rs1 = ps1.executeQuery();
ResultSet rs2 = ps2.executeQuery();
while (rs1.next()){
printline(getString("br_artikala"));
}
while (rs2.next()){
printline(getString("br_proizvoda"));
}

------------------------------------------------------------------------------------------// III Napisati metodu koja ce formirati ResultSet sa podacima iz tabele Artikli.z
// Nakon toga je potrebno povecati vrijednost kolicine i stanja ako je:
//
trenutno>10 i kolicina < 20
// tada je
trenutno = kolicina-trenutno
kolicina = trenutno +(kolicina*cijena)
-----------------------------------------------------------------------------------------// prvi dio zadatka; rs sa podacima iz tabele artikli
String upit = "SELECT * FROM Artikli";
PreparedStatement ps = konekcija_centrala.PreparedStatement(upit);
ResultSet rs = ps.executeQuery();
// drugi dio zadatka, povecavanje vrijednosti
while (rs.next()){
int trenutno = rs.getInt("trenutno_stanje");
int kolicina = rs.getInt("kolicina");
int cijena = rs.getInt ("cijena");
if (trenutno > 10 && kolicina < 20){
trenutno = kolicina-trenutno;
kolicina = trenutno+kolicina*cijena;
// upisujemo novu vrijednost u polje
rs.setInt("trenutno_stanj", trenutno);
rs.setInt("kolicina", kolicina);
}
}
--------------------------------------------------------------------------------------------IV uzimajuci u obzir RS iz prethodnog zadatka, napisati metodu koja ce azurirati
postojece podatke u tabli proizvodi. Podaci koji nedostaju treba dodati u tabelu
--------------------------------------------------------------------------------------------String upit2 = "SELECT * FROM Proizvodi";
PreparedStatement ps2 = konekcija_skladiste.PreparedStatement(upit2);
ResultSet rs2 = ps2.executeQuery();

String update = "UPDATE proizvodi


SET trenutno_stanje =?,
SET kolicina =?,
WHERE sifra =?"
PreparedStatment psUpdate = konekcija_skladiste.PreparedStatement(update);

String insert = "INSERT INTO proizvodi (sifra, naziv, kolicina, cijena,trenutno_stanj);


VALUES (?,?,?,?,?)"

PreparedStatement psInsert = konekcija_skladiste.PreparedStatement(insert);


// gledamo da li postoji red u tabeli, ako postoji radimo update, ako ne postoji radimo
insert
while (rs1.next()){
bool nadjno = false;
while (rs2.next()){
if (rs1.getString("sifra") == rs2.getString("sifra")){
nadjeno = true;
}
}
if (nadjeno == true)
psUpdate.executeUpdate();
else
psInsert.executeUpdate();
}
}

V nad bazom centrala definisane su tabele:


Artikli (id, naziv, kolicina, cijena, skladiste_id)
Skladista (id, naziv, adresa, grad)
Upotrebom LINQ prikazati sve podatke artikla sa gradom i adresom skladista kojem artikli
pripadaju
// normalni upit
SELECT a.*, s.grad, s.adresa FROM Artikli a, Skladista s
WHERE a.skladiste_id = s.id

------------------------------------------------------------------------// LINQ konekcija


NorthwindDataContext dataConcext = new NorthwindDataContext(Centrala);
// upit
var q = from a in dataContext.Artikli, s in dataContext.Skladista
WHERE a.skladiste_id = s.id
select new {
a.*, s.adresa, s.grad
};

DRUGI ROK
ResultSet rs = md.getTables("baza", "%", "%", tipoviObjekata);
imeBaze = rs.getString(1);
imeTabele = rs.getString(3);
ResultSet rs = md.getColumns(null, "%", "ime_tabele", "%");
ResultSet rs = md.getPrimaryKeys(null, "%", "ime_tabele");
ResultSet rs = md.getIndexInfo(null, "%", "ime_tabele", false, true);
ResultSet rs = md.getProcedures("baza", null, "%");
rs = md.getProcedureColumns("%", null, "procedura", "%");
cmysql("com.mysql.jdbc.Driver", "jdbc:mysql://localhost:3306/db")
cmssql("com.microsoft.jdbc.sqlServer.SQLServerDriver",
"jdbc.microsoft.sqlServer://localhost:1433/db")
coracle("oracl.jdbcDriver.OrcleDriver", "jdbc.oracle:thin@localhost:1521:db")

1. Data je ema:
Student(indeks int primary key,
ime varchar(50),
prezime varchar(50),
adresa varchar(50),
godina int,
fakultet int,

maticniBroj char(13))
Fakultet(
fakultet int primary key,
nazivFakulteta varchar(50),
adresa varchar(50),
dekan int)
Nastavnik( nastavnik int primary key,
ime varchar(50),
prezime varchar(50),
adresa varchar(50),
fakultet int,
maticniBroj char(13))
/*
a. Koristei Java okruenje napraviti spisak svih ljudi (studenata i nastavnika) koji
sadri maticniBroj, ime i prezime koji se pojavljuju na fakultetu koji se zove
Elektrotehniki fakultet.
*/
static string user = "username";
static string password = "pass";
static string driver = "org.gjt.mm.mysql.Driver";
static string url = "jdbc:mysql://localhost:3306/Nastava";
public void ListOfPeople() {
Connection kon = null;
try {
Class.forName(driver);
kon =DriverManager.getConnection(url, korisnik, sifra);
Statement iskaz = null;
iskaz = kon.createStatement();
// prvi nacin
String upitFakulteti = "SELECT fakultet FROM Fakultet WHERE {fn
lcase(nazivFakulteta)} LIKE 'elektrotehni_ki fakultet'";
ResultSet faks = iskaz.executeQuery(upitFakulteti);
String upitPeople = "SELECT s.ime, s.prezime, s.maticniBroj, s.fakultet FROM
Student s UNION SELECT n.ime, n.prezime, n.maticniBroj, n.fakultet FROM Nastavnik n";
ResultSet people = iskaz.executeQuery(upitPeople);
int i = 0;
while (faks.next()) {
int faksID_F = faks.getInt("fakultet");
while (people.next()) {
int faksID_P = people.getInt("fakultet");

if (faksID_F == faksID_P) {
i++;
String ime = people.getString("ime");
String prezime = people.getString("prezime");
String maticni = people.getString("maticniBroj");
System.out.println(maticni + " - " + prezime + " " + ime);
}
}
}
if (i == 0) System.out.println("Nema niko sa ETFa.");
}
catch (Exception exc) { exc.printStackTrace(); }
finally { kon.close(); }
}
// drugi nacin
String upitFakulteti = "SELECT fakultet FROM Fakultet WHERE {fn lcase(nazivFakulteta)}
LIKE 'elektrotehni_ki fakultet'";
ResultSet faks = iskaz.executeQuery(upitFakulteti);
int i = 0;
while (faks.next()) {
int faksID_F = faks.getInt("fakultet");
String upitPeople = "SELECT s.ime, s.prezime, s.maticniBroj, s.fakultet FROM Student
s WHERE s.fakultet = " + faksID_F + "UNION SELECT n.ime, n.prezime, n.maticniBroj,
n.fakultet FROM Nastavnik n WHERE f.fakultet = " + faksID_FM;
ResultSet people = iskaz.executeQuery(upitPeople);
while (people.next()) {
i++;
String ime = people.getString("ime");
String prezime = people.getString("prezime");
String maticni = people.getString("maticniBroj");
System.out.println(maticni + " - " + prezime + " " + ime);
}
}
}
if (i == 0) System.out.println("Nema niko sa ETFa.");

// treci nacin
String upitPeople = "SELECT s.ime, s.prezime, s.maticniBroj, s.fakultet FROM Student s
JOIN Fakultet F ON s.fakultet = F.fakultet WHERE {fn lcase(F.nazivFakulteta)} LIKE
'elektrotehni_ki fakultet' UNION SELECT n.ime, n.prezime, n.maticniBroj, n.fakultet
FROM Nastavnik n JOIN Fakultet F ON n.fakultet = F.fakultet WHERE {fn

lcase(F.nazivFakulteta)} LIKE 'elektrotehni_ki fakultet'";


ResultSet people = iskaz.executeQuery(upitPeople);

/*
b. Zadatak uraditi pod predpostavkom da su tabele Nastavnika i Fakulteta u bazi
Univerzitet koja je MSSQL a studenata u bazi Nastava koja je u MySQL-u.
*/
static string user1 = "username";
static string password1 = "pass";
static string driver1 = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
static string url1 = "jdbc:sqlserver://localhost:3306/Univerzitet";
static string user2 = "username";
static string password2 = "pass";
static string driver2 = "org.gjt.mm.mysql.Driver";
static string url2 = "jdbc:mysql://localhost:3306/Nastava";
public void ListOfPeople() {
Connection kon1 = null;
//MSSQL - Nastavnik, Fakultet
Connection kon2 = null;
//MySQL - Student
try {
Class.forName(driver1);
kon1 = DriverManager.getConnection(url1, korisnik1, sifra1);
Statement iskaz1 = null;
iskaz1 = kon1.createStatement();
Class.forName(driver2);
kon2 = DriverManager.getConnection(url2, korisnik2, sifra2);
Statement iskaz2 = null;
iskaz2 = kon2.createStatement();
String upitFakulteti = "SELECT fakultet FROM Fakultet WHERE {fn
lcase(nazivFakulteta)} LIKE 'elektrotehni_ki fakultet'";
ResultSet faks = iskaz1.executeQuery(upitFakulteti);
String upitProf = "SELECT n.ime, n.prezime, n.maticniBroj, n.fakultet FROM
Nastavnik n";
ResultSet prof = iskaz1.executeQuery(upitProf);
String upitStud = "SELECT n.ime, n.prezime, n.maticniBroj, n.fakultet FROM
Nastavnik n";
ResultSet stud = iskaz2.executeQuery(upitStud);

int i = 0;
while (faks.next()) {
int faksID_F = faks.getInt("fakultet");
while (prof.next()) {
int faksID_P = prof.getInt("fakultet");
if (faksID_F == faksID_P) {
i++;
String ime = prof.getString("ime");
String prezime = prof.getString("prezime");
String maticni = prof.getString("maticniBroj");
System.out.println(maticni + " - " + prezime + " " + ime);
}
}
while (stud.next()) {
int faksID_P = stud.getInt("fakultet");
if (faksID_F == faksID_P) {
i++;
String ime = stud.getString("ime");
String prezime = stud.getString("prezime");
String maticni = stud.getString("maticniBroj");
System.out.println(maticni + " - " + prezime + " " + ime);
}
}
}
if (i == 0) System.out.println("Nema niko sa ETFa.");
}
catch (Exception exc) { exc.printStackTrace(); }
finally {
kon1.close();
kon2.close();
}
}
/*
c. Napraviti spisak nastavnika iji se podaci nalaze u tabeli studenata.
*/
static string user = "username";
static string password = "pass";
static string driver = "org.gjt.mm.mysql.Driver";
static string url = "jdbc:mysql://localhost:3306/Nastava";
public void ListOfStudentTeacher() {
Connection kon = null;

try {
Class.forName(driver);
kon = DriverManager.getConnection(url, korisnik, sifra);
Statement iskaz = null;
iskaz = kon.createStatement();
String upit = "SELECT * FROM {oj Nastavnici n INNER JOIN Students s ON
n.maticniBroj = s.maticniBroj} ";
ResultSet studTeachers = iskaz.executeQuery(upit);
//...
}
catch (Exception exc) { exc.printStackTrace(); }
finally { kon.close(); }
}
/*
d. Napraviti spisak studenata koji nisu pridrueni ni jednom fakultetu.
*/
/*
e. U bazi podataka Nastava formirati tabelu Nastavnici istog opisa i prepii podatke
svih nastavnika.
*/
static string user = "username";
static string password = "pass";
static string driver = "org.gjt.mm.mysql.Driver";
static string url = "jdbc:mysql://localhost:3306/Nastava";
public void CopyNastavnike() {
Connection kon = null;
try {
Class.forName(driver);
kon = DriverManager.getConnection(url, korisnik, sifra);
Statement iskaz = null;
iskaz = kon.createStatement();
iskaz.executeUpdate("NastavnikCopy( nastavnik int primary key, ime
varchar(50), prezime varchar(50), adresa varchar(50), fakultet int,
maticniBroj
char(13))");
String upitProf = "SELECT n.ime, n.prezime, n.maticniBroj, n.fakultet FROM
Nastavnik n";
ResultSet prof = iskaz.executeQuery(upitProf);
String ubaci = "INSERT INTO NastavnikCopy(nastavnik, ime, prezime, adresa,

fakultet, maticniBroj) VALUES(?, ?, ?, ?, ?, ?)";


PreparedStatement pi = kon.prepareStatement(ubaci);
int i = 0;
while (prof.next()) {
pi.clearParametres();
pi.setInt(1, prof.getInt("nastavnik"));
pi.setString(2, prof.getString("ime"));
pi.setString(3, prof.getString("prezime"));
pi.setString(4, prof.getString("adresa"));
pi.setInt(5, prof.getInt("fakultet"));
pi.setString(6, prof.getString("maticniBroj"));
i += pi.executeUpdate();
}
System.out.println("Broj azuriranih: " + i);
}
catch (Exception exc) { exc.printStackTrace(); }
finally { kon.close(); }
}
/*
f. Data je baza Nastava koja ima nepoznat broj tabela. Napisati program u Javi koji e
formirati istu bazu podataka (tabele, atribute i primarne kljueve). Napii metodu copy
koja e kopirati tabele jedne baze u tabele druge baze.
*/
static string user = "username";
static string password = "pass";
static string driver = "org.gjt.mm.mysql.Driver";
static string url = "jdbc:mysql://localhost:3306/Nastava";
static string url2 = "jdbc:mysql://localhost:3306/NastavaCopy";
public void CopyDB(Connection kon) {
try {
DatabaseMetaData dbmd = kon.getMetaData();
Statement iskaz = null;
iskaz = kon.createStatement();
iskaz.executeUpdate("CREATE DATABASE NastavniciCopy");
ResultSet tables = dbmd.getTables("Nastava", "%", "%", "TABLE")
Class.forName(driver);
kon2 = DriverManager.getConnection(url2, korisnik, sifra);
Statement iskaz2 = null;
iskaz2 = kon2.createStatement();

while (tables.next()){
//za svaku tabelu dobavimo kolone i dodajemo ih u create table
String imeTabele = tables.getString(3);
String upit = "CREATE TABLE " + imeTabele + "(";
ResultSet columns = dbmd.getColumns(null, "%", imeTabele, "%");
ResultSet pks = dbmd.getPrimaryKeys("Nastava", "%", imeTabele);
while (columns.next()) {
String colName = kolone.getString("COLUMN_NAME");
String datatype = kolone.getString("TYPE_NAME");
int datasize = kolone.getInt("COLUMN_SIZE");
int nullable = kolone.getInt("NULLABLE");
String nul;
if (nullable == 1) nul = "NULL";
else nul = "NOT NULL";
if (datatype == int) upit.concat(colName + " int " + nul);
else upit.concat(colName + " " + datatype + "(" + datasize + ") " + nul);
if (columns.next()) upit.concat(",");
}
upit.concat(", PRIMARY KEY (" + pks.getString("COLUMN_NAME") + ")");
upit.concat(");");
iskaz2.executeUpdate(upit);
}
}
catch (Exception exc) { exc.printStackTrace(); }
}
public void copyPodatke
{
Connection kon1 = null;
Connection kon2 = null;
try {
//konektujemo se na baze
Class.forName(driver);
kon1 = DriverManager.getConnection(url, korisnik, sifra);
Statement iskaz = null;
iskaz = kon.createStatement();
kon2 = DriverManager.getConnection(url2, korisnik, sifra);
Statement iskaz2 = null;
iskaz2= kon2.createStatement();

DatabaseMetaData dbmd = kon1.getMetaData();


ResultSet tables = dbmd.getTables("Nastava", "%", "%", "TABLE")
//prolazimo kroz sve tabele u bazi
while (tables.next()) {
String imeTabele = tables.getString(3);
String upit = "SELECT * FROM " + imeTabele;
ResultSet podaci = iskaz1.executeQuery(upit); //podaci koje trebamo
kopirati
String ubaci = "INSERT INTO " + imeTabele " VALUES(";
ResultSet columns = dbmd.getColumns(null, "%", imeTabele, "%");
//dobavimo za svaku tabelu koliko ima kolona i kojeg su tipa
String[] koloneTipovi = null;
int k = 0;
while (columns.next()) {
ubaci.concat("?");
koloneTipovi[k] = columns.getString("TYPE_NAME");
if (columns.next()) ubaci.concat(",");
else ubaci.concat(")");
k++;
}
PreparedStatement pi = kon2.prepareStatement(ubaci);
//imamo prepared statement i kopiramo podatke
int i = 0;
while (podaci.next()) {
pi.clearParametres();
for (int j = 0; j <= k; j++) {
if(koloneTipovi[j] == "int")
pi.setInt(j+1, podaci.getInt(j+1));
else if (koloneTipovi[j] == "char")
pi.setString(j+1, podaci.getString(j+1));
}
i += pi.executeUpdate();
}
System.out.println("Broj azuriranih: " + i);
}
}
catch (Exception exc) { exc.printStackTrace(); }
finally { kon1.close(); kon2.close(); }
}

Вам также может понравиться