Lalit
Lalit

Reputation: 1703

Connect to SQL Server through android

At the very first I would like to know that "Is it possible to connect android application to SQL Server??"

If yes, then I am facing some problem with it. I have added jtds-1.2.5.jar

Here is my MainActivity:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {
EditText e1;
Button b1;
TextView t1;

String str = null;
String conUrl = null;
String uname,pass;

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    e1 = (EditText)findViewById(R.id.editText1);
    b1 = (Button)findViewById(R.id.button1);
    t1 = (TextView)findViewById(R.id.textView1);

    str = "SELECT [Name] from user_mast where username = 'a'";

    abc();

    b1.setOnClickListener(new OnClickListener() {
        public void onClick(View arg0) {
            //querySQL(str);
            Toast.makeText(getBaseContext(), "In Click", Toast.LENGTH_SHORT).show();
        }
    });
}

void abc()
{
    try{
        Class.forName("net.sourceforge.jtds.jdbc.Driver").newInstance();
        uname = "sa";
        pass = "123";

    ///////// This is the problem statement It is not get executed..
        Connection connect = DriverManager.getConnection("jdbc:jtds:sqlserver://server:1433/AlphaHotel;user="+ uname +";password=" + pass);

        Statement statement=connect.createStatement();
        ResultSet rs=statement.executeQuery(str);

        while(rs.next()){
        t1.setText(rs.getString(0));
        }
        connect.close();
        }catch (Exception e){
            e.printStackTrace();
        }
}
 @Override
   public boolean onCreateOptionsMenu(Menu menu) {
       // Inflate the menu; this adds items to the action bar if it is present.
       getMenuInflater().inflate(R.menu.main, menu);
       return true;
   }

}

Here is the error Logcat : (Error might be there on first two line only)

12-31 06:40:33.884: W/IInputConnectionWrapper(2376): showStatusIcon on inactive InputConnection
12-31 06:40:34.973: W/System.err(2376): android.os.NetworkOnMainThreadException
12-31 06:40:34.973: W/System.err(2376):     at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1117)
12-31 06:40:34.973: W/System.err(2376):     at java.net.InetAddress.lookupHostByName(InetAddress.java:385)
12-31 06:40:34.983: W/System.err(2376):     at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
12-31 06:40:34.983: W/System.err(2376):     at java.net.InetAddress.getAllByName(InetAddress.java:214)
12-31 06:40:35.033: W/System.err(2376):     at java.net.Socket.tryAllAddresses(Socket.java:108)
12-31 06:40:35.033: W/System.err(2376):     at java.net.Socket.<init>(Socket.java:177)
12-31 06:40:35.033: W/System.err(2376):     at java.net.Socket.<init>(Socket.java:149)
12-31 06:40:35.033: W/System.err(2376):     at net.sourceforge.jtds.jdbc.SharedSocket.<init>(SharedSocket.java:259)
12-31 06:40:35.033: W/System.err(2376):     at  net.sourceforge.jtds.jdbc.ConnectionJDBC2.<init>(ConnectionJDBC2.java:311)
12-31 06:40:35.063: W/System.err(2376):     at net.sourceforge.jtds.jdbc.Driver.connect(Driver.java:187)
12-31 06:40:35.063: W/System.err(2376):     at java.sql.DriverManager.getConnection(DriverManager.java:175)
12-31 06:40:35.063: W/System.err(2376):     at java.sql.DriverManager.getConnection(DriverManager.java:140)
12-31 06:40:35.063: W/System.err(2376):     at com.example.z.MainActivity.abc(MainActivity.java:61)
12-31 06:40:35.094: W/System.err(2376):     at  com.example.z.MainActivity.onCreate(MainActivity.java:38)
12-31 06:40:35.094: W/System.err(2376):     at android.app.Activity.performCreate(Activity.java:5104)
12-31 06:40:35.094: W/System.err(2376):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
12-31 06:40:35.094: W/System.err(2376):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
12-31 06:40:35.094: W/System.err(2376):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
12-31 06:40:35.094: W/System.err(2376):     at android.app.ActivityThread.access$600(ActivityThread.java:141)
12-31 06:40:35.103: W/System.err(2376):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
 12-31 06:40:35.103: W/System.err(2376):    at android.os.Handler.dispatchMessage(Handler.java:99)
12-31 06:40:35.103: W/System.err(2376):     at android.os.Looper.loop(Looper.java:137)
12-31 06:40:35.103: W/System.err(2376):     at android.app.ActivityThread.main(ActivityThread.java:5041)
12-31 06:40:35.113: W/System.err(2376):     at java.lang.reflect.Method.invokeNative(Native Method)
12-31 06:40:35.113: W/System.err(2376):     at java.lang.reflect.Method.invoke(Method.java:511)
12-31 06:40:35.113: W/System.err(2376):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
12-31 06:40:35.153: W/System.err(2376):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
12-31 06:40:35.153: W/System.err(2376):     at dalvik.system.NativeStart.main(Native Method)
12-31 06:40:35.323: I/Choreographer(2376): Skipped 35 frames!  The application may be doing too much work on its main thread.`

This is my Manifest file:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.z"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="18" />

<uses-permission android:name="android.permission.INTERNET" />

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name="com.example.z.MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

Kindly check out all the code and tell me

What should I add.

What might be the problem is.

Thank you.

Upvotes: 0

Views: 2281

Answers (2)

Rohodude
Rohodude

Reputation: 495

Try adding this to your onCreate method:

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy); 

And don't forget your internet permission in your AndroidManifest file!

<uses-permission android:name="android.permission.INTERNET"/>

Upvotes: 4

Brijesh Thakur
Brijesh Thakur

Reputation: 6788

I am not sure about Android connection with SQL Server. But the error clearly says :

android.os.NetworkOnMainThreadException

It means you are trying to create network connection on Main Thread which is not permitted on Android 4.0 or later.

Try to create network connection in background thread or in AsyncTask.

Read : http://developer.android.com/reference/android/os/AsyncTask.html

Upvotes: 0

Related Questions