• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

Jdbc连接oracle远程数据库字符集US7ASCII文乱码解决

武飞扬头像
学无耻境
帮助5

一、环境描述

数据库:oracle11g 字符集:AMERICAN_AMERICA.US7ASCII
查询字符集sql语句:

select userenv('language') from dual;

JDK1.8
oracle驱动包

<dependency>
    <groupId>com.oracle</groupId>
    <artifactId>ojdbc</artifactId>
    <version>6</version>
</dependency>

二、问题描述

因为程序代码本身的编码是utf-8,使用jdbc连接查询oracle数据库表数据中文乱码,plsql设置环境变量NLS_LANG=AMERICAN_AMERICA.US7ASCII 是能解决plsql显示正常,但是程序使用jdbc连接数据库还是乱码。

三、解决方案

直接上代码:

package com.joe.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.*;

/**
 * @author joe
 * @Title: ascii字符集
 * @Description:
 * @date 2022/9/3014:37
 */
public class Test_ACSII_Oracle {

    static {
        try {
            Class.forName("oracle.jdbc.driver.OracleDriver");
        }catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    //定义数据库连接地址
    public static final String DBURL = "jdbc:wrap-jdbc:filters=encoding:jdbc:oracle:thin:@//192.168.0.233:1521/helowin";
    public static final String DBUSER = "test";
    public static final String DBPASS = "123456";
    public static void main(String[] agrs) throws Exception{
        String sql = "select code,fee_type from t_fee_type";

        Properties props = new Properties();
        props.setProperty("serverEncoding","ISO-8859-1");
        props.setProperty("clientEncoding","GBK");
        props.put("user", DBUSER);
        props.put("password", DBPASS);
        Connection conn = (Connection) DriverManager.getConnection(DBURL,props);
        PreparedStatement ps = (PreparedStatement)conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE);
        //Statement stmt = conn.createStatement();
        //ps.setNString(1,"病程记录");
        ResultSet rs = ps.executeQuery();
        List<Map<String, Object>> mapList = print(rs);
        for (Map<String, Object> objectMap : mapList) {
            System.out.println(objectMap);
        }
        //关闭资源
        if(rs!=null){rs.close();}
        if(ps!=null){ps.close();}
        if(conn!=null){conn.close();}
    }

    public static List<Map<String,Object>> print(ResultSet rs)throws Exception{
        int rowCount = 0;
        long begin = System.currentTimeMillis();
        List<Map<String,Object>> list = new ArrayList<>();
        while (rs.next()){
            rowCount  ;
            Map<String,Object> map = new HashMap<>();
            //获取数据
            map.put("code",rs.getString(1));
            //map.put("fee_type2",new String(rs.getString("fee_type").getBytes("ISO-8859-1"),"GBK"));
            map.put("fee_type3",rs.getString(2));
            list.add(map);
        }
        long end = System.currentTimeMillis();
        System.out.println("总共行数:" rowCount);
        System.out.println("耗时:"  (end-begin)/1000 "秒");
        return list;
    }

}

学新通
核心改造:
1、配置服务端编码和客户端编码

Properties props = new Properties();
props.setProperty("serverEncoding","ISO-8859-1");
props.setProperty("clientEncoding","GBK");

2、url

jdbc:wrap-jdbc:filters=encoding:

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhfgjbec
系列文章
更多 icon
同类精品
更多 icon
继续加载