「java多线程数据库操作」Java 多线程实现

博主:adminadmin 2022-12-26 22:57:07 61

本篇文章给大家谈谈java多线程数据库操作,以及Java 多线程实现对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

Java多线程并发操作数据库能否提高运行速度。

优化建议:

1. 在你的代码里大点评测下 每个操作花的时间. 譬如 dom4j解析花了多久, 存储到数据库花了多久等等.

2. 评测哪些地方可以并行操作以提高CPU利用率;

3. 数据库操作部分也可以做适当优化, 譬如批量提交可以显著提高插入速度, 譬如去除索引/主键后插入等;

4. 不同机器的IO速度是不同的, 因此应该能提供运行时的任务调度参数化, 譬如多少个dom4j解析线程, 入库的批量数量等;

java多线程读取数据库最后汇总

创建数据库

选择开始菜单中→程序→【Management SQL Server 2008】→【SQL Server Management Studio】命令,打开【SQL Server Management Studio】窗口,并使用Windows或 SQL Server身份验证建立连接。

在【对象资源管理器】窗口中展开服务器,然后选择【数据库】节点

右键单击【数据库】节点,从弹出来的快捷菜单中选择【新建数据库】命令。

执行上述操作后,会弹出【新建数据库】对话框。在对话框、左侧有3个选项,分别是【常规】、【选项】和【文件组】。完成这三个选项中的设置会后,就完成了数据库的创建工作,

在【数据库名称】文本框中输入要新建数据库的名称。例如,这里以“新建的数据库”。

在【所有者】文本框中输入新建数据库的所有者,如sa。根据数据库的使用情况,选择启用或者禁用【使用全文索引】复选框。

在【数据库文件】列表中包括两行,一行是数据库文件,而另一行是日记文件。通过单击下面的【添加】、【删除】按钮添加或删除数据库文件。

切换到【选项页】、在这里可以设置数据库的排序规则、恢复模式、兼容级别和其他属性。

切换到【文件组】页,在这里可以添加或删除文件组。

完成以上操作后,单击【确定】按钮关闭【新建数据库】对话框。至此“新建的数据”数据库创建成功。新建的数据库可以再【对象资源管理器】窗口看到。

java怎么多线程操作一个数据库

//将数据库中的数据条数分段

