I'm trying to get Simper working with MySQL and
I'm getting the following error
when I try to access my application (Tomcat 4.0.3
running on port 8080).
I guess it was caused from the difference of the
implementation of BIT(or BOOL) data type in MySQL.
MySql document said that "BIT BOOL These are
synonyms for TINYINT(1)". (cf.
http://www.mysql.org/documentation/mysql/bych
apter/manual_Reference.html#Column_types)
So when I execute "tableColumns.getInt
("DATA_TYPE")" in Simper.java, JDBC Driver doesnot
return "java.sql.Type.BIT" but "java.sql.Type.TinyINT
(=-6)".
If the table does not include any BIT(or BOOL) type
column, no errors appeared. Simper works well.
Is there any good idea?
<<<exception on Tomcat's console>>>
java.lang.IllegalStateException: Invalid sqlType: -6
at
org.netmeme.simper.Simper.getClassFromSQLType
(Simper.java:407)
at org.netmeme.simper.Simper.registerTable
(Simper.java:294)
at gourmet.MySimperInit.init
(MySimperInit.java:11)
at org.netmeme.simper.Simper.initEverything
(Simper.java:258)
at org.netmeme.simper.Simper.doFilter
(Simper.java:158)
at
org.apache.catalina.core.ApplicationFilterChain.inter
nalDoFilter(ApplicationFilterChain.java:213)
at
org.apache.catalina.core.ApplicationFilterChain.doFi
lter(ApplicationFilterChain.java:193)
at
org.apache.catalina.core.StandardWrapperValve.invo
ke(StandardWrapperValve.java:243)
at
org.apache.catalina.core.StandardPipeline.invokeNe
xt(StandardPipeline.java:566)
at
org.apache.catalina.core.StandardPipeline.invoke
(StandardPipeline.java:472)
at
org.apache.catalina.core.ContainerBase.invoke
(ContainerBase.java:943)
at
org.apache.catalina.core.StandardContextValve.invo
ke(StandardContextValve.java:190)
at
org.apache.catalina.core.StandardPipeline.invokeNe
xt(StandardPipeline.java:566)
at
org.apache.catalina.valves.CertificatesValve.invoke
(CertificatesValve.java:246)
at
org.apache.catalina.core.StandardPipeline.invokeNe
xt(StandardPipeline.java:564)
at
org.apache.catalina.core.StandardPipeline.invoke
(StandardPipeline.java:472)
at
org.apache.catalina.core.ContainerBase.invoke
(ContainerBase.java:943)
at
org.apache.catalina.core.StandardContext.invoke
(StandardContext.java:2343)
at
org.apache.catalina.core.StandardHostValve.invoke
(StandardHostValve.java:180)
at
org.apache.catalina.core.StandardPipeline.invokeNe
xt(StandardPipeline.java:566)
at
org.apache.catalina.valves.ErrorDispatcherValve.inv
oke(ErrorDispatcherValve.java:170)
at
org.apache.catalina.core.StandardPipeline.invokeNe
xt(StandardPipeline.java:564)
at
org.apache.catalina.valves.ErrorReportValve.invoke
(ErrorReportValve.java:170)
at
org.apache.catalina.core.StandardPipeline.invokeNe
xt(StandardPipeline.java:564)
at
org.apache.catalina.valves.AccessLogValve.invoke
(AccessLogValve.java:468)
at
org.apache.catalina.core.StandardPipeline.invokeNe
xt(StandardPipeline.java:564)
at
org.apache.catalina.core.StandardPipeline.invoke
(StandardPipeline.java:472)
at
org.apache.catalina.core.ContainerBase.invoke
(ContainerBase.java:943)
at
org.apache.catalina.core.StandardEngineValve.invok
e(StandardEngineValve.java:174)
at
org.apache.catalina.core.StandardPipeline.invokeNe
xt(StandardPipeline.java:566)
at
org.apache.catalina.core.StandardPipeline.invoke
(StandardPipeline.java:472)
at
org.apache.catalina.core.ContainerBase.invoke
(ContainerBase.java:943)
at
org.apache.catalina.connector.http.HttpProcessor.pr
ocess(HttpProcessor.java:1012)
at
org.apache.catalina.connector.http.HttpProcessor.ru
n(HttpProcessor.java:1107)
at java.lang.Thread.run(Thread.java:536)
<<<SQL Script I used to load MySQL>>>
DROP TABLE IF EXISTS message_table ;
CREATE TABLE message_table (
id INTEGER NOT NULL,
shopName TEXT,
criticName TEXT,
criticMail TEXT,
category TEXT,
allowedSmoking BIT,
rating TEXT,
messageBody TEXT,
PRIMARY KEY(id)
) ;
DROP TABLE IF EXISTS next_id_table;
CREATE TABLE next_id_table (
table_name text,
next_id integer
);
INSERT INTO next_id_table (table_name,next_id)
values ('message_table',0);
<<my application code where an error was
occoured at>>
package gourmet;
import javax.servlet.FilterConfig;
import javax.sql.DataSource;
import org.netmeme.simper.*;
import org.netmeme.simper.strategies.*;
public class MySimperInit implements IInit {
public void init(Simper simper, FilterConfig
filterConfig) {
try {
simper.registerDataSource((DataSource)
filterConfig.getServletContext().getAttribute
("org.apache.struts.action.DATA_SOURCE"));
simper.registerTable("message_table", "id", null,
new PKGenIDTable
("next_id_table")); //***HERE****
simper.registerQuery("message_table", "all",
null, "id DESC", true);
} catch (Exception e) {
e.printStackTrace();
}
}
}
<<<My environment>>>
Win2k+JDK1.4.0+Tomcat4.0.3+Struts1.1b+MySQL3
.23.49-max-nt+JDBC(mm.mysql-2.0.13-bin.jar)