【问题标题】:optimum way to insert values into sqlite DB将值插入 sqlite DB 的最佳方法
【发布时间】:2015-08-10 10:41:22
【问题描述】:

下面的方法是向sqlite数据库表中插入记录,我知道这个方法会在循环内部被多次调用。

我的问题是,下面的代码是将值插入 DB 表的最佳方法吗?或者可能有更好的方法,因为时间和性能很重要。

请指教。

代码

public void insertValues(String name, int age, String address, String gender) throws SQLException, ClassNotFoundException {
    Connection conn = getConnection();
    PreparedStatement ps = conn.prepareStatement("insert into "+TABLE_NAME+" ("+COL_1+", "+COL_2+", "+COL_3+", "+COL_4+") values (?, ?, ?, ?)");

    ps.setString(1, name);
    ps.setLong(2, age);
    ps.setString(3, address);
    ps.setString(4, gender);

    ps.addBatch();
    ps.executeBatch();

    ps.close();
    conn.close();
}

【问题讨论】:

  • 您没有正确使用批处理。您可以传递多个值并准备批处理并执行一次。现在您正在批量添加单个查询并执行它。
  • @NamanGala 请你提供一个例子。
  • 而不是传递单个姓名,年龄,地址,性别,传递dto的列表。在那个 dto 中,您可以设置这 4 个值。然后在您的方法中迭代该列表并在迭代中执行 addBatch 并在迭代结束后调用 executeBatch。
  • @NamanGala dto 是什么??
  • dto 是数据传输对象。它是简单的 pojo(普通的旧 java 对象),具有属性(姓名、年龄、地址、性别)以及 getter 和 setter

标签: java sqlite jdbc


【解决方案1】:

您应该使用连接池,而不是为每个插入打开新连接。为每个查询创建全新的连接会增加大量开销 - 在大多数情况下,打开连接将花费比实际查询执行更长的时间。

如果您使用的是 Spring,请考虑使用 Spring Boot,详情请参阅http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-sql.html#boot-features-connect-to-production-database

Spring boot 会为你自动配置连接池——你只需要将 jars 添加到类路径中。详细教程见 https://spring.io/guides/gs/relational-data-access/ JdbcTemplate 提供了访问 SQL 数据库的好方法(您也可以考虑使用 Spring Data,它更简单)。

【讨论】:

  • 你能举个例子吗?
  • 我正在使用 sqlite java
  • 我用的是java而不是android,还能用Spring连接池吗?
  • 我为每个重要的 java 项目(重要的=超过 500 行生产代码)推荐 Spring。我提供了针对 Java SE(不是 Android)的示例,因此它们绝对适合您。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多