JDBC访问oracle,为什么这样的语句不行:select t.*, '常量字符串' from my_table t?

myy 2005-01-17 08:02:40
JDBC访问oracle,为什么这样的语句不行:select t.*, '常量字符串' from my_table t?

比如:
String qt="select t.id, t.name, '常量字符串' from my_table t";
...
ResultSet rs=dba.ExecQuery(qt);
while (rs.next()) {
System.err.print(rs.getString(1));
System.err.print(rs.getString(2));
System.err.print(rs.getString(3));
}
....

本来应该输出:

1 aaa 常量字符串
2 bbb 常量字符串
3 ccc 常量字符串

可是,第三列却是 ???????????????,这是怎么回事呢?

1 aaa ???????????????
2 bbb ???????????????
3 ccc ???????????????
...全文
354 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
myy 2005-01-18
  • 打赏
  • 举报
回复
哦,可能我没有说清楚,我做的程序是一个“统一显示表格”的程序,
也就是 给定一个select 语句,就可以直接获取到一个html table,
这个table 在页面上显示后,还可以通过 javascript 来操作里面的单元格数据......
myy 2005-01-18
  • 打赏
  • 举报
回复
俺知道可以用trim()取掉,但是这样不太好啊,如果我表中实际的字段的值就是需要空格,
岂不是也去掉了吗?

问题在于'常量字符串' 这一列后面的空格是本来应该是没有的,被自动加上去了。

“宁可错杀1k,不能放过1byte ?”
liaohaiying 2005-01-18
  • 打赏
  • 举报
回复
取'常量字符串' 这一列的值时,后面有许多空格,
变成 ‘常量字符串 ’,不知为什么?
-----
可以在取出来的时候进行转换,把“ ”去掉。
以梦为马 2005-01-18
  • 打赏
  • 举报
回复
友情up。
drugon 2005-01-18
  • 打赏
  • 举报
回复
Oracle的JDBC是有版本的,不同的数据库版本用不同的JDBC版本。
myy 2005-01-18
  • 打赏
  • 举报
回复
问题解决了,原来是oracle的jdbc 驱动的问题,让我很迷惑不解的是,
我装的oracle 9.2.0.x,其自带的jdbc驱动有很多如:

classes111*.*,classes12*.*, ojdbc14.jar,nls_charset12...

通过看readme.txt,jdk1.4下应该用 ojdbc14.jar,nls_charset12.jar,
于是我就用了这两个文件,发现有上述问题,于是换来换去,都不行。
后来在Weblogic7下面找了个 classes12.jar ,这个文件与 oracle9 提供
的都不一样,比较大(1.8M,不知道是什么版本的),这下子就对了。

但是还有个小问题,就是:
执行
select t.id, t.name, '常量字符串' from my_table t

后,取'常量字符串' 这一列的值时,后面有许多空格,
变成 ‘常量字符串 ’,不知为什么?
dlxu 2005-01-17
  • 打赏
  • 举报
回复
你电脑的地理位置可能设定错误
GJA106 2005-01-17
  • 打赏
  • 举报
回复
你是在weblogic下测试的吗?有必要直接jdbc在jb中通application测试一下,看能不能通过,如果通过了那应该是weblogic的问题;如果通不过,那应该是数据库的问题或数据库驱动问题。
myy 2005-01-17
  • 打赏
  • 举报
回复
没有异常啊,我用的编译工具是 jb9 (字符集可能是GBK吧),没有页面,就是个 javabean

问题是,我用此bean对数据库的 insert ,update 有中文时,都正确啊,select 有中文的
列也正确,但select 不能有中文的常量列,乱码。真是很奇怪。

另外,在Weblogic8 中用jsp调这个bean,也是一样的,insert ,update,select 有中文列时,
都正确,同样select有中文的常量列就是乱码。
gong1 2005-01-17
  • 打赏
  • 举报
回复
字符集问题,是不是和你的编译工具的字符集不一致?^_^
把异常贴出来。^_^
GJA106 2005-01-17
  • 打赏
  • 举报
回复
你创建的Oracle实例选择了什么字符集。在java代码中,SQL语句:select t.*, '常量字符串' from my_table t 执行结果是正常的,没有什么乱码问题。应该是Oracle字符集问题。
myy 2005-01-17
  • 打赏
  • 举报
回复
表T中有输入汉字的,很正常,oracle的字符集是 ZHS16GBK 。


select t.id, t.name, '常量字符串' 常量列 from my_table t

这样写的话,还是不对,但通过

ResultSetMetaData rsmd = rs.getMetaData();

显示 rsmd.getColumnLabel(3),能显示出 ‘常量列’来。
likeBean 2005-01-17
  • 打赏
  • 举报
回复
如果不是中文问题,你可以这样
String qt="select t.id, t.name, '常量字符串' from my_table t";
改成
String qt="select t.id, t.name, '常量字符串' alias from my_table t";
likeBean 2005-01-17
  • 打赏
  • 举报
回复
看看你用常规的查询,有没有中文问题,如果有,说明是编码问题。
myy 2005-01-17
  • 打赏
  • 举报
回复
to li_haizhou(阿土) :


java.sql.SQLException: 无效的列类型: getBytes
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:179)
at oracle.jdbc.dbaccess.DBError.check_error(DBError.java:1130)
at oracle.jdbc.driver.ScrollableResultSet.getBytes(ScrollableResultSet.java:910)
at com.les.lib.db.LesDbAction.main(LesDbAction.java:416)
li_haizhou 2005-01-17
  • 打赏
  • 举报
回复
试一试:
System.err.print(new String(rs.getBytes(3)));

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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