|
Commons Digester example source code file (RowInserterRule.java)
The Commons Digester RowInserterRule.java source code
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import java.util.Map;
import java.util.Iterator;
/**
* See Main.java.
*/
public class RowInserterRule extends org.apache.commons.digester.Rule {
private java.sql.Connection conn;
public RowInserterRule(java.sql.Connection conn) {
this.conn = conn;
}
/**
* This method is invoked when the start tag for an xml element representing
* a database row is encountered. It pushes a new Row instance onto the
* digester stack (rather like an ObjectCreateRule) so that column data
* can be stored on it.
*/
public void begin(String namespace, String name, org.xml.sax.Attributes attrs) {
digester.push(new Row());
}
/**
* This method is invoked when the end tag for an xml element representing
* a database row is encountered. It pops a fully-configured Row instance
* off the digester stack, accesses the object below it on the stack (a
* Table object) to get the tablename, then does an SQL insert). Actually,
* here we just print out text rather than do the sql insert, but the
* real implementation should be fairly simple.
* <p>
* Note that after this rule completes, the row/column information is
* <i>discarded, ie this rule performs actions as the input is
* parsed</i>. This contrasts with the more usual way digester is used,
* which is to build trees of objects for later use. But it's a perfectly
* valid use of Digester.
*/
public void end(String namespace, String name) {
Row row = (Row) digester.pop();
Table table = (Table) digester.peek();
// Obviously, all this would be replaced by code like:
// stmt = conn.prepareStatement();
// stmt.setString(n, value);
//
// Many improvements can then be implemented, such as using the
// PreparedStatement.getParameterMetaData method to retrieve
// retrieve parameter types, etc.
StringBuffer colnames = new StringBuffer();
StringBuffer colvalues = new StringBuffer();
for(Iterator i = row.getColumns().iterator(); i.hasNext();)
{
Row.Column column = (Row.Column) i.next();
if (colnames.length() > 0)
{
colnames.append(", ");
colvalues.append(", ");
}
colnames.append("'");
colnames.append(column.getName());
colnames.append("'");
colvalues.append("'");
colvalues.append(column.getValue());
colvalues.append("'");
}
StringBuffer buf = new StringBuffer();
buf.append("insert into ");
buf.append(table.getName());
buf.append(" (");
buf.append(colnames.toString());
buf.append(") values (");
buf.append(colvalues.toString());
buf.append(")");
// here the prepared statement would be executed....
System.out.println(buf.toString());
}
}
Other Commons Digester examples (source code examples)Here is a short list of links related to this Commons Digester RowInserterRule.java source code file: |
| ... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.