[
https://issues.apache.org/jira/browse/DBUTILS-41?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Dennis Lundberg updated DBUTILS-41:
-----------------------------------
Description:
When inserting or updating a value to null on timestamp (date) field in a
PostgreSQL database, the following error is returned:
column "foo" is of type timestamp without time zone but expression is of type
character varying
Overriding the fillStatement method by doing something like:
{code}
QueryRunner run = new QueryRunner() {
/* (non-Javadoc)
* @see
org.apache.commons.dbutils.QueryRunner#fillStatement(java.sql.PreparedStatement,
java.lang.Object[])
*/
@Override
protected void fillStatement(PreparedStatement stmt, Object[] params)
throws SQLException {
if (params == null) {
return;
}
for (int i = 0; i < params.length; i++) {
if (params[i] != null) {
stmt.setObject(i + 1, params[i]);
} else {
// VARCHAR works with many drivers regardless
// of the actual column type (Maybe not with Postgres 8.x). Oddly,
NULL and
// OTHER don't work with Oracle's drivers.
stmt.setNull(i + 1, Types.NULL);
}
}
}
};
{code}
work, but it will have a problem if other databases are used instead of
PostgreSQL.
was:
When inserting or updating a value to null on timestamp (date) field in a
PostgreSQL database, the following error is returned:
column "foo" is of type timestamp without time zone but expression is of type
character varying
Overriding the fillStatement method by doing something like:
QueryRunner run = new QueryRunner() {
/* (non-Javadoc)
* @see
org.apache.commons.dbutils.QueryRunner#fillStatement(java.sql.PreparedStatement,
java.lang.Object[])
*/
@Override
protected void fillStatement(PreparedStatement stmt, Object[] params)
throws SQLException {
if (params == null) {
return;
}
for (int i = 0; i < params.length; i++) {
if (params[i] != null) {
stmt.setObject(i + 1, params[i]);
} else {
// VARCHAR works with many drivers regardless
// of the actual column type (Maybe not with Postgres 8.x). Oddly,
NULL and
// OTHER don't work with Oracle's drivers.
stmt.setNull(i + 1, Types.NULL);
}
}
}
};
work, but it will have a problem if other databases are used instead of
PostgreSQL.
> Inserting/updating null in a timestamp field with PostgreSQL 8.x
> ----------------------------------------------------------------
>
> Key: DBUTILS-41
> URL: https://issues.apache.org/jira/browse/DBUTILS-41
> Project: Commons DbUtils
> Issue Type: Bug
> Affects Versions: 1.1
> Environment: Linux CentOS 2.6.18-8.1.4.el5, PostgreSQL 8.2.4, Java
> 1.6.0_01
> Reporter: Malcolm McLean
> Priority: Minor
>
> When inserting or updating a value to null on timestamp (date) field in a
> PostgreSQL database, the following error is returned:
> column "foo" is of type timestamp without time zone but expression is of type
> character varying
> Overriding the fillStatement method by doing something like:
> {code}
> QueryRunner run = new QueryRunner() {
> /* (non-Javadoc)
> * @see
> org.apache.commons.dbutils.QueryRunner#fillStatement(java.sql.PreparedStatement,
> java.lang.Object[])
> */
> @Override
> protected void fillStatement(PreparedStatement stmt, Object[] params)
> throws SQLException {
> if (params == null) {
> return;
> }
> for (int i = 0; i < params.length; i++) {
> if (params[i] != null) {
> stmt.setObject(i + 1, params[i]);
> } else {
> // VARCHAR works with many drivers regardless
> // of the actual column type (Maybe not with Postgres 8.x).
> Oddly, NULL and
> // OTHER don't work with Oracle's drivers.
> stmt.setNull(i + 1, Types.NULL);
> }
> }
> }
> };
> {code}
> work, but it will have a problem if other databases are used instead of
> PostgreSQL.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.