首页javastatementJava JDBC - 如何使用CyclicBarrier来管理线程的顺序...

Java JDBC - 如何使用CyclicBarrier来管理线程的顺序...

我们想知道如何使用CyclicBarrier来管理线程的顺序。...
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

public class Main {
  public static void main(String[] args) throws Exception {
    String DEFAULT_DRIVER = "org.sqlite.JDBC";
    String DEFAULT_URL = "jdbc:sqlite:data/test.db";

    Connection conn = createConnection(DEFAULT_DRIVER, DEFAULT_URL);
    createTable(conn);

    List<Person> people = new ArrayList<Person>();
    people.add(new Person("A", "a"));
    people.add(new Person("B", "b"));
    people.add(new Person("C", "c"));
    saveAll(conn, people);

    List<Person> rows = findAll(conn);
    System.out.println(rows);
    close(conn);
  }

  private static List<Person> findAll(Connection conn) throws SQLException {
    List<Person> rows = new ArrayList<Person>();
    Statement stat = conn.createStatement();
    ResultSet rs = stat.executeQuery("select * from people;");
    while (rs.next()) {
      rows.add(new Person(rs.getString("name"), rs.getString("occupation")));
    }
    close(stat);
    close(rs);
    return rows;
  }

  private static void saveAll(Connection conn, List<Person> people)
      throws SQLException {
    PreparedStatement prep = conn.prepareStatement("insert into people values (?, ?);");
    for (Person person : people) {
      prep.setString(1, person.getName());
      prep.setString(2, person.getOccupation());
      prep.addBatch();
    }
    conn.setAutoCommit(false);
    prep.executeBatch();
    conn.setAutoCommit(true);
    close(prep);
  }
  static void createTable(Connection conn) throws SQLException {
    Statement stat = null;
    stat = conn.createStatement();
    stat.executeUpdate("drop table if exists people;");
    stat.executeUpdate("create table people (name, occupation);");
    close(stat);
  }

  static Connection createConnection(String driver, String url)
      throws ClassNotFoundException, SQLException {
    Class.forName(driver);
    Connection conn = DriverManager.getConnection(url);
    return conn;
  }
  static void close(Connection conn) {
    try {
      if (conn != null) {
        conn.close();
      }
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

  static void close(Statement stat) {
    try {
      if (stat != null) {
        stat.close();
      }
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

  private static void close(ResultSet rs) {
    try {
      if (rs != null) {
        rs.close();
      }
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}

class Person {
  private String name;
  private String occupation;

  Person(String name, String occupation) {
    this.name = name;
    this.occupation = occupation;
  }

  public String getName() {
    return this.name;
  }

  public String getOccupation() {
    return this.occupation;
  }

  public String toString() {
    StringBuilder sb = new StringBuilder();

    sb.append("{ name: ").append(this.name).append(", occupation: ")
        .append(this.occupation).append(" }");

    return sb.toString();
  }
}