Kết Nối Android Với Sql Server

Android ứng dụng không thể giao tiếp một bí quyết trực tiếp cùng với SQL Server, bởi dễ dàng là vì SQL server thuộc về Microsoft còn android là con cưng của Google, nhị gã đẩy đà về công nghệ của cụ giới. Suôn sẻ thay, chúng ta có thể viết một ứng dụng bằng Java, cơ mà Java gồm lại hỗ trợ kỹ thuật chất nhận được người dùng có thể sử dụng ứng dụng apk để thao tác làm việc với cơ sở dữ liệu trên SQL Server. Để làm cho được điều này, thiết kế viên phải add thư viên jTDS vào ứng dụng apk của mình.

Bạn đang xem: Kết nối android với sql server

Các bạn có thể download ứng đông đảo phiên bản của jTDS trên đây.

Android application connect to SQL Server

Bài viết dựa vào những kinh nghiệm tay nghề cá nhân, quan yếu tránh ngoài sai sót, và phương châm là hổ trợ những các bạn mới làm quen với lập trình sẵn Android. Ý kiến đóng góp góp, xin phấn kích để lại bên dưới mục bình luạn. ^^

Để làm được bài bác này, chúng ta cần có rất nhiều hiểu cơ bản về Activity, chuyển thay đổi giữa những Activity, khái niệm về Intent trong Android. Đồng thời, tui cũng ứng dụng luôn luôn xử lý đa tiến trình với AsyncTask tuy vậy yêu mong truy vấn chỉ là một bản ghi mà lại mà luyên tập đến nó nhuyễn vị trước sau cũng cần xài anh này các mà ^^.

Ứng dụng Android làm việc với cơ sở tài liệu SQL Server

Bắt đầu với khởi chế tác một ứng dụng android trên apk Studio, bao gồm 2 Activity cần sử dụng để đổi khác giữa 2 màn hình ứng dụng. Tệp tin class HASH dùng làm băm chuỗi mật khẩu, SERVER không thông tin liên kết SQL Server và 2 class Activity dùng làm xử lý bên trên giao diện ứng dụng Android.

Xem thêm: Xem Phim Quái Vật Tám Chân Vietsub Hd, Xem Phim Quái Vật Tám Chân

*

 Các file java:

SERVER.java

 HASH.java

