I am developing an android application and I am trying to connect Android Studio with an SQL Server Database. I try the following:
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
connectionSql = "jdbc:sqlserver://IP_SERVER/EXPRESS;database=myDatabase";
connection = DriverManager.getConnection(connectionSql,"username","password");
However, I am getting the following log error:
The TCP/IP connection to the host IP_SERVER/EXPRESS, port 1433 has failed. Error: "Unable to resolve host "IP_SERVER/EXPRESS": No address associated with hostname. Verify the connection properties. Make sure that an instance of SQL Server is running on the host and accepting TCP/IP connections at the port. Make sure that TCP connections to the port are not blocked by a firewall.".
However, I have added firewall rules to the server both inbound, outbound for this port. Also another local web apps (servlets) can access this database so the error I am getting isn't quite right.
I suspect that the problem is this IP_SERVER/EXPRESS. When I am logging from SQL Management Studio to the database I am using as server name the IP_SERVER\EXPRESS. So I tried the following
connectionSql = "jdbc:sqlserver://IP_SERVER\\EXPRESS;database=myDatabase";
but I got an error
FATAL EXCEPTION: main
Process: com.example.jdbc, PID: 11553
java.lang.AssertionError: numMsgsRcvd:1 should be less than numMsgsSent:1
at com.microsoft.sqlserver.jdbc.TDSReader.readPacket(IOBuffer.java:6430)
at com.microsoft.sqlserver.jdbc.TDSReader.nextPacket(IOBuffer.java:6396)
at com.microsoft.sqlserver.jdbc.TDSReader.ensurePayload(IOBuffer.java:6374)
at com.microsoft.sqlserver.jdbc.TDSReader.readBytes(IOBuffer.java:6675)
at com.microsoft.sqlserver.jdbc.TDSChannel$SSLHandshakeInputStream.readInternal(IOBuffer.java:846)
at com.microsoft.sqlserver.jdbc.TDSChannel$SSLHandshakeInputStream.read(IOBuffer.java:836)
at com.microsoft.sqlserver.jdbc.TDSChannel$ProxyInputStream.readInternal(IOBuffer.java:1006)
at com.microsoft.sqlserver.jdbc.TDSChannel$ProxyInputStream.read(IOBuffer.java:996)
at com.android.org.conscrypt.ConscryptEngineSocket$SSLInputStream.readFromSocket(ConscryptEngineSocket.java:945)
at com.android.org.conscrypt.ConscryptEngineSocket$SSLInputStream.processDataFromSocket(ConscryptEngineSocket.java:909)
at com.android.org.conscrypt.ConscryptEngineSocket$SSLInputStream.-$$Nest$mprocessDataFromSocket(Unknown Source:0)
at com.android.org.conscrypt.ConscryptEngineSocket.doHandshake(ConscryptEngineSocket.java:241)
at com.android.org.conscrypt.ConscryptEngineSocket.startHandshake(ConscryptEngineSocket.java:220)
at com.microsoft.sqlserver.jdbc.TDSChannel.enableSSL(IOBuffer.java:1802)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:2558)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:2216)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectInternal(SQLServerConnection.java:2067)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:1204)
at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:825)
at java.sql.DriverManager.getConnection(DriverManager.java:580)
at java.sql.DriverManager.getConnection(DriverManager.java:218)
at com.example.jdbc.SQLConnection.connectionClass(SQLConnection.java:26) <--- this line point to connection = DriverManager.getConnection(connectionSql,"username","password");
at com.example.jdbc.MainActivity$1.onClick(MainActivity.java:43)
at android.view.View.performClick(View.java:7506)
at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:1194)
at android.view.View.performClickInternal(View.java:7483)
at android.view.View.-$$Nest$mperformClickInternal(Unknown Source:0)
at android.view.View$PerformClick.run(View.java:29335)
at android.os.Handler.handleCallback(Handler.java:942)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:201)
at android.os.Looper.loop(Looper.java:288)
at android.app.ActivityThread.main(ActivityThread.java:7898)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)
Any help is appreciated, I am new to android programming.
Update
I also tried
connectionSql = "jdbc:sqlserver://IP_SERVER;instanceName=EXPRESS;database=myDatabase;integratedSecurity=true;";
but I am getting the same error...
java.lang.AssertionError: numMsgsRcvd:1 should be less than numMsgsSent:1