129 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			129 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| package maxscale.java.prep_stmt;
 | |
| 
 | |
| import maxscale.java.MaxScaleConfiguration;
 | |
| import maxscale.java.MaxScaleConnection;
 | |
| 
 | |
| import java.sql.Connection;
 | |
| import java.sql.DriverManager;
 | |
| import java.sql.SQLException;
 | |
| import java.sql.Statement;
 | |
| import java.sql.PreparedStatement;
 | |
| import java.sql.ResultSet;
 | |
| import java.util.ArrayList;
 | |
| 
 | |
| public class PrepStmtTest {
 | |
| 
 | |
|     public static final int RWSPLIT_PORT = 4006;
 | |
|     public static final String DATABASE_NAME = "test";
 | |
|     public static final String TABLE_NAME = "t1";
 | |
| 
 | |
|     public static final int THREADS = 5;
 | |
|     public static final int ITERATIONS_NORMAL = 100;
 | |
|     public static final int ITERATIONS_SMOKE = 50;
 | |
|     public static int test_iter = ITERATIONS_NORMAL;
 | |
| 
 | |
|     public static final String INSERT_SQL = "INSERT INTO " + DATABASE_NAME + "." + TABLE_NAME + " VALUES (NULL, ?)";
 | |
|     public static final String SELECT_SQL = "SELECT * FROM " + DATABASE_NAME + "." + TABLE_NAME + " WHERE  id = ?";
 | |
| 
 | |
|     public static String conn_str = null;
 | |
|     public static String user = null;
 | |
|     public static String password = null;
 | |
| 
 | |
|     public static void main(String[] args) {
 | |
|         boolean error = false;
 | |
| 
 | |
|         try {
 | |
|             MaxScaleConfiguration config = new MaxScaleConfiguration("java_prep_stmt");
 | |
|             MaxScaleConnection maxscale = new MaxScaleConnection();
 | |
| 
 | |
|             try {
 | |
|                 test_iter = ITERATIONS_SMOKE;
 | |
| 
 | |
|                 // Prepare test database
 | |
|                 System.out.println("Creating databases and tables..");
 | |
|                 maxscale.query(maxscale.getConnMaster(), "DROP DATABASE IF EXISTS " + DATABASE_NAME);
 | |
|                 maxscale.query(maxscale.getConnMaster(), "CREATE DATABASE " + DATABASE_NAME);
 | |
|                 maxscale.query(maxscale.getConnMaster(), "CREATE TABLE " + DATABASE_NAME
 | |
|                                + "." + TABLE_NAME + "(id int primary key auto_increment, data varchar(128))");
 | |
| 
 | |
| 
 | |
|                 conn_str = "jdbc:mariadb://" + maxscale.getIp() + ":" +
 | |
|                     MaxScaleConnection.READWRITESPLIT_PORT + "/test?";
 | |
|                 user = maxscale.getUser();
 | |
|                 password = maxscale.getPassword();
 | |
| 
 | |
|                 ArrayList<Thread> threads = new ArrayList<>();
 | |
| 
 | |
|                 for (int i = 0; i < THREADS; i++) {
 | |
|                     threads.add(new Thread(){
 | |
|                             public void run() {
 | |
| 
 | |
|                                 try  {
 | |
|                                     Connection conn = DriverManager.getConnection(conn_str, user, password);
 | |
|                                     conn.setAutoCommit(false);
 | |
| 
 | |
|                                     for (int i = 0; i < test_iter; i++) {
 | |
|                                         conn.isValid(1);
 | |
| 
 | |
|                                         PreparedStatement ps_insert = conn.prepareStatement(PrepStmtTest.INSERT_SQL);
 | |
| 
 | |
|                                         ps_insert.setString(1, String.valueOf(i));
 | |
|                                         ps_insert.executeUpdate();
 | |
|                                         conn.commit();
 | |
| 
 | |
|                                         conn.isValid(1);
 | |
| 
 | |
|                                         PreparedStatement ps_select = conn.prepareStatement(PrepStmtTest.SELECT_SQL);
 | |
|                                         ps_select.setInt(1, i);
 | |
|                                         ResultSet rset = ps_select.executeQuery();
 | |
| 
 | |
|                                         conn.isValid(1);
 | |
| 
 | |
|                                         while (rset.next()) {
 | |
|                                             int r = rset.getInt(1);
 | |
|                                             String s = rset.getString(2);
 | |
|                                             if (i % 10 == 0) {
 | |
|                                                 System.out.println("Result: " + String.valueOf(r) + " " + s);
 | |
|                                             }
 | |
|                                         }
 | |
|                                     }
 | |
|                                     conn.close();
 | |
|                                 } catch (Exception ex) {
 | |
|                                     System.out.println("Error: " + ex.getMessage());
 | |
|                                     ex.printStackTrace();
 | |
|                                     System.exit(1);
 | |
|                                 }
 | |
|                             }
 | |
|                         });
 | |
|                 }
 | |
| 
 | |
|                 System.out.println("Starting " + String.valueOf(threads.size()) + " threads");
 | |
| 
 | |
|                 for (Thread a: threads) {
 | |
|                     a.start();
 | |
|                 }
 | |
| 
 | |
|                 for (Thread a: threads) {
 | |
|                     a.join();
 | |
|                 }
 | |
| 
 | |
|             } catch (Exception ex) {
 | |
|                 error = true;
 | |
|                 System.out.println("Error: " + ex.getMessage());
 | |
|                 ex.printStackTrace();
 | |
|             }
 | |
| 
 | |
|             config.close();
 | |
|         }
 | |
|         catch (Exception ex) {
 | |
|             error = true;
 | |
|             System.out.println("Error: " + ex.getMessage());
 | |
|             ex.printStackTrace();
 | |
|         }
 | |
| 
 | |
|         if (error) {
 | |
|             System.exit(1);
 | |
|         }
 | |
|     }
 | |
| }
 | 
