
byte[] tyte1 = params[i].getBytes("GBK")//或者改成你jvm的编码
String params = new String(byte1,"UTF-8" )//改成数据库编码
看了你的描述:
转换后成 '[C@1b8ee96'
这个不是乱码,是Java的hashCode值,即对象的内存地址,产生原因是:
String sql1= " '"+id+"'" 做字符串拼接时,id是一个对象
java在做字符串拼接时,会调用toString方法,而toString默认返回的是hashcode
id的是个数组,什么类型的,包括String sql= " '"+id+"'" 你想拼成一个怎样的sql语句
int [] a = {1,2,3,4}
System.out.println(Arrays.toString(a)) // 数组变字符串
供你参考,因为要拼sql需要额外处理
String ss = "3703731197270270"char[] id = ss.toCharArray()
String idStr = Arrays.toString(id)
idStr = idStr.substring(1).substring(0, idStr.length() - 2)
String sql = " '" + idStr + "'"
System.out.println(sql)
String sql1 = "insert into weibo value ('" +sql +"')"
System.out.println(sql1)
看看合不合适
可能原因一:数据库不支持中文,或者是数据库编码格式和java代码编码格式不一致,这种情况需要修改数据库编码格式:
ALTER SYSTEM DISABLE RESTRICTED SESSION改完编码后执行sql> conn / as sysdba
sql> shutdown immediate
database closed.
database dismounted.
oracle instance shut down.
sql> startup mount
oracle instance started.
total system global area 135337420 bytes
fixed size 452044 bytes
variable size 109051904 bytes
database buffers 25165824 bytes
redo buffers 667648 bytes
database mounted.
sql> alter system enable restricted session
system altered.
sql> alter system set job_queue_processes=0
system altered.
sql> alter system set aq_tm_processes=0
system altered.
sql> alter database open
database altered.
sql> alter database character set internal_use UTF-8
sql> shutdown immediate
sql> startup
可能原因二:java代码生成插入语句的时候,已经发生乱码现象,这种只能是修改项目编码格式或者是在数据获取的时候直接转译代码编码格式来实现了。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)