We're updating the issue view to help you get more done.Learn more

PreparedStatement may not parse ' (') correctly

When using preparedStatement, mariadb java client does not parse ' ( ' ) correctly if they are the last chacacter inside a string.

Simple (non-prepared) Statement and Mysql Connector/J works OK

The following class reproduces the issue:

Test.java
import java.sql.*;

public class MariaDBTest {
	static Connection con;
	
	public static void main(String[] args) throws Exception {
		Class.forName("org.mariadb.jdbc.Driver");
		//Class.forName("com.mysql.jdbc.Driver");
		String dbUrl = "jdbc:mysql://localhost:3306/";
		con = DriverManager.getConnection(dbUrl, "root", "root");
		System.out.println("Connected to " + dbUrl);
		
		exec("CREATE DATABASE IF NOT EXISTS test");
		exec("USE test");
		exec("DROP TABLE IF EXISTS `test1`");
		exec("CREATE TABLE `test1` (`col1` varchar(50))");
		exec("INSERT INTO `test1` VALUES ('\\'a')"); //works
		exec("INSERT INTO `test1` VALUES ('\\'')");  //does not works

		con.close();
		System.out.println("Exiting with no errors");
	}
	
	static void exec(String sql) throws SQLException {
		System.out.println("sql: "+sql);
		// error occurs only with prepared statement 
		//con.createStatement().executeUpdate(sql);
		con.prepareStatement(sql).executeUpdate();
	}
}

Status

Assignee

Vladislav Vaintroub

Reporter

Telmo Brugnara