现在需要修改表里一个字段,是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;
}
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;
}
Integer.toHexString
/**
* 十六进制字符与数字转换表。
*/
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;
}