永发信息网

java 多线程存储数据库

答案:1  悬赏:50  手机版
解决时间 2021-02-17 21:19
现在有100条数据,想用10个线程来执行,每个线程执行10条数据,那个大侠能给写一个多线程的Demo,谢谢!
最佳答案
以mysql为数据库写的一个粗陋的demo,你参考一下,希望不会因为代码过多被百度吞了——


import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class Test {

    public static void main(String[] args) {
        allotThread();
    }

    
    public static void allotThread() {
        List datas = buildDatas();
        for (int i=0; i<100; i+=10) {
            List tenDatas = datas.subList(i, i + 10);
            insertData(tenDatas);
        }
    }

    
    public static List buildDatas() {
        List datas = new ArrayList();
        for (int i=0; i<100; i++) {
            String[] data = {"id " + i, "name " + i};
            datas.add(data);
        }
        return datas;
    }

    
    public static void insertData(final List tenDatas) {
        new Thread(new Runnable() {
            public void run() {
                String sql = "insert into testtable (id, name) values (?, ?)";
                Connection conn = null;
                PreparedStatement pstmt = null;
                try {
                    conn = getConnection();
                    conn.setAutoCommit(false);
                    pstmt = getPstmt(conn, sql);
                    for (String[] data : tenDatas) {
                        pstmt.setString(1, data[0]);
                        pstmt.setString(2, data[1]);
                        pstmt.addBatch();
                    }
                    pstmt.executeBatch();
                    conn.commit();
                    conn.setAutoCommit(true);
                } catch (SQLException e) {
                    e.printStackTrace();
                    rollback(conn);
                } catch (ClassNotFoundException e) {
                    e.printStackTrace();
                } finally {
                    close(pstmt);
                    close(conn);
                }
            }
        }).start();
    }

    public static Connection getConnection() throws SQLException, ClassNotFoundException {
        Class.forName("com.mysql.jdbc.Driver");
        String dbUrl = "jdbc:mysql://localhost/test?useUnicode=true&characterEncoding=UTF-8";
        Connection conn = DriverManager.getConnection(dbUrl, "root", "tooeasy");
        return conn;
    }

    public static PreparedStatement getPstmt(Connection conn, String sql) throws SQLException, ClassNotFoundException {
        PreparedStatement pstmt = conn.prepareStatement(sql);
        return pstmt;
    }

    public static void rollback(Connection conn) {
        try {
            if (null != conn) {
                conn.rollback();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    public static void close(Connection conn) {
        try {
            if (null != conn) {
                conn.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    public static void close(PreparedStatement pstmt) {
        try {
            if (null != pstmt) {
                pstmt.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    public static void close(ResultSet rs) {
        try {
            if (null != rs) {
                rs.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
山药和西红柿能一起做汤吗
求植物大战僵尸V3。1修改器
蝗虫的若虫与成虫的区别是AA. 生殖器官的发育
东兴综合市场地址在什么地方,想过去办事
2007年3月22日是第15个世界水日,其主题为“
有什么东西可加高床脚高度
我拥有我快乐的开头和结尾
圣洁洗衣我想知道这个在什么地方
中级车 哪个保养最便宜 维修最便捷 最省心呢
某商店准备购进甲、乙两种商品进行销售.若每
2008年11月23日《南方日报》报道,全国一千多
办理叉车证在什么地方
理光1107卡纸报j023
开张剪彩仪式主要有哪些环节?
福星影像地址有知道的么?有点事想过去
推荐资讯
翻译三年有成,谓法度纲纪有成而化行也.渐民以
支付宝预支付卡是怎么使用的?
如何成为一个合格的航空维修工程师
鄞州区鄞县大道西段2号属于古林镇吗
现在姓 平 的还多吗?
顺德农商银行招聘是不是经常都有的,主要考什
拼图游戏可以锻炼智力么?最近刚开始玩奥尼克
最近左边肚子疼死了,尿尿都是黄的
长城皮卡2、8t风俊5价格多少
洪山区武汉老汉口热干面大王我想知道这个在什
从黄山火车站到九华山怎么走,做长途车还是做
在一条102米长的公路两侧栽树,从起点到终点
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?