java中boolean与字符串或者数字1和0的转换

mysql有个字段是bit,只存储1和0,是二进制存储,那么在java的dao层如何映射成boolean呢


@Column(name="is_standard")
private boolean isStandard;

public void setIsStandard(boolean isStandard){
   this.isStandard = isStandard;
}

public boolean getIsStandard(){
   return isStandard;
}

其实就是在底层dao做反射的时候,先判断字段(比如isStandard)的字段类型是否为boolean,如果是,则在查出数据库字段bit is_standard的时候,做转换


private List<T> populateData(ResultSet resultSet, Class<T> clazz) throws Exception {
        List<T> dataList = new ArrayList<T>();
        List<Field> fieldList = MappingAnnotationUtil.getAllFields(clazz);

        ResultSetMetaData rsmd = resultSet.getMetaData();
        int columnsCount = rsmd.getColumnCount();
        List<String> columnNameList = new ArrayList<String>();
        for(int i = 0; i < columnsCount; i++){
            columnNameList.add(rsmd.getColumnLabel(i+1).toLowerCase());
        }

        while (resultSet.next()) {
            T bean = clazz.newInstance();
            for(Field f : fieldList) {
                String columnName = MappingAnnotationUtil.getDBCloumnName(clazz, f).toLowerCase();
                if(columnNameList.contains(columnName)) {
                    Object columnValueObj = null;
                    Class<?> filedCls = f.getType();

                    if(filedCls == int.class || filedCls == Integer.class) {
                        columnValueObj = resultSet.getInt(columnName);
                    } else if(filedCls == String.class) {
                        columnValueObj = resultSet.getString(columnName);
                    } else if(filedCls == boolean.class || filedCls == Boolean.class) {
                        columnValueObj = resultSet.getBoolean(columnName);
                    } else if(filedCls == byte.class || filedCls == Byte.class) {
                        columnValueObj = resultSet.getByte(columnName);
                    } else if(filedCls == short.class || filedCls == Short.class) {
                        columnValueObj = resultSet.getShort(columnName);
                    } else if(filedCls == long.class || filedCls == Long.class) {
                        columnValueObj = resultSet.getLong(columnName);
                    } else if(filedCls == float.class || filedCls == Float.class) {
                        columnValueObj = resultSet.getFloat(columnName);
                    } else if(filedCls == double.class || filedCls == Double.class) {
                        columnValueObj = resultSet.getDouble(columnName);
                    } else if(filedCls == BigDecimal.class) {
                        columnValueObj = resultSet.getBigDecimal(columnName);
                    } 

                    else {
                        columnValueObj = resultSet.getObject(columnName);
                    }

                    if (columnValueObj != null) {
                        Method setterMethod = MappingAnnotationUtil.getSetterMethod(clazz, f);
                        setterMethod.invoke(bean, new Object[] { columnValueObj });
                    }
                }
            }
            dataList.add(bean);
        }
        return dataList;
    }

注意这个


else if(filedCls == boolean.class || filedCls == Boolean.class) {
   columnValueObj = resultSet.getBoolean(columnName);
} 

resultSet.getBoolean(columnName) 就是转换的方法,具体实现为


 for (int i = 0; i < trueStrings.length; ++i) {
                if (trueStrings[i].equals(stringValue)) {
                    return type.cast(Boolean.TRUE);
                }
            }

            for (int i = 0; i < falseStrings.length; ++i) {
                if (falseStrings[i].equals(stringValue)) {
                    return type.cast(Boolean.FALSE);
                }
            }

核心原理就是根据字符串/数字做对比,如果是1,0就返回true/false,其它的直接返回false或抛出异常,字符串如果是[true, yes, y, on, 1]就返回true,如果是[false, no, n, off, 0]就返回false

@落雨
2015.09.12
http://luoyu.win
http://ae6623.cn

时间: 2024-08-10 08:40:19

java中boolean与字符串或者数字1和0的转换的相关文章

java中 正则表达式解决连续不同数字问题

问题描述 java中 正则表达式解决连续不同数字问题 匹配ABC4或者AB44 ,A,B,C为任意不相等数字 在java中匹配上诉规则应该是怎样的? 正则菜鸟,求解答,谢过 解决方案 ^(d)(?!1)(d)(?!1|2)d4$ 解决方案二: /^d{3}[4]$/ /^d{2}[4]{2}$/ 其实没懂什么意思,上面那两个字符串是需要用一个正则表达式还是两个?还是那两个是一个整的字符串?晕乎乎的,不过我也是菜鸟,仅供参考,答错勿怪哦.... 解决方案三: 按照你给的这两个,基本上就是绝对匹配了

