Let Me Paint You a Picture-Lloyd	December issue			Java Pro magazine	2001 Fawcette Technical Publications



In on the Action
The SelectTableAction class, which illustrates my use of the Statement object and Type class, creates a SELECT command String from the variables in the HTTP request.

import java.io.*;
import java.sql.*;
import java.util.*;
import sLc.user.*;

public class SelectTableAction extends 
	TableServletAction {

	public SelectTableAction(
		String newName) {
		super(newName);
	}
	public SelectTableAction(
		String newName,
		UserInfo newUserInfo) {
		super(newName,newUserInfo);
	}

	public void perform()
		throws ServletActionException{
		Statement statement = 
			userInfo.getStatement();
		StringBuffer sqlBuffer = 
			new StringBuffer(2048);
		String key;
		String value;
		Enumeration keys = 
			tableInfo.fields.keys();
		key = "exID";
		value = request.getParameter(key);
		if (value==null) {
			throw new ServletActionException(
				"Request did not contain a value 
				for the "+key+" field"
			);
		}
		else {
			tableInfo.fields.put(key,value);
		};
		sqlBuffer.append("SELECT ");
		while (keys.hasMoreElements()) {
			sqlBuffer.append(
				(String)keys.nextElement());
			if (keys.hasMoreElements()) 
				sqlBuffer.append(", ");
		};
		sqlBuffer.append(" FROM ");
		sqlBuffer.append(
			tableInfo.getTableName());
		sqlBuffer.append(
			" WHERE ("+key+"='");
		sqlBuffer.append(
			tableInfo.fields.get(key));
		sqlBuffer.append("')");
		try {
			ResultSet results = 
				statement.executeQuery(
				sqlBuffer.toString());
			ResultSetMetaData metaData = 
				results.getMetaData();
			ServletOutputStream out = 
				response.getOutputStream();
			results.next();
			keys = tableInfo.fields.keys();
			PrintWriter outWriter = 
				new PrintWriter(out);
			while (keys.hasMoreElements()) {
				String fieldName = 
					(String)keys.nextElement();
				int fieldIndex = 
					results.findColumn(fieldName);
				int fieldType = 
					metaData.getColumnType(
					fieldIndex);
				outWriter.print(
					"<"+fieldName+">");
				String fieldValue = "";
				BufferedReader fieldReader;
				switch (fieldType) {
					case java.sql.Types.TINYINT:
						
					case java.sql.Types.BIT:
						fieldValue = 
						results.getString(
						fieldName);
					outWriter.println(fieldValue);
					break;
					case java.sql.Types.JAVA_OBJECT:
						
					case java.sql.Types.STRUCT:
						fieldValue = ""; break;
					case java.sql.Types.BLOB:
						fieldValue = ""; break;
					case java.sql.Types.CLOB:
						Clob clob = 
						results.getClob(fieldIndex);
					fieldReader = 
						new BufferedReader(
						clob.getCharacterStream());
					try {
						while (fieldValue!=null) {
							fieldValue = 
								fieldReader.readLine();
							if (fieldValue!=null) {
								outWriter.println(
									fieldValue);
							};};}
					catch (IOException e) {
					};
				};
			};
			results.close();
			statement.close();
			outWriter.close();
		}
		catch (SQLException sqle) {
			throw new 
				ServletActionException(
					"SQL exception while selecting 
					field.\r\nSQL was: 
					"+sqlBuffer.toString()+
					"\r\n"+sqle.getMessage());
		}
		catch (IOException ioe) {
			throw new ServletActionException(
				"IO exception while selecting 
				field.\r\n"+ioe.getMessage());
		};
	};

	public void addField(String fName) {
		tableInfo.fields.put(fName,"");
	};

	public void removeField(
		String fieldName) {
		tableInfo.fields.remove(fieldName);
	};

	public String getField(
		String fieldName) {
		return (String)tableInfo.
			fields.get(fieldName);
	};
}

	
