Moduļa 5.3. vingrinājumi

exercise37: Latviešu burtu pārbaude

  • Izveidot savā Oracle shēmā (teiksim ar SQL Plus) tabulu "vardi":
    vards CHAR(30)num INT
  • Pārveidot WordCompare.java no 35. uzdevuma tā, lai šī klase nerakstītu datus par vārdiem un parādīšanās reižu skaitu failā, bet gan datubāzes tabulā "vardi".
  • Rakstīšanu datubāzē veikt ar PreparedStatement, piemēram,
    pstmt = con.PrepareStatement("INSERT INTO vardi (vards, num) VALUES (?,?)"); 
    pstmt.setString(1, key); 
    pstmt.setInt(2, value); 
    
  • Izveidot citu Javas aplikāciju, kura nolasa no šīs datubāzu tabulas un drukā uz standartizvades HTML tabulu ar šiem vārdiem un to parādīšanās reižu skaitu "Baltic Windows" kodējumā. Faila izskats ir apmēram sekojošs:
    <html>
    <head>
    <title>"Mērnieku laiku" vārdi</title>
    <meta http-equiv="Content-type" content="text/html; charset=windows-1257" />
    </head>
    <body>
    <table border="1">
    <tr><td>Abas</td><td>1</td></tr>
    ...
    </table>
    </body>
    </html>
    
  • Ja visi vārdi ir pareizi noglabājušies un nolasīti, tad Jūsu uzdevums ir sekmīgi beidzies. Ja kaut kas slikts noticis ar latviešu burtiem, tad varat mēģināt kādu no sekojošām stratēģijām:
  • Sakonfigurēt Oracle serveri tā, lai tas atbalstītu unikoda burtus (Visticamāk, ka šajā jomā viss iespējamais jau ir izdarīts. Turpretī MySQL vispār neatbalsta Unikodu, tāpēc šai datubāzu sistēmai šī pieeja atkrīt.)
  • Metožu PreparedStatement.setString() un ResultSet.getString() vietā mēģināt lietot metodes setBytes() un getBytes(). Parūpēties, lai baitu masīvi tiktu iegūti no stringiem un pārveidoti atpakaļ par stringiem, izmantojot "Cp1257" kodējumu.

exercise38: DB API priekš biznesa komponentēm

Mūsu CMS projektā (sk. 36. uzdevumu) ir klase User, kuras kods ir apmēram šāds:

public class User {

    private String firstName;
    private String lastName;
    private Directory directory;

    public User (String fName, String lName) {
        firstName = fName;
        lastName = lName;
    }

    ...

Pievienot klasei User arī "private int id" lauku - unikālu šī lietotāja identifikatoru. Izveidot publisku klasi Database. Implementēt šajā klasē metodes:

public Database() throws SQLException

Konstruktors piekonektējas datubāzei ar Jūsu shēmas vārdu.

public void close() throws SQLException

Aizver datubāzes konekciju (objekts Database kļūst nelietojams)

public void addUserToDB(int id, String fName, String lName, int directory_id) 
    throws DublicateIDException

Metodes uzvedība: tā pievieno lietotāju ar norādīto id'u, vārdu, uzvārdu un direktorijas id'u datubāzes tabulai "user" ar atbilstošiem datu laukiem. Ja lietotājs ar tādu id'u tur jau ir priekšā, tad met izņēmumu.

public void deleteUser(int id) throws RecordNotFoundException

Izmet ierakstu; ja tāda nav, tad rada izņēmumu

public void updateUser(int id, String fName, StringlName, int directory_id)
    throws RecordNotFoundException

Izlabo ierakstu atbilstošajam id'am

public User getUser(int id) throws RecordNotFoundException

Atgriež no DB vajadzīgo lietotāju, uzkonstruē objekta instanci un inicializē visus viņa mainīgos Izveidot klasē "Database" metodi "main()", kura izsauc un notestē visas šīs metodes.