commons-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Rafael U. C. Afonso" <r.u.c.afo...@uol.com.br>
Subject Re: [DBUtils] SQL Server null - Not implemented (type is java.sql.Types.OTHER)
Date Tue, 06 Jul 2004 01:43:07 GMT
Hello:

I have a suggestion. We could create a interface called 
FillerStatement. This would have a only method: void 
fillStatement(PreparedStatement stmt, Object[] params). The 
basic implementation of this interface will work like 
fillStatement() now in QueryRunner. Like this:

public class BasicFillerStatement implements FillerStatement {

   public void fillStatement(PreparedStatement stmt, Object[] 
params) {
        if (params == null) {
            return;
        }

        for (int i = 0; i < params.length; i++) {
            if (params[i] != null) {
                stmt.setObject(i + 1, params[i]);
            } else {
                stmt.setNull(i + 1, Types.OTHER);
            }
        }
   }

}

We would have a SQLServerFillerStatement with solution that I 
used:

public class SQLServerFillerStatement implements 
FillerStatement {

   public void fillStatement(PreparedStatement stmt, Object[] 
params) {
        if (params == null) {
            return;
        }

        for (int i = 0; i < params.length; i++) {
           stmt.setObject(i + 1, params[i]);
        }
   }

}

And we would have a OracleFillerStatement, 
MySQLFillerStatement, FirebirdFillerStatement, and so on. In 
this form we could be a "personalized" way to attend any kind 
of database (or JDBC driver) features, mainly with null 
parameters.
How do we use it? In QueryRunner implementation we would had 
a attribute for FillerStatement. By default this attribute 
will implement BasicFillerStatement:

   private FillerStatement fillerStatement = new 
BasicFillerStatement();

And we would have a setFillerStatement() method:

   public void setFillerStatement(FillerStatement filler) {
      this.fillerStatement = filler;
   }

In update(), query() and batch() methods, it will call 
fillStatement() method from fillerStatement attribute:

   this.fillerStatement.fillStatement(stmt, params);
   
So, if I am using a SQLServer like database, We could do this:

   QueryRunner runner = new QueryRunner();
   runner.setFillerStatement(new SQLServerFillerStatement());

Well, what do you think?

Thanks,

Rafael Ubiratam Clemente Afonso
r.u.c.afonso@uol.com.br
---------------------------------
Where is Debug?
Debug is on the Table!

---------- Início da mensagem original -----------

      De: &quot;David Graham&quot; grahamdavid1980@yahoo.com
    Para: &quot;Jakarta Commons Users List&quot; commons-
user@jakarta.apache.org
      Cc: 
    Data: Mon, 5 Jul 2004 11:02:40 -0700 (PDT)
 Assunto: Re: [DBUtils] SQL Server null - Not implemented 
(type is  java.sql.Types.OTHER)

> It would be nice if every driver accepted null in setObject 
but I don't
> think that's the case.  If we could find a common way to 
set null
> parameters in DB2, Oracle, SQL Server, MySQL, and Postgres 
we could
> implement fillStatement to use it.  Until then, the 
QueryRunner subclass
> approach is the only solution.
> 
> David
> 
> 
> 
> --- "Rafael U. C. Afonso" <r.u.c.afonso@uol.com.br> wrote:
> > Hello:
> > 
> > I had a problem like related by Henri
> > Yandell (see
> >
> http://www.mail-archive.com/commons-
dev@jakarta.apache.org/msg42819.html),
> > but instead use Oracle I am using SQL
> > Server. When I try insert a Null
> > parameter in a Insert Query I get this
> > message: "Not implemented (type is
> > java.sql.Types.OTHER)". I am using
> > jTds driver, but MS official driver
> > has the same problem (But does not
> > explain about Types.Other).
> > I read original Source of jTds and I
> > see that this message above is thrown
> > from a method called
> > createParameterMapping() from
> > ParameterUtils class. I don't
> > understand why they made this, but
> > anyway it is a problem from driver,
> > not form QueryRunner.
> > My solution was create a QueryRunner
> > subclass, where I overridden
> > fillStatement() method like this:
> > 
> >             if (params == null) {
> >                 return;
> >             }
> > 
> >             for(int i = 0; i <
> > params.length; i++) {
> >                 stmt.setObject(i + 1,
> > params[i]);
> >             }
> > 
> > I don't verify if current parameter is
> > null or not. And this works.
> > What do you think?
> > 
> > Thanks,
> > 
> > Rafael Ubiratam Clemente Afonso
> > r.u.c.afonso@uol.com.br
> > ---------------------------------
> > Where is Debug?
> > Debug is on the Table!
> >  
> >
> 
______________________________________________________________
____________
> > Acabe com aquelas janelinhas que pulam na sua tela.
> > AntiPop-up UOL - ? gr?tis!
> > http://antipopup.uol.com.br/
> > 
> > 
> > 
> > ----------------------------------------------------------
-----------
> > To unsubscribe, e-mail: commons-user-
unsubscribe@jakarta.apache.org
> > For additional commands, e-mail: commons-user-
help@jakarta.apache.org
> > 
> > 
> 
> 
> 
> 	
> 		
> __________________________________
> Do you Yahoo!?
> New and Improved Yahoo! Mail - 100MB free storage!
> http://promotions.yahoo.com/new_mail 
> 
> ------------------------------------------------------------
---------
> To unsubscribe, e-mail: commons-user-
unsubscribe@jakarta.apache.org
> For additional commands, e-mail: commons-user-
help@jakarta.apache.org
> 
> 

 
__________________________________________________________________________
Acabe com aquelas janelinhas que pulam na sua tela.
AntiPop-up UOL - É grátis!
http://antipopup.uol.com.br/



---------------------------------------------------------------------
To unsubscribe, e-mail: commons-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-user-help@jakarta.apache.org


Mime
View raw message