0021-使用JDBC向Kudu表插入中文字符-cast的秘密
发表于:2025-01-24 作者:千家信息网编辑
千家信息网最后更新 2025年01月24日,温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。1.问题描述使用Impala JDBC向Kudu表中插入中文字符,插入的中文字符串乱码,中文字符串被截断。继之前文档使用sql拼接方式插入
千家信息网最后更新 2025年01月24日0021-使用JDBC向Kudu表插入中文字符-cast的秘密
温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。
1.问题描述
使用Impala JDBC向Kudu表中插入中文字符,插入的中文字符串乱码,中文字符串被截断。
继之前文档使用sql拼接方式插入中文字符串乱码解决方法后,此文档描述使用jdbc的PreparedStatement方式插入中文字符串乱码问题。
2.问题复现
测试环境:
- CDH5.12.0
- Kudu1.4.0
- ImpalaJDBC41_2.5.35
1.使用ImpalaJDBC代码进行测试,测试代码
staticString JDBC_DRIVER ="com.cloudera.impala.jdbc41.Driver";static String CONNECTION_URL ="jdbc:impala://ip-172-31-10-118:21050/default";public static void main(String[] args) { Connection con = null; ResultSetrs = null; PreparedStatementps = null; try { Class.forName(JDBC_DRIVER); con =DriverManager.getConnection(CONNECTION_URL); Stringsql2 = "insert into my_first_table values(?, ?)"; ps =con.prepareStatement(sql2); ps.setInt(1,81); ps.setString(2,"测试中文字符"); ps.execute(); ps.close(); ps =con.prepareStatement("select * from my_first_table order byid asc"); rs = ps.executeQuery(); while (rs.next()){ System.out.println(rs.getLong(1)+ "\t" +rs.getString(2)); } } catch (Exceptione) { e.printStackTrace(); } finally{ try {// 关闭rs、ps和con rs.close(); ps.close(); con.close(); } catch(SQLException e) { // TODOAuto-generated catch block e.printStackTrace(); } }}
2.向Kudu表中分别插入测试数据,如"测试","测试中文","测试中文字符"
String sql2 = "insert into my_first_table values(?, ?)";ps = con.prepareStatement(sql2);ps.setInt(1, 73);ps.setString(2, "测试");ps.execute();ps.close();ps = con.prepareStatement(sql2);ps.setInt(1, 74);ps.setString(2, "测试中文");ps.execute();ps.close();ps = con.prepareStatement(sql2);ps.setInt(1, 75);ps.setString(2, "测试中文字符");ps.execute();ps.close();
通过Hue查询结果如下:
中文字符全部乱码,部分乱码,字符串被截断问题重现。
3.解决方法
修改程序中插入语句,将插入字符串列使用cast函数转成String类型
String sql2 = "insert into my_first_table values(?, cast(?as string))";ps = con.prepareStatement(sql2);ps.setInt(1, 60);ps.setString(2, "测试中文字符");ps.execute();ps.close();ps = con.prepareStatement(sql2);ps.setInt(1, 61);ps.setString(2, "测试中文");ps.execute();ps.close();ps = con.prepareStatement(sql2);ps.setInt(1, 62);ps.setString(2, "测试");ps.execute();ps.close();
修改后重新向Kudu中插入测试数据:"测试中文字符","测试中文","测试"
使用Hue查询显示如下:
中文字符串插入Kudu显示正常。
醉酒鞭名马,少年多浮夸! 岭南浣溪沙,呕吐酒肆下!挚友不肯放,数据玩的花!
温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。
欢迎关注Hadoop实操,第一时间,分享更多Hadoop干货,喜欢请关注分享。
原创文章,欢迎转载,转载请注明:转载自微信公众号Hadoop实操
测试
中文
字符
字符串
乱码
问题
数据
温馨
代码
图片
手机
方式
方法
高清
无码
提示
查询
串列
公众
函数
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
如何构建解磷功能基因数据库
阿里云dede数据库
服务器 花生壳
网络安全漫画幼儿园
迈锐宝语音识别服务器异常
数据上传服务器
金税三期 软件开发
简述你身边的网络安全实例
梅州专业软件开发供应商
2020年网络安全简报
旅舍系统数据库技术存在的问题
WIND数据库技术指标
数据库原理与应用用的是哪个软件
软件开发公司销售部的职能
数据库与媒体信息处理
加盟评论数据库 瑞幸
安卓国际服有中国服务器吗
网络技术敛财
sql数据库应用技术
万物互联网科技股份有限公司
企业一卡通服务器默认密码
数据库表太多了我要怎么看
大数据库建设思路
保定市百宝软件开发有限公司
江西家用软件开发零售价格
数据库后台不显示密码
数据库与媒体信息处理
官网服务器503错误是什么情况
数据库原理 关系代数
软件开发pdf微盘