最近在研究sql server的協議狀況,想經過jdbc來操做sql server,打印出鏈接過程的日誌來分析數據包格式的狀況。下面是Java鏈接sql server的簡單程序。java
package com.java.dbtest; import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.logging.FileHandler; import java.util.logging.Handler; import java.util.logging.Level; import java.util.logging.Logger; import java.util.logging.SimpleFormatter; import org.apache.log4j.PropertyConfigurator; class SqlServerThreadClient extends Thread { public void SelectUser() { Connection conn = null; String url = "jdbc:sqlserver://localhost:1433;databaseName=pgbench"; String username = "sa"; String password = "0000"; String sql = "select id, name, age from bigtable"; try { Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); conn = DriverManager.getConnection(url, username, password); PreparedStatement stmt = conn.prepareStatement(sql); ResultSet rs = stmt.executeQuery(); while(rs.next()) { int id = rs.getInt("id"); String name = rs.getString("name"); int age = rs.getInt("age"); System.out.println("id:" + id + " name:" + name + " age:" + age); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); try { if (conn != null) conn.rollback(); } catch (SQLException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } finally { try { conn.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } public void run() { long bt = System.nanoTime(); SelectUser(); long at = System.nanoTime(); System.out.println("time:" + (at - bt) + " ns, " + (at-bt)/1000000 + " ms, " + (at-bt)/1000000000 + " s"); } }; public class TestConnectionSqlServer { public static void main(String[] args) { PropertyConfigurator.configure("log4j.properites"); Handler fh; try { fh = new FileHandler("./oracle_jdbc_log.log"); fh.setLevel(Level.ALL); fh.setFormatter(new SimpleFormatter()); Logger.getLogger("").addHandler(fh); Logger.getLogger("").setLevel(Level.ALL); } catch (SecurityException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } int jobNum = 1; int CliNum = 1; long bt = 0, at = 0; bt = System.nanoTime(); int k = 0; for (k = 0; k < jobNum; k++) { ArrayList<Thread> ta = new ArrayList<Thread>(); int i = 0; for (i = 0; i < CliNum; ++i) { SqlServerThreadClient tc = new SqlServerThreadClient(); Thread t = new Thread(tc); t.start(); ta.add(t); } for (i = 0; i < ta.size(); ++i) { try { ta.get(i).join(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } at = System.nanoTime(); long t = at - bt; System.out.println("sum Time:" + t + " ns, " + t/1000000 + " ms, " + t/1000000000 + " s"); } }