很简单的例子 MSSQL varchar 类型 长度50
select name from student插入到ora中 varchar2类型 长度 20
报异常说 值大 进行查看
rsMS.getString(18).getBytes().length 有超过20的于是
if (null == rsMS.getString(18))
{
preORA.setNull(18, java.sql.Types.VARCHAR);
} else {
if(rsMS.getString(18).getBytes().length>20||rsMS.getString(18).length()>20)
{ preORA.setString(18, rsMS.getString(18).getBytes().toString().substring(0, 20));}
else
{preORA.setString(18, rsMS.getString(18));}
}Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 20
报这个异常,如何解决能顺利插入
select name from student插入到ora中 varchar2类型 长度 20
报异常说 值大 进行查看
rsMS.getString(18).getBytes().length 有超过20的于是
if (null == rsMS.getString(18))
{
preORA.setNull(18, java.sql.Types.VARCHAR);
} else {
if(rsMS.getString(18).getBytes().length>20||rsMS.getString(18).length()>20)
{ preORA.setString(18, rsMS.getString(18).getBytes().toString().substring(0, 20));}
else
{preORA.setString(18, rsMS.getString(18));}
}Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 20
报这个异常,如何解决能顺利插入
String t18 = rsMS.getString(18);
if (null == t18)
{
preORA.setNull(18, java.sql.Types.VARCHAR);
} else {
if(rsMS.getString(18).length()>20) //如果子串大于20,则先按字符取20
{
t18 = t18.substring(0,20);
if (t18.getBytes().toString()>20) //如果按字节还大于20,
{ preORA.setString(18, rsMS.getString(18).getBytes().toString().substring(0, 20));
}
else
{preORA.setString(18, t18);
}
}
}
String t18 = rsMS.getString(18);
if (null == t18)
{
preORA.setNull(18, java.sql.Types.VARCHAR);
} else {
if(t18.length()>20) //如果子串大于20,则先按字符取20
{
t18 = t18.substring(0,20);
}
if (t18.getBytes().toString()>20) //如果按字节还大于20,
{ preORA.setString(18, t18.getBytes().toString().substring(0, 20));
}
else
{preORA.setString(18, t18);
}
}
preORA.setNull(18, java.sql.Types.VARCHAR);
} else {
if (rsMS.getString(18).length() > 20) {
String t18 = rsMS.getString(18).substring(0, 20);
if (t18.getBytes().length > 20) {
preORA.setString(18, rsMS.getString(18).getBytes()
.toString().substring(0,20));
} else {
preORA.setString(18, t18);
}
}
}
Exception in thread "main" java.sql.SQLException: 索引中丢失 IN 或 OUT 参数:: 18
开始报这个异常
试试5楼的,我下面的已经用t18代替所有rsMS.getString(18)
1。定义个变量,取得rsMS.getString(18)的值。
2。如果为空,set对应字段空
3。如果不为空,看变量总长度大于20(不分中英文),即先取变量的substring(0,20)
4。此时变量字符长度应该<=20,再看字节是否>20,大于则取前20位。不大于则直接set。上面说了最后一个字是汉字,还需要判断,因为可能只取了最后那个字的一半。楼主这个问题其实适合去java版
把截取的字节20 改为10 然后在逻辑上少了个else