热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

JDBC下某参数值为中文就是传不到存储过程里去(数据库是SQL2000),但该存储过程可以被正常调用,请教为什么?

存储过程源码如下:CREATEPROCEDUREdbo.selectInfo@creator_idvarchar(50)ASdeclare@paravarchar(50)
存储过程源码如下:

CREATE PROCEDURE dbo.selectInfo @creator_id varchar(50)
 AS
declare @para varchar(50)
set @para ='%'+@creator_id+'%'
--select * from job_plan 
select * from job_plan where creator_id like @para 
GO


JDBC调用部分源码:

 String creator_id = "邱一来";
    try{
    Connection cOnn= ejbUtil.getConnection();
    CallableStatement cs =null;
    String selectSql =  "{call selectInfo(?)}"; 
    System.out.println("Creator_Id  : "+creator_id);
    cs = conn.prepareCall(selectSql);
    cs.setString(1,creator_id);
    //cs.execute();
    //ResultSet rs = cs.getResultSet();
    ResultSet rs= cs.executeQuery();
    System.out.print(" "+rs.next());
    while(rs.next()){
     System.out.print(rs.getBigDecimal(1));
     System.out.print("\t");
     System.out.print(rs.getString(2).trim()+"\t");
     System.out.print(rs.getString(6).trim()+"\t");
                }
        cs.close();
        conn.close();
    }
    catch(SQLException ex){
     System.err.println(ex.getMessage());
    }
上述代码在ECLISPE 3.0下执行数据库连接正常,存储过程可以正常调用但总是查不到记录,控制台显示信息如下:
Creator_Id  : 邱一来
false


表job_paln结构如下:
         列名             数据类型 长度   是否允许为空
1 cid          decimal 9 0
0 plan_title varchar 50 1
0 plan_conten text 16 1
0 finished_conten text 16 1
0 project_name varchar 50 1
0 creator_id varchar 50 1
0 complete_degree varchar 50 1


表中至少47条符合条件的记录,其中一条记录如下:(各子段值用";"分割)
42,招聘; 招聘; 上午到人才市场进行招聘,下午到公司面试;某某公安,邱一来;Bachelor

56 个解决方案

#1


楼主修正一下:


表中至少47条符合条件的记录,其中一条记录如下:(各子段值用";"分割)
42;招聘; 招聘; 上午到人才市场进行招聘,下午到公司面试;某某公安;邱一来;Bachelor

#2


请各位高人指点迷津!

#3


CREATE PROCEDURE dbo.selectInfo @creator_id varchar(50)
 AS
declare @para varchar(50)
set @para ='%'+@creator_id+'%'
--select * from job_plan 
select * from job_plan where creator_id like @para 
GO

在SQL SERVER 2000查询分析器下 执行 : EXEC selectInfo 邱一来

可查出47条记录,但通过JDBC在程序里调用相同的存储过程就是查不出来,这是什么原因?

#4


楼主的操作系统是VISTA HOME PREMIUM,浏览器 IE7.0,装了TOMCAT 5.0,端口设为8888,本地部署了jobsWeb这个应用。在IE 7.0中请求http://localhost:8888/jobsWeb/jobs/,  Jsp页面上所有的汉字乱码都是???.在页面上我已经加入了page cOntentType="text/html; charset=GBK". JSP页面上从SQLSERVER2000(sp4)中读出的数据每次必须要手工选择编码为"简体中文"才能正常显示

#5


up

#6


up

#7


刚测试过,楼主的存储过程传英文进去是可以正常运行并返回结果的,问题就出在传中文值的时候!

#8


up

#9


up

#10


是不是Sql server 2000的字符集设置问题,各位高人有遇到过类似问题的吗?

#11


请高人指点迷津!

#12


换个说法吧,在存储过程里怎么能取得JAVA程序传过来的中文值,并控制台上打印出JDBC传过来的中文参数值呢?在下面这个存储过程中该如何实现?

CREATE PROCEDURE dbo.selectInfo @creator_id varchar(50)
 AS
declare @para varchar(50)
set @para ='%'+@creator_id+'%'
--select * from job_plan 
select * from job_plan where creator_id like @para 
GO

在SQL SERVER 2000查询分析器下 执行 : EXEC selectInfo 邱一来

可查出47条记录

#13


我在Eclipse 3。0调试,在JDBC中用英文为参数去调存储过程查询可以查出结果,一换成中文就查不出来,可数据库中明明有符合条件的记录!而且在数据库服务端直接调试存储过程传中文参数可以查出结果,真是奇怪了!郁闷啊。。。。。。。。。。。。。

#14


不要用存储过程,直接在Java代码中执行sql语句试试看~

如果还有错的话,把错误信息帖出来看一下

#15


