import java.io.*; import java.sql.*; /** Ohjelmassa käsitellään tekstimuotoista tietokantaa, jonka DNS-nimi on JDBCTekstiHenkilot. Kyseessä on tekstitietokanta, jossa kentät on erotettu toisistaan puolipisteellä. Esimerkiksi Windowsissa CSV-ajuri osaa sitä lukea. Muistettava asettaa ODBC-yhteys kuntoon. Windows NT: Control Panel / 32 ODBC. Windows 2000: Control Panel / Administrative Tool / Data Sources (ODBC) Lisäksi on valittava oikea Driver: Microsoft Text Driver (*.csv, *.txt) Valitaan System DNS ja asetetaan siellä ajurin valinnan jälkeen: a) Data Source Name: Esimerkissä JDBCTekstiHenkilot b) Valitaan hakemisto, jossa tämä tiedosto sijaitsee tiedosto c) Määritellään tähän hakemistoon scheme.ini, joka kuvaa formaatin: Alkuperäinen datatiedosto noudattaa seuraavaa formaattia: 1;"Aku Ankka";"Ankkalinna 15";"aku@ankkalinna.com";50 2;"Tupu Ankka";"Ankkalinna 15";"tupu@ankkalinna.com";13 Schema.ini-tiedosto määrittelee tekstitiedoston rakenteen: [Henkilotiedot.txt] ColNameHeader=False Format=Delimited(;) MaxScanRows=25 CharacterSet=OEM Col1=ID Integer Col2=NIMI Char Width 30 Col3=OSOITE Char Width 30 Col4=SPOSTI Char Width 30 Col5=IKA Integer Muutokset SQL-lauseisiin - lisätätävä tiedoston nimi DSN-nimen sijasta: Henkilotiedot.txt Esim. "select * from Henkilotiedot.txt", "INSERT INTO Henkilotiedot.txt (Nimi,Osoite, SPosti, Ika) VALUES ()" Päivitystä UPDATE - ei tueta! Kentälle annettava id itse */ public class JDBCTekstiTesti { static String ajuri = "sun.jdbc.odbc.JdbcOdbcDriver"; static String url = "jdbc:odbc:JDBCTekstiHenkilot"; // IDS:n JDBC 2.0-ajurin käyttö // static String url = "jdbc:ids://localhost:12/conn?dsn='JDBCHenkilot'"; // static String ajuri = "ids.sql.IDSDriver"; private static String kysely[] = { "INSERT INTO Henkilotiedot.txt (ID, Nimi,Osoite, SPosti, Ika)" + " VALUES (22, 'Jaska Jokunen','Jokusentie 4as10'," + "'jaska@jokunen.net','14')", "UPDATE Henkilotiedot.txt henkilotiedot SET sposti='jaska@jokusen.verkko.net'" + " WHERE nimi='Jaska Jokunen'" }; private static String select[] = { "select * from Henkilotiedot.txt", "select * from Henkilotiedot.txt where nimi like ?" }; //************** Pääohjelma ************************** public static void main(String[] args){ // throws SQLException { // **** Muodostetaan yhteys tietokontaan (Connection-olio) ************ Connection con = HenkiloTietokanta.yhdista(ajuri, url); if (con == null) { System.exit(0); } int palautus=0; //**** Kannan tietojen muokkaus (sql insert/update) ****** try { palautus = HenkiloTietokanta.paivita(con, kysely[0]); // palautus = HenkiloTietokanta.paivita(con, kysely[1]); } catch (SQLException sqle) { while (sqle != null) { System.out.println(sqle.toString()); sqle = sqle.getNextException(); } } catch (Exception sqle) { System.out.println(sqle.toString()); } System.out.println("Tietokantaan tehtiin " + palautus + " päivitystä"); //**** Kysely (sql select)****** try { System.out.println("Kysely:" + select[0]); Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery(select[0]); HenkiloTietokanta.kysely(rs); stmt.close(); } catch (SQLException sqle) { while (sqle != null) { System.out.println(sqle.toString()); sqle = sqle.getNextException(); } } //**** Kysely - Prepared Statement ********** // Parametri tuodaan komentorivillä try { PreparedStatement pstmt = con.prepareStatement(select[1]); pstmt.setString(1, args[0]); ResultSet rs = pstmt.executeQuery(); HenkiloTietokanta.kysely(rs); pstmt.close(); } catch (ArrayIndexOutOfBoundsException ae) { System.out.println("Anna hakunimi komentorivillä!"); } catch (SQLException sqle) { while (sqle != null) { System.out.println(sqle.toString()); sqle = sqle.getNextException(); } } // Suljetaan yhteys lopuksi try { if (con != null) con.close(); } catch (SQLException e) { } } }