
2.4. Текст сервлетов
Листинг 3. DataObject.java
package kurs_rab;
import java.sql.*;
public abstract class DataObject {
protected String selectStatement;
protected String searchStatement;
protected String insertStatement;
protected String updateStatement;
protected String deleteStatement;
public int id;
public void showSelectStatement()
{
System.out.println(this+".selectStatement = "+this.selectStatement);
}
protected DataObject[] parseData(ResultSet rs) throws SQLException
{
// возвращаем пустой массив
return new DataObject[0];
}
protected static int getRecordCount(ResultSet rs) throws SQLException
{
int cnt;
// переставляем курсор на последнюю запись набора
if(rs.last())
{
cnt=rs.getRow();
rs.beforeFirst();
return cnt;
}
else
{
return 0;
}
}
public DataObject select(Connection conn,int id) throws SQLException
{
PreparedStatement ps=conn.prepareStatement( selectStatement,ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
ps.setInt(1, id);
DataObject obj=parseData(ps.executeQuery())[0];
ps.close();
return obj;
}
}
Листинг 4. Client.java
package kurs_rab;
import java.util.*;
import java.sql.*;
public class Tovar extends DataObject
{
public String Name;
public String Last;
public String Tel;
public Tovar()
{
this.selectStatement="select id, Name, Last, tel, In, Out, Room from Clients where id=?";
this.searchStatement="select id, Name, Last, tel, In, Out, Room from Clients where 1=1";
this.insertStatement= "insert into clients (Name, Last, Tel, `In`, `Out`, Room, Tarif) values (?,?,?,`?`,`?`,?,?)";
}
@Override
protected Tovar[] parseData(ResultSet rs) throws SQLException
{
// вызываем getRecordCount для определения количества найденых записей
Tovar[] o=new Tovar[getRecordCount(rs)];
// последовательно просматриваем ResultSet
while (rs.next())
{
int i=rs.getRow()-1;
o[i]=new Tovar();
o[i].id=rs.getInt("id");
o[i].Name=rs.getString("Name");
o[i].Last=rs.getString("Last");
o[i].Tel=rs.getString("Tel");
o[i].In=rs.getString("In");
o[i].Out=rs.getString("Out");
o[i].Room=rs.getString("Room");
o[i].Tarif=rs.getString("Tarif");
}
return o;
}
public Tovar[] search(Connection conn, String Name,String Last,String Tel,String In,String Out,String Room) throws SQLException
{
String ss=this.searchStatement;
if (Name!=null)
{
//поиск по Client_ID по шаблону
ss=ss+" and `Client_Name` LIKE ?"/*+Client_Name+"'"*/;
}
if (Last!=null)
{
//поиск по Client_ID по шаблону
ss=ss+" and Client_Last_Name = ?"/*+Client_Last_Name+"'"*/;
}
if (Tel!=null)
{
//поиск по Client_ID по шаблону
ss=ss+" and Client_Phone_Number = ?"/*+Client_Phone_Number+"'"*/;
}
if (In!=null)
{
//поиск по Client_ID по шаблону
ss=ss+" and Date_In = ?"/*+Date_In+"'"*/;
}
if (Out!=null)
{
//поиск по Client_ID по шаблону
ss=ss+" and Date_Out = ?"/*+Date_Out+"'"*/;
}
if (Room!=null)
{
//поиск по Client_ID по шаблону
ss=ss+" and Room_Number = ?"/*+Room_Number+"'"*/;
}
System.out.printf(ss);
// создаем запрос
PreparedStatement ps=conn.prepareStatement(ss);
if (Name!=null)
{
ps.setString(i,Name);
i++;
}
if (Last!=null)
{
ps.setString(i,Last);
i++;
}
if (Tel!=null)
{
ps.setString(i,Tel);
i++;
}
if (In!=null)
{
ps.setString(i,In);
i++;
}
if (Out!=null)
{
ps.setString(i,Out);
i++;
}
if (Room!=null)
{
ps.setString(i,Room);
}
// выполняем запрос, вызываем метод обработки набора результатов
Tovar[] o=this.parseData(ps.executeQuery());
// закрывыем запрос
ps.close();
return o;
}
public void insert(Connection conn) throws SQLException
{
PreparedStatement ps=conn.prepareStatement(this.insertStatement);
if (this.Name!=null){ ps.setString(1,this.Name); }
else{ps.setNull(1, Types.VARCHAR);}
if (this.Last!=null){ ps.setString(2,this.Last); }
else{ps.setNull(2, Types.VARCHAR);}
if (this.Tel!=null){ ps.setString(3,this.Tel); }
else{ps.setNull(3, Types.VARCHAR);}
if (this.In!=null){ ps.setString(4,this.In); }
else{ps.setNull(4, Types.DATE);}
if (this.Out!=null){ ps.setString(5,this.Out); }
else{ps.setNull(5, Types.DATE);}
if (this.Room!=null){ ps.setString(6,this.Room); }
else{ps.setNull(6, Types.VARCHAR);}
if (this.Tarif!=null){ ps.setString(7,this.Tarif); }
else{ps.setNull(7, Types.INTEGER);}
ps.execute();
ps.close();
}
}