在Java代码中执行sql语句早就实现了,关键是以后表的记录数量要很大所以采用存储过程!

#16


我的意思是让你试试,因为你这个问题的可能性有很多,如果你直接用sql没问题的话,那可能就是转码的问题了,如果连直接执行sql都有问题的话,那可能就是字符集的问题了,你可以换个服务器再试试~~~

#17


换个数据库服务器?

#18


Vista的区域和语言设置都是 中文(简体)啊

#19


如果是JAVA程序里的转码问题,具体该如何下列语句呢?

    Connection cOnn= ejbUtil.getConnection();
    CallableStatement cs =null;
    String creator_id ="邱一来";
    String selectSql =  "{call selectInfo(?)}"; 
    System.out.println("Creator_Id  : "+creator_id);
    cs = conn.prepareCall(selectSql);
    cs.setString(1,creator_id);   //重点修改这行代码,要加上转码语句
    //cs.execute();
    //ResultSet rs = cs.getResultSet();
    ResultSet rs= cs.executeQuery();
    System.out.print(" "+rs.next());
    while(rs.next()){
    System.out.print(rs.getBigDecimal(1));
    System.out.print("\t");
    System.out.print(rs.getString(2).trim()+"\t");
    System.out.print(rs.getString(6).trim()+"\t");
               }
        cs.close();
        conn.close();
    }
    catch(SQLException ex){
    System.err.println(ex.getMessage());
    }

#20


对数据库的查询采用了存储过程,将查询内容作为参数   
通过JDBC只能查询英文名称,不能查询中文名称,我的表字段是英文,字段值有的是中文   
在数据库服务端(SQL2000 个人版)的查询分析器里却可以查询中文名称

在JDBC里调用存储过程返回表全部记录的话,却可以返回全部,这个是为什么??   
如何解决呢????   

#21


up

#22


up

#23


up

#24


up

#25


up

#26


在Eclipse3.0中,写JDBC程序用英文为参数去调存储过程查询可以查出结果,一换成中文值参数就查不出来,可数据库中明明有符合条件的记录!而且在数据库服务端用查询分析器直接调试存储过程传中文参数(调用语句:exec selectInfo 邱一来)可以查出47条符合条件结果,真是奇怪了!Eclipse3.0中,JAVA类的编码是UTF-8
郁闷啊。。。。。。。。。。。。。这到底是怎么回事?

#27


换个服务器试试吧

#28


换了,连接不上

#29


up

#30


等待高人出现.........

#31


sql server 2000 编码与java中的编码是不一样的,先将creator_id = "邱一来";转换为unicode编码或者gb2312,然后再传到存储过程中试试!

#32


to snowfox_1028(胡须飘飘) :谢谢,我试下

#33


String creator ="邱一来";
    try{
    Connection cOnn= ejbUtil.getConnection();
    CallableStatement cs =null;
    String selectSql =  "{call selectInfo(?)}";   
    System.out.println("Creator_Id  : "+creator);
    cs = conn.prepareCall(selectSql); 
    String creator_id = new String(creator.getBytes("ISO-8859-1"),"GBK");
    //String creator_id = new String(creator.getBytes("GBK"),"utf-8");
    //String creator_id = new String(creator.getBytes("gbk2312"),"utf-8");
    //String creator_id = URLEncoder.encode(creator,"GBK2312");
    //String creator_id = URLEncoder.encode(creator,"utf-8");
    cs.setString(1,creator_id);

试上了上述5种方法都不行,还是一输入中文就查不出记录!

#34


//String creator_id = new String(creator.getBytes("GB2312"),"UTf-8");
//    String creator_id = new String(creator.getBytes("ISO-8859-1"),"UTf-8");
    //String creator_id = new String(creator.getBytes("ISO-8859-1"),"GBK2312");
    String creator_id = new String(creator.getBytes("ISO-8859-1"),"GBK");
又试了四种还是查不出来!!!!!!换了非中文参数一下子就查出结果集了,代码如下:
String creator = "LILONG"; 
    try{
    Connection cOnn= ejbUtil.getConnection();
    //Statement stmt = conn.createStatement();
    //rs = stmt.executeQuery("select * from job_plan");
    //rs = stmt.executeQuery("select * from logTable");
    CallableStatement cs =null;
    String selectSql =  "{call selectInfo(?)}";   
    System.out.println("Creator_Id  : "+creator);
    //cs = conn.prepareCall(selectSql);
    cs = conn.prepareCall(selectSql);
    //cs = conn.prepareCall("selectAll");
    
    //String creator_id = new String(creator.getBytes("GB2312"),"UTf-8");
//    String creator_id = new String(creator.getBytes("ISO-8859-1"),"UTf-8");
    //String creator_id = new String(creator.getBytes("ISO-8859-1"),"GBK2312");
    String creator_id = new String(creator.getBytes("ISO-8859-1"),"GBK");
    
    //String creator_id = new String(creator.getBytes("gbk2312"),"utf-8");
    //String creator_id = new String(creator.getBytes("ISO-8859-1"),"GBK");
    //String creator_id = URLEncoder.encode(creator,"GBK2312");
    //String creator_id = URLEncoder.encode(creator,"utf-8");
    cs.setString(1,creator_id);
    
    cs.execute();
    ResultSet rs = cs.getResultSet();
    //ResultSet rs= cs.executeQuery();
    //System.out.print(" "+rs.next());
    while(rs.next()){
     System.out.print(rs.getBigDecimal(1));
     System.out.print("\t");
     //System.out.print(rs.getString(6));
     System.out.print(StringTools.fromHTML(rs.getString(5))+"\t");
     System.out.print(StringTools.fromHTML(rs.getString(6).trim()));
     System.out.print("\t");
     System.out.println("$$$$$$");
                    }
        cs.close();
        conn.close();
    }
    catch(SQLException ex){
     System.err.println(ex.getMessage());
    }
    catch(Exception ex){
    
    }

这到底是怎么回事?难道是vista的原因?

#35


我说了换个服务器你试了吗???

#36


换了另外一台座机的SQL SERVER 2000服务器,结果连都没连上

#37


Tomcat == 服务器
SQL Server == 数据库

把Tomcat换了~~~

或者把你的整个项目原封不动的放到别一台电脑(vista和非vista系统都试下)上跑下看~~~

#38


你的意思我明白了,可是TOMCAT部署了其他的Struts开发的程序都不乱码呀,怪事!

#39


up

#40


UP

#41


把源程序原封不动移动到xp座机上,连接不上SQLSERVER2000 个人版数据库,提示"Erroe Establishment socket"我用的vista系统的sony SZ422型笔记本.

#42


up

#43


郁闷的中文问题

#44


up

#45


up

#46


up again

#47


up

#48


waiting for the expert..................................

#49


up

#50


...........................................................................

推荐阅读
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 本文详细介绍了在ASP.NET中获取插入记录的ID的几种方法,包括使用SCOPE_IDENTITY()和IDENT_CURRENT()函数,以及通过ExecuteReader方法执行SQL语句获取ID的步骤。同时,还提供了使用这些方法的示例代码和注意事项。对于需要获取表中最后一个插入操作所产生的ID或马上使用刚插入的新记录ID的开发者来说,本文提供了一些有用的技巧和建议。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • springmvc学习笔记(十):控制器业务方法中通过注解实现封装Javabean接收表单提交的数据
    本文介绍了在springmvc学习笔记系列的第十篇中,控制器的业务方法中如何通过注解实现封装Javabean来接收表单提交的数据。同时还讨论了当有多个注册表单且字段完全相同时,如何将其交给同一个控制器处理。 ... [详细]
  • 开发笔记:Java是如何读取和写入浏览器Cookies的
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Java是如何读取和写入浏览器Cookies的相关的知识,希望对你有一定的参考价值。首先我 ... [详细]
  • 怎么在PHP项目中实现一个HTTP断点续传功能发布时间:2021-01-1916:26:06来源:亿速云阅读:96作者:Le ... [详细]
  • Java中包装类的设计原因以及操作方法
    本文主要介绍了Java中设计包装类的原因以及操作方法。在Java中,除了对象类型,还有八大基本类型,为了将基本类型转换成对象,Java引入了包装类。文章通过介绍包装类的定义和实现,解答了为什么需要包装类的问题,并提供了简单易用的操作方法。通过本文的学习,读者可以更好地理解和应用Java中的包装类。 ... [详细]
  • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
  • 纠正网上的错误:自定义一个类叫java.lang.System/String的方法
    本文纠正了网上关于自定义一个类叫java.lang.System/String的错误答案,并详细解释了为什么这种方法是错误的。作者指出,虽然双亲委托机制确实可以阻止自定义的System类被加载,但通过自定义一个特殊的类加载器,可以绕过双亲委托机制,达到自定义System类的目的。作者呼吁读者对网上的内容持怀疑态度,并带着问题来阅读文章。 ... [详细]
  • 合并列值-合并为一列问题需求:createtabletab(Aint,Bint,Cint)inserttabselect1,2,3unionallsel ... [详细]
  • JavaSE笔试题-接口、抽象类、多态等问题解答
    本文解答了JavaSE笔试题中关于接口、抽象类、多态等问题。包括Math类的取整数方法、接口是否可继承、抽象类是否可实现接口、抽象类是否可继承具体类、抽象类中是否可以有静态main方法等问题。同时介绍了面向对象的特征,以及Java中实现多态的机制。 ... [详细]
author-avatar
幸运之星07812
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有