package io.mycat.sqlexecute;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
public class TestPrepareSql {
private static String url = "jdbc:mysql://localhost:8066/TESTDB?useServerPrepStmts=true"; // 使用服务端预处理
// private static String url = "jdbc:mysql://localhost:8066/TESTDB";
private static String user = "test";
private static String password = "test";
static {
try {
// 加载MySql的驱动类
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
System.out.println("找不到驱动程序类 ,加载驱动失败!");
e.printStackTrace();
}
}
public static void main(String[] args) {
// testServerPrepareSelectNormal();
// testServerPrepareSelectWithBingingParam();
// testServerPrepareInsertWithBingParam();
// testServerPrepareSelectWithNumericType();
testServerPrepareSelectWithDateType();
// testServerPrepareSelectWithStringType();
}
/**
* 测试服务端预处理批量插入,动态绑定插入参数
*/
public static void testServerPrepareInsertWithBingParam() {
Connection conn = null;
try {
conn = DriverManager.getConnection(url, user, password);
conn.setAutoCommit(false);
String sql = "insert into company(id,name) values(?,?)";
PreparedStatement pstmt = conn.prepareStatement(sql);
int startId = 100;
int batchSize = 10;
int count = 0;
while(count < batchSize) {
pstmt.setInt(1, startId);
pstmt.setString(2, "测试公司" + startId);
startId++;
count++;
pstmt.addBatch();
}
pstmt.executeBatch();
conn.setAutoCommit(true);
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
} finally {
if(conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
/**
* 测试服务端预处理查询,动态绑定查询参数
*/
public static void testServerPrepareSelectWithBingingParam() {
Connection conn = null;
try {
conn = DriverManager.getConnection(url, user, password);
String sql = "select * from company where id > ?";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, 1);
ResultSet rs = pstmt.executeQuery();
ResultSetMetaData rsmd = rs.getMetaData();
int columns = rsmd.getColumnCount();
for(int i = 1; i <= columns; i++) { // 输出列名
System.out.print(rsmd.getColumnName(i) + "\t");
}
System.out.println();
while(rs.next()) {
for(int i = 1; i <= columns; i++) { // 输出行
System.out.print(rs.getObject(i) + "\t");
}
System.out.println();
}
rs.close();
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
} finally {
if(conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
// mysql> desc test_numeric;
// +---------------+---------------+------+-----+---------+----------------+
// | Field | Type | Null | Key | Default | Extra |
// +---------------+---------------+------+-----+---------+----------------+
// | id | int(11) | NO | PRI | NULL | auto_increment |
// | tinyint_val | tinyint(4) | YES | | NULL | |
// | smallint_val | smallint(6) | YES | | NULL | |
// | mediumint_val | decimal(11,0) | YES | | NULL | |
// | int_val | int(11) | YES | | NULL | |
// | bigint_val | bigint(20) | YES | | NULL | |
// | decimal_val | decimal(7,2) | YES | | NULL | |
// | float_val | float(7,2) | YES | | NULL | |
// | double_val | double(7,2) | YES | | NULL | |
// +---------------+---------------+------+-----+---------+----------------+
// 9 rows in set (0.00 sec)
/**
* 测试服务端预处理查询返回Numeric类型数据是否有误
*/
public static void testServerPrepareSelectWithNumericType() {
String sql = "select * from test_numeric";
// mysql> select * from test_numeric;
// +----+-------------+--------------+---------------+-----------+------------+-------------+-----------+------------+
// | id | tinyint_val | smallint_val | mediumint_val | int_val | bigint_val | decimal_val | float_val | double_val |
// +----+-------------+--------------+---------------+-----------+------------+-------------+-----------+------------+
// | 1 | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL |
// | 2 | 123 | 12345 | 123456789 | 123456789 | 123456789 | 1234.33 | 1234.33 | 1234.33 |
// +----+-------------+--------------+---------------+-----------+------------+-------------+-----------+------------+
// 2 rows in set (0.00 sec)
testServerPrepareSelectSql(sql);
}
// mysql> desc test_date;
// +---------------+-----------+------+-----+-------------------+-----------------------------+
// | Field | Type | Null | Key | Default | Extra |
// +---------------+-----------+------+-----+-------------------+-----------------------------+
// | id | int(11) | NO | PRI | NULL | auto_increment |
// | date_val | date | YES | | NULL | |
// | datetime_val | datetime | YES | | NULL | |
// | timestamp_val | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
// +---------------+-----------+------+-----+-------------------+-----------------------------+
// 4 rows in set (0.01 sec)
/**
* 测试服务端预处理查询返回Date和Time类型数据是否有误
*/
public static void testServerPrepareSelectWithDateType() {
String sql = "select * from test_date";
// mysql> select * from test_date;
// +----+------------+---------------------+---------------------+
// | id | date_val | datetime_val | timestamp_val |
// +----+------------+---------------------+---------------------+
// | 1 | 2015-08-19 | 2015-08-26 16:02:11 | 2015-08-19 16:02:22 |
// | 2 | NULL | NULL | 2015-08-30 16:02:41 |
// +----+------------+---------------------+---------------------+
// 2 rows in set (0.00 sec)
testServerPrepareSelectSql(sql);
}
// mysql> desc test_string;
// +-------------+-------------+------+-----+---------+----------------+
// | Field | Type | Null | Key | Default | Extra |
// +-------------+-------------+------+-----+---------+----------------+
// | id | int(11) | NO | PRI | NULL | auto_increment |
// | char_val | char(10) | YES | | NULL | |
// | varchar_val | varchar(10) | YES | | NULL | |
// | text_val | text | YES | | NULL | |
// +-------------+-------------+------+-----+---------+----------------+
// 4 rows in set (0.01 sec)
/**
* 测试服务端预处理查询返回String类型数据是否有误
*/
public static void testServerPrepareSelectWithStringType() {
String sql = "select * from test_string";
// mysql> select * from test_string;
// +----+----------+-------------+----------+
// | id | char_val | varchar_val | text_val |
// +----+----------+-------------+----------+
// | 1 | AAA | BBB | CCC |
// | 2 | NULL | NULL | NULL |
// | 3 | | | |
// +----+----------+-------------+----------+
// 3 rows in set (0.00 sec)
testServerPrepareSelectSql(sql);
}
private static void testServerPrepareSelectSql(String sql) {
Connection conn = null;
try {
conn = DriverManager.getConnection(url, user, password);
PreparedStatement pstmt = conn.prepareStatement(sql);
ResultSet rs = pstmt.executeQuery();
ResultSetMetaData rsmd = rs.getMetaData();
int columns = rsmd.getColumnCount();
for(int i = 1; i <= columns; i++) { // 输出列名
System.out.print(rsmd.getColumnName(i) + "\t");
}
System.out.println();
while(rs.next()) {
for(int i = 1; i <= columns; i++) { // 输出行
System.out.print(rs.getObject(i) + "\t");
}
System.out.println();
}
rs.close();
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
} finally {
if(conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}