To enable prepared statements on the server side, MySQL Connector/J provides useServerPrepStmts parameter.
It doesn't work for MariaDB client. If there is a way to get prepared statements work through MariaDB client, I haven't yet found it.
The provided test case checks the global value of Prepared_stmt_count status variable, then attempts to prepare a statement on a connection with useServerPrepStmts, then checks the variable value again.
Output with MariaDB client library 1.1.0:
Prepared_stmt_count before prepare: 0
|
Prepared_stmt_count after prepare: 0
|
With MySQL Connector/J 5.1.23:
Prepared_stmt_count before prepare: 0
|
Prepared_stmt_count after prepare: 1
|
Test case:
import java.sql.DriverManager;
|
import java.sql.ResultSet;
|
import java.sql.Statement;
|
import java.sql.PreparedStatement;
|
|
|
public class BugPreparedStatement
|
{
|
public static void main (String argv[])
|
{
|
try {
|
|
Statement status = DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","").createStatement();
|
|
ResultSet rs = status.executeQuery("show global status like 'Prepared_stmt_count'");
|
if (rs.first()) {
|
System.out.println("Prepared_stmt_count before prepare: " + rs.getInt(2));
|
}
|
|
PreparedStatement pst = DriverManager.getConnection("jdbc:mysql://localhost:3306/test?useServerPrepStmts=true","root","").prepareStatement("select 1");
|
|
rs = status.executeQuery("show global status like 'Prepared_stmt_count'");
|
if (rs.first()) {
|
System.out.println("Prepared_stmt_count after prepare: " + rs.getInt(2));
|
}
|
}
|
catch (Exception e)
|
{
|
System.out.println("Exception: " + e + "\n");
|
e.printStackTrace();
|
}
|
}
|
}
|
|