有这么一个理论,你看看能不能考虑下 假设有两个条件 A 和 B 如果A成立 则是 select * from tname where A=true 如果 A不成立 则取B 那就是 select * from tname where A<>true and B=true 那合起来就是 select * from tname where A=true or (A<>true and B=true)
update test set 字段1=case when 条件1 then 值1 when 条件2 then 值2 end
String sql2="UPDATE t_jsxx SET js_jk =case when js_xm='"+xm[i]+"'" + " then '1' else '0' end";这样就OK了
sql2="UPDATE t_jsxx SET js_jk ='1' where js_xm='"+xm[i]+"'"; sqlbean.executeUpdate(sql2); sql3="UPDATE t_jsxx SET js_jk ='0' where js_xm <> '"+xm[i]+"'"; sqlbean.executeInsert(sql3); 这两条语句分开都没有问题,就是放在一起结果就不对了。
那是你的页面问题,再检查检查吧。加个语句 看看循环了几次?<% String sql1,sql2,sql3,sql4,sql5; int i=0,cs=0; String[] xm = request.getParameterValues("xm"); for(i=0;i <xm.length;i++) { System.out.println(xm[i]); xm[i]=new String(xm[i].getBytes("ISO8859_1"),"GBK"); String sj=new String(request.getParameter("sj").getBytes("ISO8859_1"),"GBK"); String mc=new String(request.getParameter("mc").getBytes("ISO8859_1"),"GBK"); sql1="INSERT INTO t_jkb (jk_sj,jk_mc,jk_js) Values ('"+sj+"','"+mc+"','"+xm[i]+"')"; sqlbean.executeInsert(sql1); sql2="UPDATE t_jsxx SET js_jk ='1' where js_xm='"+xm[i]+"'"; sqlbean.executeUpdate(sql2); sql3="UPDATE t_jsxx SET js_jk ='0' where js_xm <> '"+xm[i]+"'"; sqlbean.executeInsert(sql3); sql4="select * from t_jsxx where js_xm='"+xm[i]+"'"; ResultSet RS1=sqlbean.executeQuery(sql4); if(RS1.next()) { cs=RS1.getInt("js_jkcs"); } sql5="UPDATE t_jsxx SET js_jkcs ='"+cs+"'+1 where js_xm='"+xm[i]+"'"; sqlbean.executeUpdate(sql5); } %>
是循环的问题。 建议把string[] xm = "..." 10个值连在一起。 stirng nameLink = "'" + xm[0] +"','" +xm[1]+"','" +... nameLink = "'name1','name2','name3',.....'name10'"然后strSql = "UPdate t_jsxx set js_jk = when xm in (" + nameLink +") then '1' else '0' end " 未测试
update mycolumn set mycolumn = (case when mycondition then myvalue1 else myvalue2 end)直接写的。可能会有错。 不过基本就是这样写。以前用过的。可以实现
是你的写法的问题 你每循环一次,xm[i]的值都不一样,而那个语句 String sql2="UPDATE t_jsxx SET js_jk =case when js_xm='"+xm[i]+"'" + " then '1' else '0' end"; 的意思是 值为xm[i]的 =1,不为xm[i]的 =0 你循环到最后一次当然是最后一个xm[i]的值是1了。而其他的都为0了。
只写这句就是你要的目的了 sql2="UPDATE t_jsxx SET js_jk ='1' where js_xm='"+xm[i]+"'";
用case...when啊,应该可以的吧!
sql2="UPDATE t_jsxx SET js_jk ='1' where js_xm='"+xm[i]+"'"; sqlbean.executeUpdate(sql2); sql3="UPDATE t_jsxx SET js_jk ='0' where js_xm <> '"+xm[i]+"'"; sqlbean.executeInsert(sql3); ------------------------------------------------------------String sql2="UPDATE t_jsxx SET js_jk =case when js_xm='"+xm[i]+"'" + " then '1' else '0' end"; sqlbean.executeUpdate(sql2); 改成下面的会出错?我觉得没问题啊,楼主好好检查一下,sql语句循环应该没问题啊
我晕!!还没搞明白?? 你自己设计的问题 你这种想法是不能用 循环的 !!! 只能在把 jk_js 的值默认设置成0,然后你再循环执行 sql2="UPDATE t_jsxx SET js_jk ='1' where js_xm='"+xm[i]+"'"; 这条语句就行了!!!
update 表 set 字段1 = 值2 where 条件2怎样把这两个语句合并成一句同时执行?
String sql1,sql2,sql3,sql4,sql5;
int i=0,cs=0;
String[] xm = request.getParameterValues("xm");
for(i=0;i<xm.length;i++)
{
xm[i]=new String(xm[i].getBytes("ISO8859_1"),"GBK");
String sj=new String(request.getParameter("sj").getBytes("ISO8859_1"),"GBK");
String mc=new String(request.getParameter("mc").getBytes("ISO8859_1"),"GBK");
sql1="INSERT INTO t_jkb (jk_sj,jk_mc,jk_js) Values ('"+sj+"','"+mc+"','"+xm[i]+"')";
sqlbean.executeInsert(sql1);
sql2="UPDATE t_jsxx SET js_jk ='1' where js_xm='"+xm[i]+"'";
sqlbean.executeUpdate(sql2);
sql3="UPDATE t_jsxx SET js_jk ='0' where js_xm<>'"+xm[i]+"'";
sqlbean.executeInsert(sql3);
sql4="select * from t_jsxx where js_xm='"+xm[i]+"'";
ResultSet RS1=sqlbean.executeQuery(sql4);
if(RS1.next())
{
cs=RS1.getInt("js_jkcs");
}
sql5="UPDATE t_jsxx SET js_jkcs ='"+cs+"'+1 where js_xm='"+xm[i]+"'";
sqlbean.executeUpdate(sql5);
}
%>
sqlbean.executeUpdate(sql2);
sql3="UPDATE t_jsxx SET js_jk ='0' where js_xm <> '"+xm[i]+"'";
sqlbean.executeInsert(sql2); // 换成 sqlbean.executeUpdate(sql3);
我以前写的都好使的.
boolean isSuccess = false;
DBPersistenceManager pm = this.getECPersistenceManager();
try {
String sql = "";
/** 根据修改标志,修改不同的字段 **/
if("0".equals(flag)){
sql = "UPDATE EC_COMP_NOTICE SET S_READ_FLAG=? WHERE ID=? AND SENDER=?";
pm.executeUpdate(sql, new Object[]{"0", noticeID, psnId});
}
else{
sql = "UPDATE EC_COMP_NOTICE_PERSON SET R_READ_FLAG=? WHERE ID=? ";
pm.executeUpdate(sql, new Object[]{"0", tempID});
}
isSuccess = true;
} catch (DrmException ex) {
EcLogger.error("查询已发送通知记录列表出现异常:", ex.getMessage());
throw new EcBusinessException(ex.getMessage());
} finally {
if (pm != null)
pm.close();
}
最好用预处理的方式写.就是?号传值,这样如果字段带" ' " 也不会有错
假设有两个条件 A 和 B
如果A成立
则是 select * from tname where A=true
如果 A不成立 则取B
那就是 select * from tname where A<>true and B=true
那合起来就是 select * from tname where A=true or (A<>true and B=true)
set 字段1=case when 条件1 then 值1
when 条件2 then 值2
end
sqlbean.executeUpdate(sql2);
sql3="UPDATE t_jsxx SET js_jk ='0' where js_xm <> '"+xm[i]+"'";
sqlbean.executeInsert(sql3);
这两条语句分开都没有问题,就是放在一起结果就不对了。
String sql1,sql2,sql3,sql4,sql5;
int i=0,cs=0;
String[] xm = request.getParameterValues("xm");
for(i=0;i <xm.length;i++)
{ System.out.println(xm[i]);
xm[i]=new String(xm[i].getBytes("ISO8859_1"),"GBK");
String sj=new String(request.getParameter("sj").getBytes("ISO8859_1"),"GBK");
String mc=new String(request.getParameter("mc").getBytes("ISO8859_1"),"GBK");
sql1="INSERT INTO t_jkb (jk_sj,jk_mc,jk_js) Values ('"+sj+"','"+mc+"','"+xm[i]+"')";
sqlbean.executeInsert(sql1);
sql2="UPDATE t_jsxx SET js_jk ='1' where js_xm='"+xm[i]+"'";
sqlbean.executeUpdate(sql2);
sql3="UPDATE t_jsxx SET js_jk ='0' where js_xm <> '"+xm[i]+"'";
sqlbean.executeInsert(sql3);
sql4="select * from t_jsxx where js_xm='"+xm[i]+"'";
ResultSet RS1=sqlbean.executeQuery(sql4);
if(RS1.next())
{
cs=RS1.getInt("js_jkcs");
}
sql5="UPDATE t_jsxx SET js_jkcs ='"+cs+"'+1 where js_xm='"+xm[i]+"'";
sqlbean.executeUpdate(sql5);
}
%>
建议把string[] xm = "..." 10个值连在一起。
stirng nameLink = "'" + xm[0] +"','" +xm[1]+"','" +...
nameLink = "'name1','name2','name3',.....'name10'"然后strSql = "UPdate t_jsxx set js_jk = when xm in (" + nameLink +") then '1' else '0' end "
未测试
不过基本就是这样写。以前用过的。可以实现
你每循环一次,xm[i]的值都不一样,而那个语句
String sql2="UPDATE t_jsxx SET js_jk =case when js_xm='"+xm[i]+"'" + " then '1' else '0' end";
的意思是 值为xm[i]的 =1,不为xm[i]的 =0 你循环到最后一次当然是最后一个xm[i]的值是1了。而其他的都为0了。
sql2="UPDATE t_jsxx SET js_jk ='1' where js_xm='"+xm[i]+"'";
sqlbean.executeUpdate(sql2);
sql3="UPDATE t_jsxx SET js_jk ='0' where js_xm <> '"+xm[i]+"'";
sqlbean.executeInsert(sql3);
------------------------------------------------------------String sql2="UPDATE t_jsxx SET js_jk =case when js_xm='"+xm[i]+"'" + " then '1' else '0' end";
sqlbean.executeUpdate(sql2); 改成下面的会出错?我觉得没问题啊,楼主好好检查一下,sql语句循环应该没问题啊
只能在把 jk_js 的值默认设置成0,然后你再循环执行 sql2="UPDATE t_jsxx SET js_jk ='1' where js_xm='"+xm[i]+"'"; 这条语句就行了!!!