java 正则表达式-这条java中的替换字符串的正则表达式是什么意思?能不能详细解释一下

问题描述 这条java中的替换字符串的正则表达式是什么意思?能不能详细解释一下 replaceAll("([^u4e00-u9fa5]{1})([^u4e00-u9fa5]{1})", "$2") 解决方案 在计算机科学中,是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串.在很多文本编辑器或其他工具里,正则表达式通常被用来检索和/或替换那些符合某个模式的文本内容.许多程序设计语言都支持利用正则表达式进行字符串操作.例如,在Perl中就内建了一个功能

正则表达式-Java中如何给字符串加空格

问题描述 Java中如何给字符串加空格 Java中如何在一个字符串中每隔四个字符,加入一个空格,然后再将字符串输入到一个新定义的字符串,如: str1=ADSFBKI89H8H8M8J8F8T9%Th09I; 我需要每隔四个加一个空格,有几种实现方法?? 解决方案 给一种实现,直接上代码...... import java.util.Arrays; public class Test09 { public static void main(String[] args) { String old=

输入输出-Java中如何将字符串转化为字节数组,并输出

问题描述 Java中如何将字符串转化为字节数组,并输出 Java中如何将字符串转化为字节数组,并输出,比如得到的输入为 :String str="我是好学生,My name is Studentdaiwei!" 转化为字节数组中,并输出 又如何将字节数组转化为比特数组并输出 解决方案 这个涉及编码的问题,不同的编码输出的字节不同.用getByteshttp://blog.csdn.net/zheng0518/article/details/11532815 解决方案二: String

java中比较未知字符串所包好的内容

问题描述 java中比较未知字符串所包好的内容 比如说我有两个词.中国 和国人,(这个字符串是未知的,我只是举例),怎么判断这两个字符串中 都包含相同的内容,在上述例子中相同的内容就是"国"?最好不用数组,求大神指导! 解决方案 public static int[][] LCS(String str1, String str2) { int[][] opt = new int[str2.length() + 1][str1.length() + 1]; for (int i = 0;

关于java中boolean问题

问题描述 关于java中boolean问题 如图示,定义了一个boolean变量,赋值false,在test方法中if语句判断值,如果if判断代码是(b==false),则会执行语句;而为(b=false)或(b=true)时也可以,这样代表什么意思呢? 解决方案 更糟糕的是,无论b原来是什么,b=false都会把b设置为false,而b=true都会把b设置为true. bool的值,根本不需要b == true或者b == false,直接写if (b)或者if (!b),也就不会出现把==

Java 中基本类型和字符串之间的转换

Java 中基本类型和字符串之间的转换 在程序开发中,我们经常需要在基本数据类型和字符串之间进行转换. 其中,基本类型转换为字符串有三种方法: 1. 使用包装类的 toString() 方法 2. 使用String类的 valueOf() 方法 3. 用一个空字符串加上基本类型,得到的就是基本类型数据对应的字符串 再来看,将字符串转换成基本类型有两种方法: 1. 调用包装类的 parseXxx 静态方法 2. 调用包装类的 valueOf() 方法转换为基本类型的包装类,会自动拆箱 PS:其他基

Java中得到一个字符串中每个字符的Unicode值

字符串 /** Java 中int类型是16个bit,char也是16位的,正好可以表示Unicode类型的所有字符 所以,要在字符和unicode值之间转换时,只需要做相应的char int转换就可以了. */ class Unicode { public static void main(String[] args) { String s="我是慈勤强,很高兴认识大家,http://blog.csdn.net/cqq"; char[] c=s.toCharArray(); for(

Javascript中如何将字符串转为数字

本文介绍Javascript中数字转字符串及字符串转数字的方法 Javascript中最简洁的数字转字符串方法是: var num = 123; var string = num + ""; 也就是在数字后面加上一个空字符.那么最简洁字符串转数字方法呢? 字符串只能进行加法(拼接) 字符串进行加法(拼接)是很常见的,但是字符串进行减法.乘法.除法呢? 这似乎很难定义,实际上字符串没有减法.乘法.除法操作. 但Javascript是动态语言,如果你拿两个字符串进行这三种操作的时候,他会尝