现在需要修改表里一个字段,是image型(sql server 2005数据库)实体类如下:
public class Operators implements java.io.Serializable {
private String opeName;
private Integer id;
private String opeInfo;//包含密码、权限、状态、管理部门信息(2—42是密码,42—80是权限,80—125是状态,125—128是管理部门)
private String opeExplain;
private Integer deptId;
private Integer upOpeId;
private OperatorInfo opInfo = new OperatorInfo();
}public class OperatorInfo {
private String pwd; // 密码
private char[] popedom; // 权限
private byte state; // 状态 0 正常 1 禁用
private Integer deptID; // 可管理的部门
}映射文件如下:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
    <class name="com.dig.pojo.Operators" table="OPERATORS" schema="dbo" catalog="DCU32">
        <id name="opeName" type="java.lang.String">
            <column name="OpeName" length="20" />
            <generator class="native" />
        </id>
        <property name="id" type="java.lang.Integer">
            <column name="ID" not-null="true" />
        </property>
        <property name="opeInfo" type="java.lang.String">
            <column name="OpeInfo" />
        </property>
        <property name="opeExplain" type="java.lang.String">
            <column name="OpeExplain" length="60" />
        </property>
        <property name="deptId" type="java.lang.Integer">
            <column name="DeptID" />
        </property>
        <property name="upOpeId" type="java.lang.Integer">
            <column name="UpOpeID" />
        </property>
    </class>先需要根据页面请求修改密码(不需要判断旧密码),用户属性可以从页面session中取得,请问如何将收集到的opeInfo相关信息存入数据库?请附上代码,谢谢!另提供以下方法:
/**
 * 字符串转化为十六进制编码
 * @param s 要转化的字符串
 * @return s16 十六进制编码的字符串
 */
public static String toHexString(String s) {
String str = "";
for (int i = 0; i < s.length(); i++) {
int ch = (int) s.charAt(i);
String s4 = Integer.toHexString(ch);
str = str + s4;
}
return str;
}

/**
 * 十六进制编码转化为字符串
 * @param s 要转化的十六进制编码
 * @return str 字符串
 */
public static String toStringHex(String s) {
byte[] baKeyword = new byte[s.length() / 2];
for (int i = 0; i < baKeyword.length; i++) {
try {
baKeyword[i] = (byte) (0xff & Integer.parseInt(s.substring(
i * 2, i * 2 + 2), 16));
} catch (Exception e) {
e.printStackTrace();
}
}
try {
s = new String(baKeyword, "utf-8");// UTF-16le:Not
} catch (Exception e1) {
e1.printStackTrace();
}
return s;
}

解决方案 »

  1.   

    Integer有两个方法可以。Integer.parseInt
    Integer.toHexString
      

  2.   

    可以转成Integer或 Long 型 ,他们都有16进制转换的方法
      

  3.   

    用这个吧,我自己写的
    /**
     * 十六进制字符与数字转换表。
     */
    public static final String HEX_TABLE="0123456789abcdef";
    /**
     * 将十六进制字符转换成数字。
     * @param c 将转换的字符。
     * @return 转换成的数字。
     * @throws NotByteInfoException 
     */
    public static int StringHexToInt(char c) throws NotByteInfoException{
    c=Character.toLowerCase(c);
    int value=HEX_TABLE.indexOf(c);
    if(value==-1){
    throw new NotByteInfoException("必须是十六进制字符");
    }
    return value;
    }/**
     * 将字节数组转换成十六进制的字符表现形式。
     * @param b 字节数组。
     * @return 十六进制字符表现形式。
     */
    public static String byteToString(byte[] b){
    StringBuffer sb=new StringBuffer();
    for (int i = 0; i < b.length; i++) {
     sb.append(HEX_TABLE.charAt((b[i]>>4)&0xf)).append(HEX_TABLE.charAt((b[i]>>0)&0xf));
    }
    return sb.toString();
    }
    /**
     * 将十六进制字符串转换成字节数组。
     * @param str 需要转换的字符串。
     * @return 字节数组。
     * @throws NotByteInfoException 不是byte类型字符串
     */
    public static byte[] stringToByte(String str) throws NotByteInfoException{
    char[] c=str.toCharArray();
    byte[] b=new byte[c.length/2];
    int m=0;
    for (int i = 0; i < c.length; i+=2) {
    int j=CipherTool.StringHexToInt(c[i])<<4;
    int k=CipherTool.StringHexToInt(c[i+1]);
    b[m]=(byte)(j|k);
    m++;
    }
    return b;
    }