-1

I have a web application that needs to communicate with azure mysql database. I have included the connection string for jdbc as given in the portal and also modified the connection parameters to allow all inbound IPs. Still the database wont update with the input data. What should I do more?

My connection string is:

    String url ="jdbc:mysql://upes.mysql.database.azure.com:3306/students? useSSL=true&requireSSL=false"; 
    Connection myDbConn = DriverManager.getConnection(url, "****", "****");

My controller servlet code:

package Controller;


import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;

import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;

import java.util.Base64;

import java.sql.*;

import Model.*;


@WebServlet(name = "controller")
@MultipartConfig(maxFileSize = 16177215)
public class controller extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
         String v1 = request.getParameter("email");
         String v2 = request.getParameter("password");

         String v4 = request.getParameter("act");
         String v5 = request.getParameter("name");



         if(v4.equals("Register"))
         {
            request.getRequestDispatcher("/SignUp.jsp").forward(request, response);
         }
         if (v4.equals("SignUp")) 
         {
            Part filePart = request.getPart("photo");
            String email="";
            String name="";
            String base64Image="";
            InputStream image= filePart.getInputStream();
             newuser r = new newuser();
             r.register(v5, v1, v2, image);
             try{
                    PreparedStatement statement = null;
                    ResultSet resultSet = null;

                    //Class.forName("com.mysql.jdbc.Driver");  
                    //Connection con = DriverManager.getConnection("jdbc:mysql://upes.mysql.database.azure.com:3306/students?useSSL=true&requireSSL=false", "****", "****");
                    String url ="jdbc:mysql://upes.mysql.database.azure.com:3306/students?useSSL=true&requireSSL=false"; 
                    Connection myDbConn  = DriverManager.getConnection(url, "****", "****");
                    statement = myDbConn.prepareStatement("select * from studentdata where email=?");
                    statement.setString(1, v1);
                    resultSet=statement.executeQuery();
                    while(resultSet.next()) {
                    email=resultSet.getString("email");
                    name=resultSet.getString("name");

                    Blob blob = resultSet.getBlob("photo");
                    InputStream inputStream = blob.getBinaryStream();
                    ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
                    byte[] buffer = new byte[4096];
                    int bytesRead = -1;

                    while ((bytesRead = inputStream.read(buffer)) != -1) {
                        outputStream.write(buffer, 0, bytesRead);                  
                    }

                    byte[] imageBytes = outputStream.toByteArray();
                    base64Image = Base64.getEncoder().encodeToString(imageBytes);
                    inputStream.close();
                    outputStream.close();
                    }

             }
     catch(Exception e)
     {
         e.printStackTrace();
     }
    request.setAttribute("name", name);
  request.setAttribute("email", email);
  request.setAttribute("image",base64Image);
     request.getRequestDispatcher("/UserAccount.jsp").forward(request, response);

         }
         if(v4.equals("Log In"))
         {
           request.getRequestDispatcher("/SignIn.jsp").forward(request, response);
         }
         if(v4.equals("SignIn"))
         {
             String email="";
             String name="";
             String base64Image="";
             Check c= new Check();
             String res=c.checker(v1,v2);
             if(res.equals("SUCCESS")) {
                     try{
                            PreparedStatement statement = null;
                            ResultSet resultSet = null;

                            //sClass.forName("com.mysql.jdbc.Driver");  
                            //Connection myDbConn = DriverManager.getConnection("jdbc:mysql://upes.mysql.database.azure.com:3306/students?useSSL=true&requireSSL=false", "****", "****");
                            String url ="jdbc:mysql://upes.mysql.database.azure.com:3306/students?useSSL=true&requireSSL=false"; 
                            Connection myDbConn = DriverManager.getConnection(url, "****", "****");
                            statement = myDbConn.prepareStatement("select * from studentdata where email=?");
                            statement.setString(1, v1);
                            resultSet=statement.executeQuery();
                            while(resultSet.next()) {
                            email=resultSet.getString("email");
                            name=resultSet.getString("name");

                            Blob blob = resultSet.getBlob("photo");
                            InputStream inputStream = blob.getBinaryStream();
                            ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
                            byte[] buffer = new byte[4096];
                            int bytesRead = -1;

                            while ((bytesRead = inputStream.read(buffer)) != -1) {
                                outputStream.write(buffer, 0, bytesRead);                  
                            }

                            byte[] imageBytes = outputStream.toByteArray();
                            base64Image = Base64.getEncoder().encodeToString(imageBytes);
                            inputStream.close();
                            outputStream.close();
                            }

                     }
             catch(Exception e)
             {
                 e.printStackTrace();
             }
             request.setAttribute("name", name);
             request.setAttribute("email", email);
             request.setAttribute("image",base64Image);
             request.getRequestDispatcher("/UserAccount.jsp").forward(request, response);
             }


         }
         if(v4.equals("Sign Out"))
         {
           request.getRequestDispatcher("/welcome.jsp").forward(request, response);
         }

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {





    }


}```


1 Answers1

0

If you haven't turned the "Allow access to Azure services" option to 'ON', kindly turn it On and then verify the connection. To do this > On the MySQL server blade > open 'Settings' blade >> click 'Connection Security' > Select ON in "Allow access to Azure services", then Save.

I believe when you mentioned 'modified the connection parameters to allow all inbound IPs' - You have added/allowed Firewall rules for App Service 'outbound IP address' list to MySQL 'Connection security'. Note that Azure Database for MySQL has SSL enabled by default. If your application is not using SSL to connect to the database, then you need to disable SSL on the MySQL server.

Just to isolate, also please to review the connections via "Diagnose and solve problems'

enter image description here

AjayKumar
  • 2,812
  • 1
  • 9
  • 28