Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >使用JDBC向Kudu表插入中文字符-cast的秘密

使用JDBC向Kudu表插入中文字符-cast的秘密

作者头像
Fayson
修改于 2018-04-01 10:58:23
修改于 2018-04-01 10:58:23
2.5K0
举报
文章被收录于专栏:Hadoop实操Hadoop实操

温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。

1.问题描述

使用Impala JDBC向Kudu表中插入中文字符,插入的中文字符串乱码,中文字符串被截断。

继之前文档使用sql拼接方式插入中文字符串乱码解决方法后,此文档描述使用jdbc的PreparedStatement方式插入中文字符串乱码问题。

2.问题复现

测试环境:

  • CDH5.12.0
  • Kudu1.4.0
  • ImpalaJDBC41_2.5.35

1.使用ImpalaJDBC代码进行测试,测试代码

代码语言:txt
AI代码解释
复制
 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表中分别插入测试数据,如“测试”,“测试中文”,“测试中文字符”

代码语言:txt
AI代码解释
复制
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类型

代码语言:txt
AI代码解释
复制
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实操

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-09-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Hadoop实操 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
使用JDBC向Kudu表插入中文字符-双引号的秘密
温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。 1.问题描述 使用Impala JDBC向Kudu表中插入中文字符,插入的中文字符串乱码,中文字符串被截断。 2.问题复现 测试环境: CDH5.12.0 Kudu1.4.0 ImpalaJDBC41_2.5.35 1.使用ImpalaJDBC代码进行测试,测试代码 static String JDBC_DRIVER = "com.cloudera.impala.jdbc41.Driver"; static String CONNECTION_
Fayson
2018/03/29
1.5K0
使用JDBC向Kudu表插入中文字符-双引号的秘密
JDBCJava连接MySql数据库
工具准备:Mysql(数据库)、 MyEclipse(开发工具)、Navicat(数据库管理工具) 对应的mysql驱动jar包(我的mql是8.0,所以用mysql-connector-java-8.0.13.jar)
AlbertYang
2020/09/08
2.4K0
Java PreparedStatement
Java PreparedStatement Hierarchy Java PreparedStatement层次结构
全栈程序员站长
2022/09/06
4120
Java PreparedStatement
Java文件上传管理器 控制台
上传文件下载管理器项目技术 JDBC + IO + Socket 实现功能 客户端注册:通过输入用户名,密码,确认密码并且校验完成以后将用户信息储存在数据库中。 客户端登录:通过输入用户名和密码到数据库中校验,校验完成进入文件上传下载管理器。 上传文件:通过输入上传文件的路径上传到数据库,支持多个文件上传。 查看文件:通过登录的用户名查找上传的文件。 下载文件:通过输入文件的编号和下载的路径,从数据库进行下载。 删除文件:通过输入文件的编号进行单个文件的删除。 (PS:这次花了一天才写完,不过收获也很多,不
企鹅号小编
2018/02/28
1.6K0
Java文件上传管理器 控制台
jdbc连接mysql进行增加数据,更新数据,删除数据
mysql8.0以上大家一定加载8.0的驱动才不会报错,或者出现连接的时候出现null,8.0多了个时区的玩意(一定要特别注意)
一个风轻云淡
2022/11/13
5910
Java程序设计(高级及专题)- JDBC
execute是executeQuery和executeUpdate的综合. 通常我们没有必要使用execute方法来执行SQL语句,而是使用 executeQuery 或 executeUpdate 更适合。
全栈程序员站长
2022/08/04
6400
Java程序设计(高级及专题)- JDBC
客快物流大数据项目(七十四):Impala的java开发
在实际工作当中,因为impala的查询比较快,所以可能有会使用到impala来做数据库查询的情况,可以通过java代码来进行操作impala的查询。
Lansonli
2022/12/18
6160
客快物流大数据项目(七十四):Impala的java开发
JDBC完成对数据库数据操作(增,删,改,查)
1.获取数据库的连接 2.预编译sql语句 3.填充占位 4.执行 5.资源的关闭
小尘要自信
2023/10/10
2K0
Statement 和 PreparedStatement之间的关系和区别
大家好,又见面了,我是你们的朋友全栈君。 Statement 和 PreparedStatement之间的关系和区别. 关系:PreparedStatement继承自Statement,都是接口 区别:PreparedStatement可以使用占位符,是预编译的,批处理比Statement效率高 详解: 1、PreparedStatement:表示预编译的 SQL 语句的对象。 接口:public interface PreparedStatement extends
全栈程序员站长
2022/08/11
2.4K0
Statement 和 PreparedStatement之间的关系和区别
JavaWeb(四)JDBC操作Oracle
JDBC:Java DataBase Connectivity(java数据库连接) SUN公司为了简化、统一对数据库的操作,定义了一套Java操作数据库的规范,称之为JDBC。 jdbc是一套标准,它是由一些接口与类组成的。 涉及到的类与接口:   java.sql     类:DriverManger     接口 Connection Statement ResultSet PreparedStatement     CallableStatement(它是用于调
二十三年蝉
2018/02/28
1.5K0
JavaWeb(四)JDBC操作Oracle
java jdbc 操作 blob 类型的数据
1 MySQL BLOB类型 MySQL中,BLOB是一个二进制大型对象,是一个可以存储大量数据的容器,它能容纳不同大小的数据。 插入BLOB类型的数据必须使用PreparedStatement,因为BLOB类型的数据无法使用字符串拼接写的。 MySQL的四种BLOB类型(除了在存储的最大信息量上不同外,他们是等同的) 实际使用中根据需要存入的数据大小定义不同的BLOB类型。 需要注意的是:如果存储的文件过大,数据库的性能会下降。 如果在指定了相关的Blob类型以后,还报错:xxx too large,
FHAdmin
2021/05/24
2.6K0
JavaWeb新闻信息数据维护——评论与回复以及分页
//其实评论与回复是差不多的(都需要一个表来存数据)所以我以评论为例(供参考) //这是一个doaddpl.sql代码, //防止乱码 request.setCharacterEncoding("utf-8"); //接收评论人的编号 Object id = session.getAttribute("uuid"); int uuid = (Integer)id;//强转 //评论人的IP String pip = request.getParameter("cip");
用户10196776
2022/11/18
7790
JavaWeb新闻信息数据维护——评论与回复以及分页
JDBC数据库的增删改查简单操作
前言 本次带来的是JAVA的JDBC操作,对数据库进行发送SQL语句,以达到对数据库语言的增删改查操作 需要下载驱动类包 MySQL数据库的JDBC驱动包 https://dev.mysql.com
HcodeBlogger
2020/07/14
1.2K0
JavaWeb——新闻的数据维护(增删改查)
//doadd_news是一个已经可以接收到值得网页(接收add_news文本框的值)
用户10196776
2022/11/18
5700
JavaWeb——新闻的数据维护(增删改查)
JDBC学习再小结
JDBC学习再小结 一、JDBC概念 二、JDBC常用四个核心对象 DriverManager getConnection(); Connection createStatement(); prepareStatement(); Statement(PreparedStatement) ResultSet executeQuery(); int executeUpdate(); boo
黑泽君
2018/10/11
3030
jdbc连接mysql数据库 - Java数据库基础
最近复习了一下Java的基础,包括封装、继承、多态、IO、多线程、反射等等,但我感觉JDBC是个大块,花了半天时间实践总结了一下,顺带记录一波。主要是模板,在以后编程中大概率会用到,尤其是下学期的《数据库编程》课程。
Designer 小郑
2023/08/01
7040
JDBC+MySQL实战
hello我是bigsai,今天咱们进行JDBC+MySQL实战,非常适合初入门的小伙伴打开新的世界。实现一个增删改查(curd)的例子。先点赞再观看、帅哥靓女养成好习惯!
bigsai
2020/08/20
1.7K0
JDBC+MySQL实战
用户管理系统+源码+效果图
目录 核心功能 1、帮助类DBHelper 2、实体类entity 3、功能类dao 4、测试类 以上就是这个小案例的代码,下面是它的运行效果图  在这里面可以进行基本的增删改查以及其他的查询方式,需连接数据库一起使用 ---- 核心功能 添加用户信息 删除某一个用户信息 删除选中的用户信息 分页查询所有用户信息 模糊查询用户信息 更新用户信息 1、帮助类DBHelper package com.zking.util; import java.sql.Connection; import java.
天蝎座的程序媛
2022/11/18
1.8K0
用户管理系统+源码+效果图
JdbcTemplate学习笔记(更新插入删除等)
4、使用JdbcTemplate进行查询时,使用queryForXXX()等方法 
bear_fish
2018/09/19
1.3K0
Spring对JDBC的最佳实践--上
在一开始,会介绍一下原生JDBC的使用,此时不会涉及到spring的使用,但是我们还是利用yml文件来存放数据源配置信息,因此我们需要一个yaml读取的工具类
大忽悠爱学习
2022/05/10
9820
Spring对JDBC的最佳实践--上
相关推荐
使用JDBC向Kudu表插入中文字符-双引号的秘密
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档