春季启动应用显示???字符而不是unicode

问题描述 投票:3回答:3

从数据库读取时,我的dao类中的日志显示垃圾字符代替unicode字符。 Sql开发人员从oracle数据库显示正确的值也正确在数据库上设置NLS语言编码。

下面的代码适用于标准的jdbc:

connection = DriverManager.getConnection(
"jdbc:oracle:thin:@localhost:1521:xe", "adminuser", "oracle");
Statement st=connection.createStatement();
ResultSet res=st.executeQuery("SELECT menu_item_name from pending_menu_item 
where menu_item_id=6062");

    while(res.next()){
        System.out.println("itemName: "+res.getString(1));
    }

下面是春季启动项目的网址,显示垃圾字符,我上传到github.qazxsw poi

https://github.com/AyubOpen/spring-boot-jdbc/
spring-boot unicode jdbctemplate hikaricp
3个回答
3
投票
  1. package com.mkyong; import com.mkyong.dao.CustomerRepository; import com.zaxxer.hikari.HikariDataSource; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.jdbc.core.JdbcTemplate; import javax.sql.DataSource; import java.util.List; import static java.lang.System.exit; @SpringBootApplication public class SpringBootConsoleApplication implements CommandLineRunner { @Autowired DataSource dataSource; @Autowired private CustomerRepository customerRepository; @Autowired private JdbcTemplate jdbcTemplate; public static void main(String[] args) throws Exception { SpringApplication.run(SpringBootConsoleApplication.class, args); } @Override public void run(String... args) throws Exception { // If you want to check the HikariDataSource settings HikariDataSource newds = (HikariDataSource)dataSource; System.out.println("getMaximumPoolSize = " + ((HikariDataSource) dataSource).getMaximumPoolSize()); System.out.println("DATASOURCE = " + newds.getDataSourceProperties().getProperty("hikari.useUnicode")); if (args.length <= 0) { System.err.println("[Usage] java xxx.jar {display}"); } else { if (args[0].equalsIgnoreCase("display")) { System.out.println("Display items..."); List<String> list = customerRepository.findAll(); list.forEach(x -> System.out.println(x)); } System.out.println("Done!"); } exit(0); } } package com.mkyong.dao; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Repository; import java.util.List; @Repository public class CustomerRepository { @Autowired private JdbcTemplate jdbcTemplate; public List<String> findAll() { List<String> result = jdbcTemplate.query( "SELECT menu_item_name from pending_menu_item where menu_item_id=6062", (rs, rowNum) -> rs.getString("menu_item_name") ); return result; } } application.properties ---------------------- spring.main.banner-mode=off spring.datasource.initialize=true spring.datasource.type=com.zaxxer.hikari.HikariDataSource spring.datasource.url=jdbc:oracle:thin:@localhost:1521/xe spring.datasource.username=jahezdbapp spring.datasource.password=oracle spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver spring.datasource.hikari.useUnicode=true spring.datasource.hikari.characterEncoding=utf-8 spring.datasource.hikari.characterSetResults=utf8 # HikariCP settings #60 sec spring.datasource.hikari.connection-timeout=60000 # max 5 spring.datasource.hikari.maximum-pool-size=5 结束时添加?useUnicode=yes&characterEncoding=UTF-8
  2. spring.datasource.url设置spring.datasource.sqlScriptEncoding=UTF-8

1本身应解决问题,2可能没有必要。


0
投票

这个问题似乎与jdbc数据源不一样,我将为springboot创建一个简单的github项目,并在此问题上跟进以下问题:

application.properties


0
投票

记录:DB2的工作URL,jdb

JDBC:DB2://x.x.x.x:5010 / XXXX:了useUnicode =是;的characterEncoding = UTF-8;

© www.soinside.com 2019 - 2024. All rights reserved.