用Java从Oracle取数据的问题

xdszg 2003-02-13 08:59:40
数据库内结构体类型的定义:
teststruct{
name varchar2(10)
age number(3.0)
}
数据:teststruct=('szg',20)

程序如下:
import java.sql.*;
import java.io.*;
import java.math.BigDecimal;

public class Struct1{
public static void main(String[] args){

String ldriver = "oracle.jdbc.driver.OracleDriver";
String lurl = "jdbc:oracle:thin:@172.28.90.44:1521:oracledb";
String user = "system";
String pwd = "manager";

try{
DriverManager.registerDriver((java.sql.Driver)Class.forName(ldriver).newInstance());
Connection conn = DriverManager.getConnection(lurl,user,pwd);

if (!conn.isClosed()){
System.out.println("Connect OK");
}else{
System.out.println("Connect ERROR");
}

Statement stmt = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY,ResultSet.CONCUR_UPDATABLE);
stmt.executeUpdate("insert into szgtest(teststruct) values(struct_test('szg',20))");
conn.commit();

System.out.println("Insert OK!");

ResultSet rs = stmt.executeQuery("select teststruct from szgtest");
while (rs.next()){
Struct struct = (Struct)rs.getObject(1);
Object[] attributes = struct.getAttributes();
String name = (String)attributes[0];
int age = ((BigDecimal)attributes[1]).intValue();
System.out.println("Name:" + name);
System.out.println("Age:" + age);
System.out.println();
}
conn.commit();

rs.close();
stmt.close();
conn.close();

}catch(Exception e){
System.out.println("Exception");
e.printStackTrace();
}
}
}

运行结果:
Name:0x737A67
Age:20

问为什么'szg'变成了'0x737A67',
我知道实际上73,7A,67就是'szg'各个字符的ASC值.
但我不知道如何把它转换出来.
高手赐教,100分!
...全文
31 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
xdszg 2003-03-14
  • 打赏
  • 举报
回复
结贴
asdmonster 2003-02-14
  • 打赏
  • 举报
回复
mark
supershb 2003-02-14
  • 打赏
  • 举报
回复
数据库服务器端有个字符集,你用
select userenv('language') from dual;
查看一下,然后使用wanghai(汪海) 的转换输出就可以了。
xdszg 2003-02-14
  • 打赏
  • 举报
回复
还是不对?
怎么回事?
OnA 2003-02-13
  • 打赏
  • 举报
回复
ISO8859_1是不是ORACLE的用的字符集?
好像平常都用的是GB2312啊
OnA 2003-02-13
  • 打赏
  • 举报
回复
你如果使用RS.GETSTRING就可以得到正确的字符串.但不能用结构了,很可惜.
nicholaz(九思·逢尤) 能说说你的理由吗?
xdszg (阿牛) 成功了给大家说说方法
wanghai 2003-02-13
  • 打赏
  • 举报
回复
<%@ page contentType="text/html;charset=gb2312" %>
byte[] temp=name.getByte("ISO8859_1");
String i=new String(temp).trim();
out.print(i)
nicholaz 2003-02-13
  • 打赏
  • 举报
回复
用这个转换一下试试

byte[] ByteArray = name.getBytes("ISO-8859-1");

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