Is there a way that we can connect an Android application to a central database server (e.g. MSSQLServer 2008)?
I have a MySQL database that is accessed by both webs
If you need to do that probably you donìt have already a 3 tier architecture. If this is the case consider writing a mobile web application. I did that to add mobile interface to a client server 2 tier legacy system.
I had a legacy Delphi client/server app, and i created by using Raudus a web app optimized for mobile devices. Of course this makes sense if you have Delphi skills, but for other languages/tecnhologies there are the coutnerparts.
This has already been asked here and also here. You might want to try a quick search before posting...the only difference is the DBMS but the idea is pretty much the same: create a web service layer that behaves like a bridge between your android client and your database.
Main Reasons:
There are a number of strategies you can employ to accomplish what you want to do. Given that the SOAP support for Android is non-existent, you're going to most likely want to push the data out in either XML or JSON format through WCF, ASP.NET, Ruby On Rails, PHP or any number of web frameworks.
Without knowing what your web application is currently running, it's hard to say how to best make that data connection. You can use WCF Data Services if you want to get up and running as fast as possible, and MSDN has a decent article on getting started with it:
http://msdn.microsoft.com/en-us/library/cc668792.aspx
I suggest that you examine your existing solution and figure out how to best extend that to push data out to your Android app.
All you have to do is use the appropriate driver, i'd recommend using JTDS, and version 1.2.5 seems to have worked well with android.Detailed instruction on how to use with eclipse can be found here A working code is available in github
/**
* This is a demo code to demonstrate db connection and operations and not
* meant for a live run.
*
*/
public class DBTestActivity extends Activity {
private Connection conn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dbtest);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.dbtest, menu);
return true;
}
@Override
protected void onResume() {
super.onResume();
(new DBConnection()).execute(null, null, null);
}
@Override
protected void onPause() {
super.onPause();
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
class DBConnection extends AsyncTask<String, String, String> {
@Override
protected String doInBackground(String... arg0) {
try {
Log.e("MSSQL", "Attempting to connect");
Class.forName("net.sourceforge.jtds.jdbc.Driver");
conn = DriverManager.getConnection(
"jdbc:jtds:sqlserver://yourserver.com/DBName",
"username", "password");
Log.e("MSSQL", "Connected");
} catch (Exception e) {
e.printStackTrace();
Log.e("MSSQL", e.toString());
}
return null;
}
}
class UserInfo {
String userID;
String userName;
String PhoneNo;
String age;
public UserInfo(String userID, String userName, String PhoneNo,
String age) {
this.userID = userID;
this.userName = userName;
this.PhoneNo = PhoneNo;
this.age = age;
}
public String getUserID() {
return userID;
}
public void setUserID(String userID) {
this.userID = userID;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPhoneNo() {
return PhoneNo;
}
public void setPhoneNo(String phoneNo) {
PhoneNo = phoneNo;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
}
class DBOperation {
public List<UserInfo> getAllUsers() throws SQLException {
Statement statement = getStatement(conn);
List<UserInfo> userlist = new ArrayList<UserInfo>();
ResultSet rs = statement.executeQuery("SELECT * FROM UserInfoTable");
rs.next();
int count = 0;
while (rs.next()) {
userlist.add(new UserInfo(rs.getString(1), rs.getString(2),
rs.getString(3), rs.getString(4)));
count++;
}
rs.close();
statement.close();
return userlist;
}
public void addUser(UserInfo info) {
Log.e("MSSQL", "in adduser");
Statement statement = getStatement(conn);
try {
ResultSet rs = statement.executeQuery("INSERT INTO UserInfoTable "
+ " VALUES ('1001', 'Bob', '333333', '33')");
rs.close();
statement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
private Statement getStatement(Connection connection) {
try {
return connection.createStatement();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
}
i've try to connect android via PHPto ms sql server, you can read here,am using httprequest and json. If you want to connect to Ms SQL Server 2005 or higher, you must download Microsoft Driver for PHP for SQL Server.
I've used php as web service to connect Ms SQL Server database, anyway you can used jdbc to connect from android direct to MS SQL Server database
Connecting your android application directly to an external database server is a bad idea, instead create a web application and access the database through that.