c3p0是一個用于Java應(yīng)用程序的連接池庫。它可以管理連接池中的連接,從而提供更好的性能和更快的響應(yīng)時間。本文將介紹如何使用c3p0連接池來連接MySQL數(shù)據(jù)庫,并使用timer定期執(zhí)行數(shù)據(jù)操作。
// 導(dǎo)入c3p0庫
import com.mchange.v2.c3p0.ComboPooledDataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
public class C3p0TimerDemo {
private static ComboPooledDataSource dataSource; // 數(shù)據(jù)源
private static Connection conn; // 連接
private static PreparedStatement ps; // 預(yù)處理語句
private static ResultSet rs; // 結(jié)果集
// 初始化數(shù)據(jù)源
static {
dataSource = new ComboPooledDataSource();
dataSource.setUser("root");
dataSource.setPassword("password");
dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/test");
dataSource.setDriverClass("com.mysql.jdbc.Driver");
dataSource.setInitialPoolSize(5);
dataSource.setMaxPoolSize(10);
dataSource.setMinPoolSize(2);
dataSource.setAcquireIncrement(5);
}
// 查詢用戶表的數(shù)據(jù)
private static void query() throws SQLException {
conn = dataSource.getConnection();
String sql = "select * from user";
ps = conn.prepareStatement(sql);
rs = ps.executeQuery();
while (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
int age = rs.getInt("age");
Date createTime = rs.getTimestamp("create_time");
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("id: " + id + ", name: " + name + ", age: " + age +
", create_time: " + sdf.format(createTime));
}
}
// 插入數(shù)據(jù)到用戶表
private static void insert() throws SQLException {
conn = dataSource.getConnection();
String sql = "insert into user(name, age, create_time) values (?, ?, ?)";
ps = conn.prepareStatement(sql);
ps.setString(1, "Tom");
ps.setInt(2, 20);
ps.setTimestamp(3, new java.sql.Timestamp(System.currentTimeMillis()));
ps.executeUpdate();
}
public static void main(String[] args) {
TimerTask task = new TimerTask() {
@Override
public void run() {
try {
insert();
query();
} catch (SQLException e) {
e.printStackTrace();
}
}
};
Timer timer = new Timer();
timer.schedule(task, new Date(), 5000);
}
}
上述代碼中,首先在static塊中對c3p0數(shù)據(jù)源進行初始化。然后定義了兩個方法,一個是查詢用戶表的數(shù)據(jù),一個是向用戶表中插入數(shù)據(jù)的方法。在main方法中,創(chuàng)建了一個Timer對象,并調(diào)用schedule方法,設(shè)置定時任務(wù)的執(zhí)行時間間隔。定時任務(wù)中先執(zhí)行插入操作,再執(zhí)行查詢操作。這樣可以模擬不斷有新的數(shù)據(jù)插入進來的場景。
通過使用c3p0連接池和timer,我們可以輕松地實現(xiàn)MySQL數(shù)據(jù)庫數(shù)據(jù)的定時操作。不過,在實際應(yīng)用中,我們需要根據(jù)具體場景進行調(diào)整,包括調(diào)整連接池的參數(shù)以及定時任務(wù)執(zhí)行的時間間隔等。