本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看<活动链接>
提问:Java JDBC-如何使用服务名称而不是SID连接到Oracle?
我有一个使用JDBC(通过JPA)的Java应用程序,它使用主机名,端口和Oracle SID连接到开发数据库,如下所示:
jdbc:oracle:thin:@ oracle.hostserver1.mydomain.ca:1521:XYZ
XYZ是Oracle SID。现在,我需要连接到另一个不使用SID而是使用Oracle“服务名”的Oracle数据库。
我尝试了这个,但是不起作用:
jdbc:oracle:thin:@ oracle.hostserver2.mydomain.ca:1522:ABCD
ABCD是新数据库的名字
回答1:
服务名称仅受JDBC Thin驱动程序支持。 语法为:
@//host_name:port_number/service_name
所以我会尝试
jdbc:oracle:thin:@//oracle.hostserver2.mydomain.ca:1522/ABCD
提问:如何在Java中将字符串与UTF8字节数组之间来回转换?
在Java中,我有一个String,我想将其编码为字节数组(采用UTF8或其他某种编码)。或者,我有一个字节数组(采用某种已知的编码),我想将其转换为Java String。我如何进行这些转换?
回答1:
从String转换为byte[]:
String s = "some text here";
byte[] b = s.getBytes(StandardCharsets.UTF_8);
从byte[]转换为String:
byte[] b = {(byte) 99, (byte)97, (byte)116};
String s = new String(b, StandardCharsets.US_ASCII);
回答2:
这是一种避免每次转换都执行Charset查找的解决方案:
评论区:这点请引用下消息来源,是否因为java.nio.charset.Charset不是基于String.getBytes构建的,因此比String.getBytes具有更多的开销吗?
import java.nio.charset.Charset;
private final Charset UTF8_CHARSET = Charset.forName("UTF-8");
String decodeUTF8(byte[] bytes) {
return new String(bytes, UTF8_CHARSET);
}
byte[] encodeUTF8(String string) {
return string.getBytes(UTF8_CHARSET);
}