免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1853 | 回复: 5
打印 上一主题 下一主题

有关JDBC处理MYSQL数据库的问题,希望指教! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-09-28 13:21 |只看该作者 |倒序浏览
有关JDBC处理MYSQL数据库的问题,希望指教!
我用JAVA写了一个扫表的程序.实现功能是这样的.有一个A表.我用循环去实时扫表。发现有没有处理的数据f(flag=0)就处理。同时用update把他的flag置1(代表处理过了),同时这个表会有其它程序向里面放数据。
我现在碰到的问题是发现程序有时会莫名其妙的处理已经处理过的数据(flag=1),特别是有新数据插表时,但我的程序是select  * from A where flag=0这样来找数据的。
具体的程序代码如下:
try
{
    rs = stmt.executeQuery("select count(*) from A where FLAG=0";
    rs.next();
    rownumber = rs.getInt(1);
}
catch (SQLException ex5)
{
    AfxClass.Printinfo(ex5.getMessage());
}
if (rownumber >; 0)
{
    rs = stmt.executeQuery("select * from A where FLAG=0 limit 5000";
    while (rs.next())
    {
        if (SubmitMsg(rs) == -1)
        {
            //AfxClass.Printinfo("Send Submit message faild,close socket.";
            try
            {
                socket.close();
            }
            catch (IOException ex2)
            {
                System.out.println("socket is close!!!";
            }
            break ;
        }
        else
        {
            AfxClass.Printinfo("Send Submit message seccuss." + iID);
            //remove elements
            stmt = con.createStatement();
            stmt.executeUpdate("UPDATE A SET FLAG = '1' WHERE ID =" + iID);
        }
    }
}
那位高手能指点一下

论坛徽章:
0
2 [报告]
发表于 2005-09-28 14:06 |只看该作者

有关JDBC处理MYSQL数据库的问题,希望指教!

如果确实存在你说的情况的话,我能解释是的在你查询的结果,同时有其他程序修改了你查询的结果,也就是数据不同步。


我要问的是:
变量iID的值是哪里的,好像没有赋值?

论坛徽章:
0
3 [报告]
发表于 2005-09-28 14:54 |只看该作者

有关JDBC处理MYSQL数据库的问题,希望指教!

符的.在SubmitMsg(rs) 里我取出ID来符值的iID=Rs.getInt(1)

论坛徽章:
0
4 [报告]
发表于 2005-10-03 09:50 |只看该作者

有关JDBC处理MYSQL数据库的问题,希望指教!

我不明白为什么我在else里如果不stmt = con.createStatement();
的话.我下面stmt.executeUpdate("UPDATE A SET FLAG = '1' WHERE ID =" + iID);
就只能更新一次.然后跳出循环,我加上stmt = con.createStatement(); 的话。他就可以一直到rs移到最后一行的时候才结束

论坛徽章:
0
5 [报告]
发表于 2005-10-04 04:57 |只看该作者

有关JDBC处理MYSQL数据库的问题,希望指教!

要是这样,你只能用updatable的ResultSet了,一次查询出来以后在线修改。updatable的ResultSet性能不是很好,如果数据量和并发量不大可以使用。

论坛徽章:
0
6 [报告]
发表于 2005-10-04 21:19 |只看该作者

有关JDBC处理MYSQL数据库的问题,希望指教!

原帖由 "pandagao" 发表:
我不明白为什么我在else里如果不stmt = con.createStatement();
的话.我下面stmt.executeUpdate("UPDATE A SET FLAG = '1' WHERE ID =" + iID);
就只能更新一次.然后跳出循环,我加上stmt = con.createStatemen..........


一个stmt处理和数据库的一次事务操作,如果你要处理很多,你可以有jdbc的bacth处理方法,当它只不过把你要处理的sql语句存放在stmt中,在一次处理,
可以参考一些java的jdbc的一些资料.

有一点不明白的是,你程序中sockt.close()??
jdbc中封装了sockt,你不需要自己关闭stcok吧!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP