package me.test; import java.sql.Connection; import java.sql.Date; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Calendar; public class TestJdbcQuery { public static void main(String[] args) throws ClassNotFoundException, SQLException { String driverClassName = null; String dbUrl = null; String dbUser = null; String dbPassword = null; int count = 1000; if (args.length > 0 && args[0].equalsIgnoreCase("MySql")) { driverClassName = "com.mysql.jdbc.Driver"; dbUrl = "jdbc:mysql://localhost:3306/test"; dbUser = "root"; dbPassword = "123456"; } else if (args.length > 0 && args[0].equalsIgnoreCase("PostgreSql")) { driverClassName = "org.postgresql.Driver"; dbUrl = "jdbc:postgresql://localhost:5432/postgres"; dbUser = "postgres"; dbPassword = "postgres"; } else { System.out.println("Usage : java me.test.TestJdbcQuery mysql|postgre [count]."); return; } if (args.length > 1) { try { count = Integer.valueOf(args[1]); } catch (NumberFormatException e) { System.err.println("Could not pars number, using default[" + count + "]"); } } Class.forName(driverClassName); Connection conn = DriverManager.getConnection(dbUrl, dbUser, dbPassword); conn.setAutoCommit(false); PreparedStatement preStmt = conn.prepareStatement("SELECT * FROM PERSON WHERE ID > 100", ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); System.out.println("=================== Starting jdbc query data for " + args[0] + "."); Runtime rt = Runtime.getRuntime(); long total = rt.totalMemory(); long free = rt.freeMemory(); long used1 = total - free; long beginTime = System.currentTimeMillis(); System.out.println("Start millisecond : " + beginTime); System.out.println("Start memroy : " + used1 + "/" + total); ResultSet rs = preStmt.executeQuery(); int fetchSize = rs.getFetchSize(); rs.absolute(100); int i = 0; for (; i < count && rs.next(); i++) { } if (i != count) { throw new RuntimeException("expected i=100, but actually was " + i); } long endTime = System.currentTimeMillis(); total = rt.totalMemory(); free = rt.freeMemory(); long used2 = total - free; System.out.println("=================== Done. "); System.out.println("End millisecond : " + endTime); System.out.println("End memroy : " + used2 + "/" + total); System.out.println("Cost time : " + (endTime - beginTime)); System.out.println("Added memory : " + (used2 - used1)); System.out.println("fetchSize : " + fetchSize); preStmt.close(); conn.commit(); conn.close(); } }