package com.example.erp_tuyen.loginsql;import android.app.Activity;import android.content.Intent;import android.os.AsyncTask;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.ProgressBar;import android.widget.TextView;import android.widget.Toast;import java.sql.Connection;import java.sql.ResultSet;import java.sql.Statement;public class UserActivity extends Activity EditText edtOldPw, edtNewPw, edtReNewPw; TextView tvUser,tvTitleUs; Button btnSubmit; ProgressBar progressBar; String un,pw,hoten; Boolean isUpdated; String z;
Override protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.activity_user); edtOldPw=(EditText)this.findViewById(R.id.edtOldPw); edtNewPw=(EditText)this.findViewById(R.id.edtNewPw); edtReNewPw=(EditText)this.findViewById(R.id.edtReNewPw); btnSubmit=(Button)this.findViewById(R.id.btnSubmit); tvUser=(TextView)this.findViewById(R.id.tvUser); tvTitleUs=(TextView)this.findViewById(R.id.tvTitleUs); progressBar=(ProgressBar)this.findViewById(R.id.progressBar); progressBar.setVisibility(View.GONE); Bundle extras=getIntent().getExtras(); //dùng đặc điểm này để hứng gói tin hồi nãy. Un=extras.getString("USERNAME","N/A");//lấy quý giá của loại key là USERNAME pw=extras.getString("PASSWORD","N/A");// như bên trên hoten=extras.getString("HOTEN","N/A");// vẫn nỗ lực tvUser.setText(hoten); btnSubmit.setOnClickListener(new View.OnClickListener()
Override public void onClick(View view) DoUpdate up= new DoUpdate(); up.execute("");//dùng gọi... Ak nhưng nói trong bài xích trước rồi ); void finishUpdate() //tạo gói Intent nhằm gửi trả cho dòng thằng tê nãy nó gửi với nó đang chờ trả if(isUpdated) Intent intent= new Intent(this,MainActivity.class); //bắn lại đến thằng MainActivity.class intent.putExtra("PASSWORD",pw); this.setResult(RESULT_OK,intent); super.finish(); //k có cái này thì nó k giữ hộ trả, nghĩa là bên đó sẽ nghĩ về là chưa có gửi tới public class DoUpdate extends AsyncTask
Override protected String doInBackground(String... Strings) String oPw,nPw,rnPw; oPw=edtOldPw.getText().toString(); nPw=edtNewPw.getText().toString(); rnPw=edtReNewPw.getText().toString(); isUpdated=false; if(oPw.trim().equals("")
Override protected void onPreExecute() progressBar.setVisibility(View.VISIBLE); // TODO Auto-generated method stub super.onPreExecute();
Override protected void onProgressUpdate(String... Values) //super.onProgressUpdate(values); //Cập nhật thông tin như chuyển đổi giá trị progressBar ở chỗ này !
Override protected void onPostExecute(String s) super.onPostExecute(s); Toast.makeText(UserActivity.this, s, Toast.LENGTH_LONG).show(); progressBar.setVisibility(View.GONE); finishUpdate();//gọi hàm trả lui gói Intent Và MainActivity.java

package com.example.erp_tuyen.loginsql;import android.app.Activity;import android.content.Intent;import android.os.AsyncTask;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.ProgressBar;import android.widget.TextView;import android.widget.Toast;import java.sql.Connection;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;public class MainActivity extends Activity EditText edtUserName, edtPaddword; Button btnLogin; ProgressBar pgbLoading; TextView tvResult; ResultSet resultSet; final int CHAN_PW_CODE=4; //Code dùng làm gửi gói Intent qua Activity_User
Override protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btnLogin=(Button)this.findViewById(R.id.btnLogin); edtUserName=(EditText)this.findViewById(R.id.edtUserName); edtPaddword=(EditText)this.findViewById(R.id.edtPassword); pgbLoading=(ProgressBar)this.findViewById(R.id.pgbLoading); tvResult=(TextView)this.findViewById(R.id.tvResult); pgbLoading.setVisibility(View.GONE); btnLogin.setOnClickListener(new View.OnClickListener()
Override public void onClick(View view) DoLogin doLogin = new DoLogin(); doLogin.execute("");//Thực thi doLogin.doInBackground(); );
Override protected void onActivityResult(int requestCode, int resultCode, Intent data) //Hàm này đang xử lý nếu khi mình gửi Intent là startActivityForResult, nhấn F8, bỏ qua cái này, xem xuống dưới trước if (requestCode == CHAN_PW_CODE) //Kiểm tra coi code trả về tất cả đúng lúc đầu không này sẽ không // Phài chắc chắn là là thành công mới giữ hộ if (resultCode == RESULT_OK) String rs=data.getStringExtra("PASSWORD"); Toast.makeText(this,"Mật khẩu đã biến thành "+ rs ,Toast.LENGTH_LONG).show(); edtPaddword.setText(rs); btnLogin.setVisibility(View.VISIBLE); //--------------------------------------------------------------------------------------------- public class DoLogin extends AsyncTask String z = ""; //cái này dùng để hứng tác dụng khi chạy hàm tróc nã vấn tới SQL vps String hoten=""; //Cái này sẽ đựng họ tên tương đối đầy đủ khi truy tìm vấn được Boolean isSuccess = false; //Biến phân biệt là gồm truy vấn thành công hay là không String userid = edtUserName.getText().toString(); // vươn lên là cục bộ, xài toàn bộ String password = edtPaddword.getText().toString(); // như bên trên
Override protected void onPreExecute() pgbLoading.setVisibility(View.VISIBLE); // nhảy cái nhỏ chạy lên btnLogin.setVisibility(View.GONE);//Ẩn button đi
Override protected String doInBackground(String... Params) try Connection con = SERVER.Connect(); //khởi tạo liên kết tới server, SERVER chính là class riêng, kiếm tìm trong table java if (con == null) z = "Không thể kết nối với Server"; //Tiếng Việt :D else String query = "select * from view_user where tendangnhap='" + userid + "' và matkhau='" + HASH.md5(password) + "'"; //trên đấy là câu truy vấn vấn Statement stmt = con.createStatement(); //blah blah blah resultSet = stmt.executeQuery(query); //thực thi với trả về một cục ResultSet, nó là gì thì Google, tui chịu đựng //ResultSet rs = SERVER.executeQuery(query); if(resultSet.next())//nếu trong resultset ko null thì đang trả về True hoten=resultSet.getString("hoten");//Hàm lấy cực hiếm của tên cột (trường: field name) truyền vào z = "Hi, " + hoten; //Hey, i'm TONA //tvResult.setText(hoten); isSuccess=true; //Oánh dấu nhà quyền, có tác dụng dấu thôi, để biết là hàm nó chạy cho tới đây, xíu bản thân dùng vươn lên là này khám nghiệm coi thử chạy tới đây hay không đó mà, chạy tới đây nghĩa là thành công xuất sắc rồi đó. Con.close();//Đấm vỡ mồm SERVER xong xuôi thì yêu cầu băng bó cho nó. else z = "Tài khoản ko tồn trên !";//Lại giờ đồng hồ Việt isSuccess = false; //Chạy tới đấy là hỏng rồi catch (Exception ex) isSuccess = false; z = "Lỗi !"; return z;//Trả về, sản phẩm này chính là cái doInBackground(String... Params), nó buộc mình yêu cầu trả về String, vị tui khai báo là String thôi, nếu lúc đầu khai hình dạng khác thì nó sẽ bắt trả về thứ hạng khác, trong bài bác trước mình trả về null, bởi mình chẳng cần bắt gì cả, chỉ chạy thôi.
Override protected void onProgressUpdate(String... Values) //super.onProgressUpdate(values); //Thường dùng để chuyển đổi trạng thái quy trình đang làm cho tới % blah blah, tui k xài
Override protected void onPostExecute(String r) // sau khi tiến trình dứt thì sẽ gọi tới hàm này pgbLoading.setVisibility(View.GONE);//Tắt dòng cục chuyển phiên xoay đi Toast.makeText(MainActivity.this,r,Toast.LENGTH_SHORT).show(); // dòng r đó là cái cơ mà nó rước từ mẫu hàm doInBackground(String... Params), hàm này return z (String), nó vẫn quăng qua hàm này để triển khai cái phía bên trong if(isSuccess) //kiểm tra độc lập của mình tất cả tới vị trí đánh dấu nãy không :D Toast.makeText(MainActivity.this,r,Toast.LENGTH_SHORT).show(); Intent intent= new Intent(MainActivity.this, UserActivity.class);//tạo ra một "gói" Intent gởi từ this mang đến UserActivity.class //setContentView(android.view.View); intent.putExtra("USERNAME",userid);//nhét mẫu userid vô intent và đặt khóa là USERNAME intent.putExtra("PASSWORD",password);//như trên intent.putExtra("HOTEN",hoten);//như cố gắng startActivityForResult(intent,CHAN_PW_CODE);//gửi đi, tất cả đợi trả về, ví như trả về đã chạy mẫu hồi nãy nhận F8 //startActivity(intent); dạng hình này sẽ không còn đợi trả về //intent Như vậy là hoàn chỉnh ứng dụng, và có thể chạy test được rồi.

Tuy nhiên gồm một vài xem xét sau:

Thư viện này chỉ tìm ra SQL Server gồm Instance là mang định của máy. Nhiều các bạn cài SQL hệ thống với Instance dạng COMPUTER_NAMEINSTANCE_NAME thì nó vẫn báo là không kiếm thấy được Server.Chỉ gật đầu đồng ý là IP Server. Lấy một ví dụ Instance mặc định của bản thân là TONA, mà lại IP máy mình là 172.20.10.2 thì bắt buộc mình phải kê là IP 172.20.10.2. IP này đề xuất đăng nhập được vào SQL vps nhé.Hãy tắt tường lửa nếu khách hàng test trên thứ nhà.

 Đây là kế quả đạt được: