郁闷了!快搞不定了。。

leiru 2008-11-12 10:18:17
现在我做了一个java访问存储过程的。。
java:
ArrayList aa=new ArrayList();
for (int k = 0; k < newSalesChanceIds.length; k++) {
aa.add(k,userCodes[k]);
}
ArrayList bb=new ArrayList();
for (int k = 0; k < newSalesChanceIds.length; k++) {
bb.add(k,newSalesChanceIds[k]);
}
String comCode = request.getParameter("comCode");
String activityId = request.getParameter("activityId");// 活动ID
// bb=['00145CF47AD82134F7132ABABACF096573BF','0014AF4FB9B56B74AF3833862D1D15A6374A', '0014370B71F58A322C490D8B29C583488FFF','00142076543600E3D9C1A79F9CEAB64A5001']
// aa=[0001, 007]
//上面的aa,bb都可以得到值的。。只要看后面的。。
DbProcedure dbProcedure = new DbProcedure();
dbProcedure.doDataAgent(aa, bb, comCode,activityId);



public void doDataAgent(ArrayList userCodes, ArrayList newSalesChanceIds, String comCode,
String activityID) throws Exception {

CallableStatement proc = null;
DBManager dbManager = new DBManager();
Connection conn = null;
try {
dbManager.open("platformDataSource");
conn = dbManager.getConnection();
proc = conn
.prepareCall("{ call ccicdb.doDataToAgent(?,?,?,?) }");
System.out.println("userCodes=" + userCodes);
System.out.println("newSalesChanceIds=" + newSalesChanceIds);
System.out.println("comCode=" + comCode);
System.out.println("activityID=" + activityID);
proc.setArray(1, (Array) userCodes);
proc.setArray(2, (Array) newSalesChanceIds);
proc.setString(3, comCode);
proc.setString(4, activityID);

proc.execute();

} catch (Exception ex) {
ex.printStackTrace();

} finally {
if (conn != null)
conn.close();
if (dbManager != null)
dbManager.close();
}

}


存储过程:
create or replace procedure doDataToAgent(userCodes in myvarray_usercodelist,salesChanceIds in myvarray_list, v_comCodeIn varchar2,v_activityId varchar2) is

v_count number;
activityname varchar2(40);
activitySort varchar2(40);
activitytype varchar2(40);
activityid varchar2(40);

begin

for h in 1..salesChanceIds.count loop

UPDATE Crm_sales_chance SET UserCode =userCodes(h),Reserve3='agent', ComCode = v_comCodeIn WHERE SALESCHANCEID in (salesChanceIds(h));

EXECUTE IMMEDIATE 'select distinct(t.Activityname) from Crm_sales_chance t where t.SalesChanceId in''%'||salesChanceIds('||h||')||'%''' into activityname;
EXECUTE IMMEDIATE 'select distinct(t.ActivitySort) from Crm_sales_chance t where t.SalesChanceId in''%'||salesChanceIds('||h||')||'%''' into activitySort;
EXECUTE IMMEDIATE 'select distinct(t.Activitytype) from Crm_sales_chance t where t.SalesChanceId in''%'||salesChanceIds('||h||')||'%''' into activitytype;
EXECUTE IMMEDIATE 'select distinct(t.Activityid) from Crm_sales_chance t where t.SalesChanceId in''%'||salesChanceIds('||h||')||'%''' into activityid;

select count(t.Autoid) into v_count from Cc_activityhandler t where t.Activityid = v_activityId and t.Handlerid = userCodes(h);
if (v_count=0) then
insert into Cc_activityhandler (Autoid,Activityname,Activitysort,Activitytype,Activityid,Createtime,Handlerid,Reserve1,Reserve2,Reserve3,Reserve4 )
VALUES(Cc_activityhandlerSequence.Nextval ,activityname,activitysort,activitytype,activityid,sysdate,userCodes(h),'','1','','');
end if;

end loop;
end doDataToAgent;



问题================================:
现在我感觉这块有点问题。。。
proc.setArray(1, (Array) userCodes);
proc.setArray(2, (Array) newSalesChanceIds);

另外各位大虾们看看我写的存储过程有问题没有啊。。。主要的传的数组的参数。。都不知道怎么弄了~!
分不够还可以在加,问题解决为主~!
...全文
267 22 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
leiru 2008-11-18
  • 打赏
  • 举报
回复
还是搞不定。。
proc.setArray(1, (Array) userCodes);
proc.setArray(2, (Array) newSalesChanceIds);

一开始我传进来的是Sring【】数组。。
就是传数组的时候有问题。。
ganglong99 2008-11-18
  • 打赏
  • 举报
回复
关注中。。。
yyxhcf 2008-11-15
  • 打赏
  • 举报
回复
关注。
fenghaolun 2008-11-14
  • 打赏
  • 举报
回复
顶 yinyuan1987
showde123 2008-11-13
  • 打赏
  • 举报
回复
只能帮顶
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 leiru 的回复:]
proc.setArray(1, (Array) userCodes);
proc.setArray(2, (Array) newSalesChanceIds);

一开始我传进来的是Sring【】数组。。
不过我看proc没有相应的接受参数。只有array。。
所以改成这个了。。
我也感觉这块有问题,不过不知道怎么改了。。
还有个setBytes()可以用。。。
[/Quote]
怎么改:
保证你的userCodes和newSalesChanceIds类型是String类型,
你可以修改方法的参数类型。
不然怎么和数据库的类型相对应啊

String ---Varchar2()

Array再数据库中无法对应啊
leiru 2008-11-13
  • 打赏
  • 举报
回复
恩,这个我知道。。
不知道今天怎么了,突然想到这个问题了~!
谢谢楼上的~!
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 Just_Simple 的回复:]
a.substring(3) ----------->找到"fghjkl"这个字符串
[/Quote]
晕,问题是你要是不知道索引值,你还能这样直接获取啊
Just_Simple 2008-11-13
  • 打赏
  • 举报
回复
a.substring(3) ----------->找到"fghjkl"这个字符串
sunwei_07 2008-11-13
  • 打赏
  • 举报
回复
关注,帮LZ顶
leiru 2008-11-13
  • 打赏
  • 举报
回复
proc.setArray(1, (Array) userCodes);
proc.setArray(2, (Array) newSalesChanceIds);

一开始我传进来的是Sring【】数组。。
不过我看proc没有相应的接受参数。只有array。。
所以改成这个了。。
我也感觉这块有问题,不过不知道怎么改了。。
还有个setBytes()可以用。。。
  • 打赏
  • 举报
回复
当然还有其他方法,不过这里就能满足你的条件了
查找相同字符串的方法,并返回索引值
  • 打赏
  • 举报
回复
兄弟,参考一下String的这个方法(API 中)
public int indexOf(int ch,
int fromIndex)从指定的索引开始搜索,返回在此字符串中第一次出现指定字符处的索引。

在此 String 对象表示的字符序列中,如果带有值 ch 的字符的索引不小于 fromIndex,则返回第一次出现该值的索引。对于位于 0 到 0xFFFF(包括 0 和 0xFFFF)范围内的 ch 值,返回值是

(this.charAt(k) == ch) && (k >= fromIndex)
为 true 的最小值 k。对于 ch 的其他值,返回值是
(this.codePointAt(k) == ch) && (k >= fromIndex)
为 true 的最小值 k。在任何情况下,如果此字符串中没有这样的字符在位置 fromIndex 处或其后出现,则返回 -1。
fromIndex 的值没有限制。如果它为负,它和 0 具有同样的效果:将搜索整个字符串。如果它大于此字符串的长度,则它具有等于此字符串长度的相同效果:返回 -1。

所有索引都在 char 值中指定(Unicode 代码单元)。


参数:
ch - 一个字符(Unicode 代码点)。
fromIndex - 开始搜索的索引。
返回:
在此对象表示的字符序列中第一次出现的大于或等于 fromIndex 的字符的索引,如果未出现该字符,则返回 -1。
leiru 2008-11-13
  • 打赏
  • 举报
回复
另外再问个小问题。。
String a="asdfghjkl";
String b="asd";

怎么找到"fghjkl"这个字符串啊。。。。
我记得有个方法是查找相同字符串的方法。。
主要是上面的问题了。。。
  • 打赏
  • 举报
回复
关注ing!
  • 打赏
  • 举报
回复
现在我感觉这块有点问题。。。
proc.setArray(1, (Array) userCodes);
proc.setArray(2, (Array) newSalesChanceIds);
我感觉也是这个类型转换的问题,你的程序中 userCodes,newSalesChanceIds都是Array类型

而在数据库中都是Varchar2()类型,所以建议你把Array类型转化String类型试试
fanyuanwaifdl 2008-11-13
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 nGX20080110 的回复:]
學習了
[/Quote]

up
NickCheng 2008-11-13
  • 打赏
  • 举报
回复
这个问题不好搞啊!
ngx20080110 2008-11-13
  • 打赏
  • 举报
回复
學習了
leiru 2008-11-12
  • 打赏
  • 举报
回复
我直接运行存储过程,报以下错误~!
exec doDataToAgent([0001, 007],['00145CF47AD82134F7132ABABACF096573BF','0014AF4FB9B56B74AF3833862D1D15A6374A', '0014370B71F58A322C490D8B29C583488FFF','00142076543600E3D9C1A79F9CEAB64A5001'],'01000000','0013B0CF83C1D221341FD4E9D80A8D261D1C')

begin doDataToAgent([0001, 007],['00145CF47AD82134F7132ABABACF096573BF','0014AF4FB9B56B74AF3833862D1D15A6374A', '0014370B71F58A322C490D8B29C583488FFF','00142076543600E3D9C1A79F9CEAB64A5001'],'01000000','0013B0CF83C1D221341FD4E9D80A8D261D1C'); end;

ORA-06550: 第 1 行, 第 21 列:
PLS-00103: 出现符号 "["在需要下列之一时:
( ) - + case mod
new not null others <an identifier>
<a double-quoted delimited-identifier> <a bind variable>
table avg count current exists max min prior sql stddev sum
variance execute multiset the both leading trailing forall
merge year month DAY_ hour minute second timezone_hour
timezone_minute timezone_region timezone_abbr time timestamp
interval date
<a string literal with character set specification>
<a number> <a sin
加载更多回复(1)

81,122

社区成员

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

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