Virtuoso Open-Source Edition

  • Topic
  • Discussion
  • VOS.VirtTipsAndTricksGuideMultithreadJDBC(Last) -- DAVWikiAdmin? , 2017-06-29 07:41:35 Edit WebDAV System Administrator 2017-06-29 07:41:35

    How can I make Multi Thread Virtuoso connection using JDBC?

    This sample demonstrates simple java code for performing Multi Thread Virtuoso connection using JDBC. It starts 3 threads: one thread executes SPARQL select and two threads execute SPARQL inserts:

    import java.util.*;
    import java.sql.*;
    import java.math.*;
    
    public class MTtest extends Thread {
    
      int mode = 0;
      int startId = 0;
    
      static  String urlDB = "jdbc:virtuoso://localhost:1111";
    
     
     public MTtest(int _mode, int _init) {
       mode = _mode;
       startId = _init;
     }
    
    
    
     void prnRs(ResultSet rs)
     {
       try {
         ResultSetMetaData rsmd;
    
         System.out.println(">>>>>>>>");
         rsmd = rs.getMetaData();
         int cnt = rsmd.getColumnCount();
    
           while(rs.next()) {
             Object o;
    
             System.out.print("Thread:"+Thread.currentThread().getId()+"  ");
             for (int i = 1; i <= cnt; i++) {
               o = rs.getObject(i);
               if (rs.wasNull())
                 System.out.print("<NULL> ");
               else
                 System.out.print("["+ o + "] ");
             }
             System.out.println();
           }
    
       } catch (Exception e) {
         System.out.println(e);
         e.printStackTrace();
       }
       System.out.println(">>>>>>>>");
     }
    
    
    
    
     public static void main(String argv[])
     {
      try {
    
        Class.forName("virtuoso.jdbc3.Driver");
    
        Connection conn = DriverManager.getConnection(urlDB,"dba","dba");
        Statement st = conn.createStatement();
    
        st.execute("sparql clear graph <mttest>");
        st.execute("sparql insert into graph <mttest> { <xxx> <P01> \"test1\" }");
        st.execute("sparql insert into graph <mttest> { <xxx> <P01> \"test2\" }");
        st.execute("sparql insert into graph <mttest> { <xxx> <P01> \"test3\" }");
        st.execute("sparql insert into graph <mttest> { <xxx> <P01> \"test4\" }");
        st.execute("sparql insert into graph <mttest> { <xxx> <P01> \"test5\" }");
        conn.close();
    
    
        int init = 0;
    
        for(int i=0; i < 2; i++) {
          MTtest thr1 = new MTtest(1, init);
          init+=10;
    
          MTtest thr2 = new MTtest(0, init);
          init+=10;
    
          MTtest thr3 = new MTtest(0, init);
          init+=10;
    
          thr1.start();
          thr2.start();
          thr3.start();
    
          thr1.join();
          thr2.join();
          thr3.join();
        }
    
        System.out.println("===End===");
    
      } catch (Exception e) {
        System.out.print(e);
        e.printStackTrace();
      }
     }
    
    
     public void run( ) 
     {
      try {
    
        Connection conn = DriverManager.getConnection(urlDB,"dba","dba");
        Statement st;
    
        st = conn.createStatement();
    
        if (mode == 1) 
        {
          String query = "sparql SELECT * from <mttest> WHERE {?s ?p ?o}";
          ResultSet rs = st.executeQuery(query);
          prnRs(rs);
        }
        else
        {
          long id = Thread.currentThread().getId();
          for (int i =0; i < 5; i++)
            st.execute("sparql insert into graph <mttest> { <xxx"+startId+"> <P"+id+"> \"test"+i+"\" }");
    
          System.out.println("\nThread:"+Thread.currentThread().getId()+"  ===Rows Inserted===");
        }
    
    
        conn.close();
      
      } catch (SQLException e) {
            System.out.println("===========================================================");
            System.out.println(">>["+e.getMessage()+"]");
            System.out.println(">>["+e.getErrorCode()+"]");
            System.out.println(">>["+e.getSQLState()+"]");
            System.out.println(e);
            System.out.println("===========================================================");
            e.printStackTrace();
            System.exit(-1);
      } catch (Exception e) {
            System.out.println("===========================================================");
            System.out.println(e);
            System.out.println("===========================================================");
            e.printStackTrace();
            System.exit(-1);
      }
     } // run( )
    
    
    
    
    
    }
    

    Related