package membership; import java.sql.*; public class SubscriberRecord { private static final String userName = "HSimpson"; private static final String userPassword = "Doh"; // private static final String dbDriverName = // "oracle.jdbc.driver.OracleDriver"; // private static final String dbURL = // "jdbc:oracle:thin:@wraith:1521:csci"; private static final String dbDriverName = "sun.jdbc.odbc.JdbcOdbcDriver"; private static final String dbURL = "jdbc:odbc:MembersOnly"; // Constants defining acceptable properties of data private final static int NAMELENGTH = 30; private final static int MINAGE = 18; private final static int MAXAGE = 99; // Data members, matching both form fields and relational // database fields private String givenName; private String familyName; private String eMail; private int age; private String sex; private int id; public boolean isValid() { return (givenName != null) && (familyName != null) && (eMail != null) && (sex != null) && ((age >= MINAGE) && (age <= MAXAGE)); } public String getGivenName() { return givenName; } public void setGivenName(String aName) { givenName = null; if (aName == null) { return; } int len = aName.length(); if ((len < 1) || (len > NAMELENGTH)) { return; } givenName = aName; } public String getFamilyName() { return familyName; } public void setFamilyName(String aName) { familyName = null; if (aName == null) { return; } int len = aName.length(); if ((len < 1) || (len > NAMELENGTH)) { return; } familyName = aName; } public String getEmail() { return eMail; } public void setEmail(String aName) { eMail = null; if (aName == null) { return; } int len = aName.length(); if ((len < 1) || (len > NAMELENGTH)) { return; } eMail = aName; } public String getSex() { return sex; } public void setSex(String gender) { sex = null; // Tests work even if gender is null! if ("Male".equals(gender)) { sex = gender; } else if ("Female".equals(gender)) { sex = gender; } } public String getAge() { if(age==0) return null; else return Integer.toString(age); } public void setAge(String ageStr) { age = 0; try { int val = Integer.parseInt(ageStr); if ((val >= MINAGE) && (val <= MAXAGE)) { age = val; } } catch (Exception e) {} } public int getId() { return id; } public int createInDatabase() { int idnumber = -1; try { Class.forName (dbDriverName); Connection db = DriverManager.getConnection( dbURL, userName, userPassword); // First, get a new membership number. Statement stmt = db.createStatement(); String request = "select nextnumber from memnum where fortable='members'"; ResultSet rset = stmt.executeQuery(request); int value = 0; // // Should get a result! If not, database is corrupted! if (rset.next()) value = rset.getInt("NEXTNUMBER"); else { stmt.close(); return -1; } value++; // // Write back updated value request = "update memnum set nextnumber=" + value + " where fortable='members'"; stmt.executeUpdate(request); stmt.close(); // // Deal with membership record // PreparedStatement pstmt = db.prepareStatement( // "insert into members values( ?, ?, ?, ?, ?, ?)"); // pstmt.setInt(1, value); // pstmt.setString(2, givenName); // pstmt.setString(3, familyName); // pstmt.setString(4, eMail); // pstmt.setString(5, sex); // pstmt.setInt(6, age); //pstmt.executeUpdate(); Statement maStmt = db.createStatement(); String insertStr = "insert into members values (" + Integer.toString(value); insertStr = insertStr + ", '" + givenName; insertStr = insertStr + "', '" + familyName; insertStr = insertStr + "', '" + eMail; insertStr = insertStr + "', '" + sex; insertStr = insertStr + "', " + Integer.toString(age) + ")"; maStmt.executeUpdate(insertStr); maStmt.close(); idnumber = value; } catch (Exception e) { System.out.println("Exception " + e); } id = idnumber; return idnumber; } }