This is my method:
 @Override
public void deleteOneRecord(String tableName, String id) throws ClassNotFoundException, SQLException{
   // Validate the parameters here.
   // String sql = "DELETE FROM " + tableName + " WHERE " + column + "=" + value;
    String pKeyColumnName = "";
   // Statement stmt = conn.createStatement();
    DatabaseMetaData dmd = conn.getMetaData();
    ResultSet rs = dmd.getPrimaryKeys(null, null, tableName);
    while(rs.next()){
        pKeyColumnName = rs.getString("COLUMN_NAME");
        System.out.println("PK column name is " + pKeyColumnName);
    }
    //String sql = "delete from " + tableName + " where " + pKeyColumnName + "=" + id;
    String sql2 = "delete from ? where ?=?";
    PreparedStatement pstmt = conn.prepareStatement(sql2);
    pstmt.setString(1, tableName);
    pstmt.setString(2, pKeyColumnName);
    pstmt.setInt(3, Integer.parseInt(id));
    pstmt.executeUpdate(); 
}
This is my test main:
public static void main(String[] args) throws ClassNotFoundException, SQLException {
    DBStrategy db = new MySqlDBStrategy();
    db.openConnection("com.mysql.jdbc.Driver", "jdbc:mysql://localhost:3306/book", "root", "admin");
    System.out.println(db.findAllRecords("author", 0).toString());
    db.deleteOneRecord("author", "2");
    System.out.println(db.findAllRecords("author", 0).toString());
    db.closeConnection();
}
The db object works, open connection works, my find all records method works, 
then my deleteOneRecord blows up. I get this error:
Exception in thread "main" com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''author' where 'author_id'=2' at line 1
Now my syntax hasn't changed, I was running this code as just a Statement no problem a few minutes ago, so I must be using PreparedStatement incorrectly somehow.
Any help would be appreciated greatly.