Found the root of the problem. Looks like the SmartClient handling of TINYINT will only work with the JDBC setting tinyInt1isBit=false, but the default is tinyInt1isBit=true. I guess now I need to figure out how to set tinyInt1isBit=false in server.properties. (But it seems like the default /should/ work. :-)
From http://dev.mysql.com/doc/refman/5.5/en/connector-j-reference-type-conversions.html
TINIYINT: "java.lang.Boolean if the configuration property tinyInt1isBit is set to true (the default) and the storage size is 1, or java.lang.Integer if not."
===== test ==================
===== output ==================
From http://dev.mysql.com/doc/refman/5.5/en/connector-j-reference-type-conversions.html
TINIYINT: "java.lang.Boolean if the configuration property tinyInt1isBit is set to true (the default) and the storage size is 1, or java.lang.Integer if not."
===== test ==================
Code:
import java.sql.*;
public class TinyintJdbcTest {
public static void main(String[] args) throws Exception {
// Mysql JDBC defaults to tinyInt1isBit=true
doIt(true);
// But SmartClient code would only work if tinyInt1isBit=false
doIt(false);
}
private static void doIt(boolean tinyInt1isBit) {
System.out.println("\n--- testing with tinyInt1isBit = " + tinyInt1isBit + "------------------");
try {
Class.forName("com.mysql.jdbc.jdbc2.optional.MysqlDataSource");
Connection connect = DriverManager
.getConnection("jdbc:mysql://localhost/myapp?user=myapp&password=changeme" +
"&tinyInt1isBit=" + tinyInt1isBit);
Statement statement = connect.createStatement();
ResultSet resultSet = statement.executeQuery("SELECT id, enabled FROM SomeRule");
writeResultSet(resultSet);
} catch (Exception e) {
}
}
private static void writeResultSet(ResultSet resultSet) throws SQLException {
while (resultSet.next()) {
String id = resultSet.getString("id");
String enabled = resultSet.getString("enabled");
Object obj = resultSet.getObject("enabled");
String objType = obj.getClass().getName();
Object result = "1".equals(obj.toString()) ? Boolean.TRUE : Boolean.FALSE;
System.out.println("ID=" + id + ", enabled=" + enabled + ", objType=" + objType + ", result=" + result);
}
}
}
Code:
--- testing with tinyInt1isBit = true------------------ ID=1, enabled=1, objType=java.lang.Boolean, result=false ID=2, enabled=0, objType=java.lang.Boolean, result=false --- testing with tinyInt1isBit = false------------------ ID=1, enabled=1, objType=java.lang.Integer, result=true ID=2, enabled=0, objType=java.lang.Integer, result=false
Comment