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);
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |