You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by "Henri Yandell (JIRA)" <ji...@apache.org> on 2006/07/19 08:39:14 UTC
[jira] Commented: (DBUTILS-14) [dbutils] fillPreparedStatement
[ http://issues.apache.org/jira/browse/DBUTILS-14?page=comments#action_12422045 ]
Henri Yandell commented on DBUTILS-14:
--------------------------------------
Did you find that VARCHAR didn't work for a database?
The problem with your method is that the API doesn't have any knowledge of the Class valueType parameter.
> [dbutils] fillPreparedStatement
> -------------------------------
>
> Key: DBUTILS-14
> URL: http://issues.apache.org/jira/browse/DBUTILS-14
> Project: Commons DbUtils
> Issue Type: Improvement
> Affects Versions: 1.0
> Environment: Operating System: other
> Platform: Other
> Reporter: john gant
> Priority: Minor
>
> I am currently using release 1.0 and ran across bug addressed by dgraham
> (http://svn.apache.org/viewcvs.cgi/jakarta/commons/proper/dbutils/trunk/src/java/org/apache/commons/dbutils/QueryRunner.java?rev=141728&view=markup).
> I have a section of code I wrote as a workaround. Although this is just a simple
> method, it has the internals needed to more definitively insert null values.
> This method is not complete for all types, but was complete enough for my use.
> private void fillPreparedStatement(PreparedStatement ps, Object value, Class
> valueType, int position)
> throws SQLException, InvalidObjectException {
> if (valueType == null) {
> throw new InvalidObjectException("Type cannot be null at the same
> time value is null");
> }
> else {
> if (valueType.equals(Double.class)) {
> if (value != null) {
> ps.setDouble(position, ((Double) value).doubleValue());
> }
> else {
> ps.setNull(position, Types.NUMERIC);
> }
> }
> else if (valueType.equals(Integer.class)) {
> if (value != null) {
> ps.setInt(position, ((Integer) value).intValue());
> }
> else {
> ps.setNull(position, Types.NUMERIC);
> }
> }
> else if (valueType.equals(Long.class)) {
> if (value != null) {
> ps.setLong(position, ((Long) value).longValue());
> }
> else {
> ps.setNull(position, Types.NUMERIC);
> }
> }
> else if (valueType.equals(Float.class)) {
> if (value != null) {
> ps.setFloat(position, ((Float) value).floatValue());
> }
> else {
> ps.setNull(position, Types.NUMERIC);
> }
> }
> else if (valueType.equals(String.class)) {
> if (value != null) {
> ps.setString(position, (String) value);
> }
> else {
> ps.setNull(position, Types.VARCHAR);
> }
> }
> else if (valueType.equals(Timestamp.class)) {
> if (value != null) {
> ps.setTimestamp(position, (Timestamp) value);
> }
> else {
> ps.setNull(position, Types.TIMESTAMP);
> }
> }
> }
> Obviously the preparedStatement is passed into the method, along with arrays
> containing the value, their intential types (as class objects) and the position
> in the preparedStatement. I am sure this can be adapted easily to accomodate all
> types and in the proper form. I understand this may be inactive at the moment,
> but I'm just submitting a suggestion for the future.
> Thanks,
> John Gant
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org