我有一个带有撇号字符‘
的java字符串(与'
不同)。
包含该字符的字符串长度为35,可以使用.length
方法进行验证。
但是,使用‘
方法setString
将包含pstmt.setString(1, description);
的字符串传递给PreparedStatement对象时,字符串的长度将转换为37个字符的字符串,可以看到从我得到以下错误消息:
java.sql.BatchUpdateException: ORA-12899: value too large for column "DESCRIPTION" (actual: 37, maximum: 35)
处理这个问题最优雅的方法是什么?
答案 0 :(得分:2)
如果要在将数据库插入数据库之前检查字符串的长度,则必须将其转换为数据库使用的字符集。可以用
完成 new String(string, charset);
例如
System.out.println("‘".length());
// displays 1
System.out.println(new String("‘".getBytes(), "UTF-16").length());
// displays 2
System.out.println(new String("‘".getBytes(), "ISO-8859-1").length());
// displays 3
请参阅http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/String.html#String%28byte [],%20java.lang.String%29