public void division(){

//获取要导入的总的数据条数

String sql3="SELECT count(*) FROM [CMD].[dbo].[mycopy1]";

try {

pss=cons.prepareStatement(sql3);

rss=pss.executeQuery();

while(rss.next()){

System.out.println("总记录条数:"+rss.getInt(1));

sum=rss.getInt(1);

}

//每30000条记录作为一个分割点

if(sum=30000){

n=sum/30000;

residue=sum%30000;

}else{

residue=sum;

}

System.out.println(n+" "+residue);

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

线程类

public MyThread(int start,int end) {

this.end=end;

this.start=start;

System.out.println("处理掉余数");

try {

System.out.println("--------"+Thread.currentThread().getName()+"------------");

Class.forName(SQLSERVERDRIVER);

System.out.println("加载sqlserver驱动...");

cons = DriverManager.getConnection(CONTENTS,UNS,UPS);

stas = cons.createStatement();

System.out.println("连接SQLServer数据库成功!!");

System.out.println("加载mysql驱动.....");

Class.forName(MYSQLDRIVER);

con = DriverManager.getConnection(CONTENT,UN,UP);

sta = con.createStatement();

// 关闭事务自动提交

con.setAutoCommit(false);

System.out.println("连接mysql数据库成功!!");

} catch (Exception e) {

e.printStackTrace();

}

// TODO Auto-generated constructor stub

}

public ArrayListMember getAll(){

Member member;

String sql1="select * from (select row_number() over (order by pmcode) as rowNum,*" +

" from [CMD].[dbo].[mycopy1]) as t where rowNum between "+start+" and "+end;

try {

System.out.println("正在获取数据...");

allmembers=new ArrayList();

rss=stas.executeQuery(sql1);

while(rss.next()){

member=new Member();

member.setAddress1(rss.getString("address1"));

member.setBnpoints(rss.getString("bnpoints"));

member.setDbno(rss.getString("dbno"));

member.setExpiry(rss.getString("expiry"));

member.setHispoints(rss.getString("hispoints"));

member.setKypoints(rss.getString("kypoints"));

member.setLevels(rss.getString("levels"));

member.setNames(rss.getString("names"));

member.setPmcode(rss.getString("pmcode"));

member.setRemark(rss.getString("remark"));

member.setSex(rss.getString("sex"));

member.setTelephone(rss.getString("telephone"));

member.setWxno(rss.getString("wxno"));

member.setPmdate(rss.getString("pmdate"));

allmembers.add(member);

// System.out.println(member.getNames());

}

System.out.println("成功获取sqlserver数据库数据!");

return allmembers;

} catch (SQLException e) {

// TODO Auto-generated catch block

System.out.println("获取sqlserver数据库数据发送异常!");

e.printStackTrace();

}

try {

rss.close();

stas.close();

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return null;

}

public void inputAll(ArrayListMember allmembers){

System.out.println("开始向mysql中写入");

String sql2="insert into test.mycopy2 values (?,?,?,?,?,?,?,?,?,?,?,?,?,?)";

try {

ps=con.prepareStatement(sql2);

System.out.println("-------------------------等待写入数据条数: "+allmembers.size());

for(int i=0;iallmembers.size();i++){

ps.setString(1, allmembers.get(i).getPmcode());

ps.setString(2, allmembers.get(i).getNames());

//System.out.println(allmembers.get(i).getNames());

ps.setString(3, allmembers.get(i).getSex());

ps.setString(4, allmembers.get(i).getTelephone());

ps.setString(5, allmembers.get(i).getAddress1());

ps.setString(6, allmembers.get(i).getPmdate());

ps.setString(7, allmembers.get(i).getExpiry());

ps.setString(8, allmembers.get(i).getLevels());

ps.setString(9, allmembers.get(i).getDbno());

ps.setString(10, allmembers.get(i).getHispoints());

ps.setString(11, allmembers.get(i).getBnpoints());

ps.setString(12, allmembers.get(i).getKypoints());

ps.setString(13, allmembers.get(i).getWxno());

ps.setString(14, allmembers.get(i).getRemark());

//插入命令列表

//ps.addBatch();

ps.executeUpdate();

}

//ps.executeBatch();

con.commit();

ps.close();

con.close();

this.flag=false;

System.out.println(Thread.currentThread().getName()+"---OK");

} catch (SQLException e) {

// TODO Auto-generated catch block

System.out.println("向mysql中更新数据时发生异常!");

e.printStackTrace();

}

}

@Override

public void run() {

// TODO Auto-generated method stub

while(trueflag){

this.inputAll(getAll());

}

}

java 多线程操作数据库

//将数据库中的数据条数分段

 public void division(){

  //获取要导入的总的数据条数

  String sql3="SELECT  count(*)  FROM [CMD].[dbo].[mycopy1]";

  try {

   pss=cons.prepareStatement(sql3);

   rss=pss.executeQuery();

   

   while(rss.next()){

   System.out.println("总记录条数:"+rss.getInt(1));

   sum=rss.getInt(1);

   }

   //每30000条记录作为一个分割点

   if(sum=30000){

    n=sum/30000;

    residue=sum%30000;

   }else{

    residue=sum;

   }

   

   System.out.println(n+"  "+residue);

   

  } catch (SQLException e) {

   // TODO Auto-generated catch block

   e.printStackTrace();

  }

  

 }

线程类

public MyThread(int start,int end) {

  this.end=end; 

     this.start=start;

  System.out.println("处理掉余数");

    try {

    

         System.out.println("--------"+Thread.currentThread().getName()+"------------");

    Class.forName(SQLSERVERDRIVER);

    System.out.println("加载sqlserver驱动...");

    cons = DriverManager.getConnection(CONTENTS,UNS,UPS);

    stas = cons.createStatement();

    System.out.println("连接SQLServer数据库成功!!");

    

    System.out.println("加载mysql驱动.....");

    Class.forName(MYSQLDRIVER);

    con = DriverManager.getConnection(CONTENT,UN,UP);

    sta = con.createStatement();

    // 关闭事务自动提交

    con.setAutoCommit(false);

    System.out.println("连接mysql数据库成功!!");

    

   } catch (Exception e) {

    e.printStackTrace(); 

   }

  // TODO Auto-generated constructor stub

 }

 

 

 public ArrayListMember getAll(){

  Member member;

  String sql1="select * from (select row_number() over (order by pmcode) as rowNum,*" +

    " from [CMD].[dbo].[mycopy1]) as t where rowNum between "+start+" and "+end;

  try {

   System.out.println("正在获取数据...");

   allmembers=new ArrayList();

   rss=stas.executeQuery(sql1);

   while(rss.next()){

    member=new Member();

    member.setAddress1(rss.getString("address1"));

    member.setBnpoints(rss.getString("bnpoints"));

    member.setDbno(rss.getString("dbno"));

    member.setExpiry(rss.getString("expiry"));

    member.setHispoints(rss.getString("hispoints"));

    member.setKypoints(rss.getString("kypoints"));

    member.setLevels(rss.getString("levels"));

    member.setNames(rss.getString("names"));

    member.setPmcode(rss.getString("pmcode"));

    member.setRemark(rss.getString("remark"));

    member.setSex(rss.getString("sex"));

    member.setTelephone(rss.getString("telephone"));

    member.setWxno(rss.getString("wxno"));

    member.setPmdate(rss.getString("pmdate"));

    allmembers.add(member);

   // System.out.println(member.getNames());

   }

   System.out.println("成功获取sqlserver数据库数据!");

   return allmembers;

   

  } catch (SQLException e) {

   // TODO Auto-generated catch block

   System.out.println("获取sqlserver数据库数据发送异常!");

   e.printStackTrace();

  }

  try {

   rss.close();

   stas.close();

  } catch (SQLException e) {

   // TODO Auto-generated catch block

   e.printStackTrace();

  }

  return null;

 }

 

 public void inputAll(ArrayListMember allmembers){

  System.out.println("开始向mysql中写入");

  String sql2="insert into test.mycopy2 values (?,?,?,?,?,?,?,?,?,?,?,?,?,?)";

  try {

   ps=con.prepareStatement(sql2);

   System.out.println("-------------------------等待写入数据条数: "+allmembers.size());

   for(int i=0;iallmembers.size();i++){

    ps.setString(1, allmembers.get(i).getPmcode());

    ps.setString(2, allmembers.get(i).getNames());

    //System.out.println(allmembers.get(i).getNames());

    ps.setString(3, allmembers.get(i).getSex());

    ps.setString(4, allmembers.get(i).getTelephone());

    ps.setString(5, allmembers.get(i).getAddress1());

    ps.setString(6, allmembers.get(i).getPmdate());

    ps.setString(7, allmembers.get(i).getExpiry());

    ps.setString(8, allmembers.get(i).getLevels());

    ps.setString(9, allmembers.get(i).getDbno());

    ps.setString(10, allmembers.get(i).getHispoints());

    ps.setString(11, allmembers.get(i).getBnpoints());

    ps.setString(12, allmembers.get(i).getKypoints());

    ps.setString(13, allmembers.get(i).getWxno());

    ps.setString(14, allmembers.get(i).getRemark());

    //插入命令列表

    //ps.addBatch();

    ps.executeUpdate();

   }

   //ps.executeBatch();

   con.commit();

   

   ps.close();

   con.close();

   this.flag=false;

   System.out.println(Thread.currentThread().getName()+"---OK");

  } catch (SQLException e) {

   // TODO Auto-generated catch block

   System.out.println("向mysql中更新数据时发生异常!");

   e.printStackTrace(); 

  }

 }

 @Override

 public void run() {

  // TODO Auto-generated method stub

  while(trueflag){

   this.inputAll(getAll());

  }

 }

java多线程操作数据库

首先,你的确定数据的主键是否可以使用序列自增。

如果可以那么你可以在插入数据的时候获取序列里的值,这样数据就不会重复了。

其次,可以创建一个公共方法,进行数据的插入操作,并且方法类型声明为 static synchronized

类型,这样基本上就不会出现数据重复的现象了

最后,要看你是怎么获得待插入源数据了,这个获得数据源的方法也做成static synchronized的公

共方法。

java 多线程存储数据库

以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();

    }

       

    /**

     * 将100条数据分成10份并启动10个线程分别操作

     */

    public static void allotThread() {

        ListString[] datas = buildDatas();

        for (int i=0; i100; i+=10) {

            ListString[] tenDatas = datas.subList(i, i + 10);

            insertData(tenDatas);

        }

    }

       

    /**

     * 创建100条模拟数据

     * @return

     */

    public static ListString[] buildDatas() {

        ListString[] datas = new ArrayListString[]();

        for (int i=0; i100; i++) {

            String[] data = {"id " + i, "name " + i};

            datas.add(data);

        }

        return datas;

    }

       

    /**

     * 启动线程进行数据插入操作

     * @param tenDatas

     */

    public static void insertData(final ListString[] 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=truecharacterEncoding=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();

        }

    }

}

关于java多线程数据库操作和Java 多线程实现的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

The End

发布于:2022-12-26,除非注明,否则均为首码项目网原创文章,转载请注明出处。