[Android căn bản] Bài 15: Kết nối SQL Server trong Android.

[Android căn bản] Bài 15: Kết nối SQL Server trong Android.

Chào các bạn chúng ta lại gặp nhau trong series Android truyền kì rồi và có lẽ đây là lần gặp cuối cùng trong Series này có vẻ cũng hơi buồn nhỉ.

Giới thiệu.

Ở bài trước tôi đã hướng dẫn các bạn lưu trữ dữ liệu trong SQLite rồi phải không nào. SQLite có thể lưu trữ các dữ liệu phức tạp nhưng nó có một nhược điểm là nó chỉ lưu cục bộ mà thôi tức là những dữ liệu được lưu trong SQLite thì chỉ có máy dó xài được chứ không thể chia sẻ cho các máy khác cùng sài được. và trong thực tế chúng ta thấy có một số ứng dụng theo dạng client-server tức là nó sẽ có một server data riêng được đặt ở đâu đó và các máy con được cài ứng dụng sẽ truy cập vào nguồn dữ liệu chung này. và thực tế chúng ta thường sử dụng Mysql, MongoDB… để lưu trữ dữ liệu nhưng có thể thông dụng và phổ biến hơn cả là SQL Server.

Vậy cách kết nối SQL Server như thế nào.

Kết nối SQL Server.

Kết nối SQL Server trong Android

Kết nối SQL Server trong Android

Thôi đi vô ví dụ cho nhanh. đây là bài cuối nên tôi sẽ không viết ứng dụng hoàn chỉnh mà chỉ đưa ra cách sử dụng còn các bạn dựa vào nó tự xào nấu lên một ứng dụng của riêng mình hề hề bữa cuối mà cho tôi làm biếng đi tí còn đi x… à nhầm đi chơi với gái.

Rồi vô vấn đề chính trong ví dụ của tôi là quản lí bạn gái nên tôi tạo một đối tượng tên là User trước đã.

Code:

package com.blog.akinosora.sqlserver;

/**
 * Created by Akinosora on 16/11/2017.
 */

public class User {
    private String Name;
    private int ID;

    public User(String name, int ID) {
        Name = name;
        this.ID = ID;
    }

    public int getID() {
        return ID;
    }

    public void setID(int ID) {
        this.ID = ID;
    }

    public String getName() {
        return Name;
    }

    public void setName(String name) {
        Name = name;
    }
}

Rồi có đối tượng User rồi giờ ta import thư viện JDBC vào project.

Thêm dòng này

compile 'net.sourceforge.jtds:jtds:1.3.0'

vô gralde.

Giờ ta viết lớp kết nối cho JDBC cái này làm một package riêng để tái sử dụng

Đầu tiên tạo package JDBC và trong đó có 3 package con là Objects, Models, Controllers.

Tạo đối tượng JDBCObject.

Code:

package com.blog.akinosora.sqlserver.JDBC.Objects;

/**
 * Created by Administrator on 8/18/2017.
 */

public class JDBCObject {
    private String sServerName;
    private String sUserId;
    private String sPwd;
    private String sDatabase;
    private String sClass;
    private String sPrort;

    public JDBCObject(String sServerName, String sUserId, String sPwd, String sDatabase, String sPrort) {
        this.sServerName = sServerName;
        this.sUserId = sUserId;
        this.sPwd = sPwd;
        this.sDatabase = sDatabase;
        this.sClass = "net.sourceforge.jtds.jdbc.Driver";
        this.sPrort = sPrort;
    }

    public String getsPrort() {
        return sPrort;
    }

    public void setsPrort(String sPrort) {
        this.sPrort = sPrort;
    }

    public String getsServerName() {
        return sServerName;
    }

    public void setsServerName(String sServerName) {
        this.sServerName = sServerName;
    }

    public String getsUserId() {
        return sUserId;
    }

    public void setsUserId(String sUserId) {
        this.sUserId = sUserId;
    }

    public String getsPwd() {
        return sPwd;
    }

    public void setsPwd(String sPwd) {
        this.sPwd = sPwd;
    }

    public String getsDatabase() {
        return sDatabase;
    }

    public void setsDatabase(String sDatabase) {
        this.sDatabase = sDatabase;
    }

    public String getsClass() {
        return sClass;
    }

    public void setsClass(String sClass) {
        this.sClass = sClass;
    }
}

Viết lớp JDBCModel

Code:

package com.blog.akinosora.sqlserver.JDBC.Models;

import android.annotation.SuppressLint;
import android.os.StrictMode;
import android.util.Log;

import com.blog.akinosora.sqlserver.JDBC.Objects.JDBCObject;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

/**
 * Created by Administrator on 8/18/2017.
 */
@SuppressLint("NewApi")
public class JDBCModel {

    public Connection getConnectionOf() {
        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
                .permitAll().build();
        StrictMode.setThreadPolicy(policy);
        Connection objConn = null;
        String sConnURL = null;
        JDBCObject objEntity = new JDBCObject("192.168.1.12", "sa", "123", "sqlserverapk", "1433");
        try {
            Class.forName(objEntity.getsClass());
            sConnURL = "jdbc:jtds:sqlserver://"
                    + objEntity.getsServerName() + ":" + objEntity.getsPrort() + ";"
                    + "databaseName=" + objEntity.getsDatabase()
                    + ";user=" + objEntity.getsUserId()
                    + ";password=" + objEntity.getsPwd() + ";";
            objConn = DriverManager.getConnection(sConnURL);
        } catch (SQLException se) {
            Log.e("ERRO", se.getMessage());
        } catch (ClassNotFoundException e) {
            Log.e("ERRO", e.getMessage());
        } catch (Exception e) {
            Log.e("ERRO", e.getMessage());
        }
        return objConn;
    }
}

Rồi tiếp lớp JDBC Controller.

Code:

package com.blog.akinosora.sqlserver.JDBC.Controllers;


import com.blog.akinosora.sqlserver.JDBC.Models.JDBCModel;

import java.sql.Connection;

/**
 * Created by Administrator on 8/18/2017.
 */

public class JDBCController {
    JDBCModel JdbcModel = new JDBCModel();

    public Connection ConnnectionData() {
        return JdbcModel.getConnectionOf();
    }
}

Rồi ta viết lớp UserModel để xử lý các tác vụ của ứng dụng như thêm, xóa, sửa vào cơ sở dữ liệu.

Code:

package com.blog.akinosora.sqlserver;

import com.blog.akinosora.sqlserver.JDBC.Controllers.JDBCController;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

/**
 * Created by Akinosora on 16/11/2017.
 */

public class UserModel {

    private JDBCController jdbcController = new JDBCController();
    private Connection connection;

    public UserModel() {
        connection = jdbcController.ConnnectionData(); // Tạo kết nối tới database
    }

    public List<User> getuserlist() throws SQLException {
        List<User> list = new ArrayList<>();
        Statement statement = connection.createStatement();// Tạo đối tượng Statement.
        String sql = "select * from User";
        // Thực thi câu lệnh SQL trả về đối tượng ResultSet. // Mọi kết quả trả về sẽ được lưu trong ResultSet
        ResultSet rs = statement.executeQuery(sql);
        while (rs.next()) {
            list.add(new User(rs.getString("Name"), rs.getInt("ID")));// Đọc dữ liệu từ ResultSet
        }
        connection.close();// Đóng kết nối
        return list;
    }

    public boolean Insert(User objUser) throws SQLException {
        Statement statement = connection.createStatement();// Tạo đối tượng Statement.
        String sql = "insert in to User(Name) values(" + objUser.getName() + ")";
        if (statement.executeUpdate(sql) > 0) { // Dùng lệnh executeUpdate cho các lệnh CRUD
            connection.close();
            return true;
        } else {
            connection.close();
            return false;
        }
    }

    public boolean Update(User objUser) throws SQLException {
        Statement statement = connection.createStatement();// Tạo đối tượng Statement.
        String sql = "Update User set Name = " + objUser.getName() + " where ID = " + objUser.getID();
        if (statement.executeUpdate(sql) > 0) {
            connection.close();
            return true;
        } else
            connection.close();
        return false;
    }

    public boolean Delete(User objUser) throws SQLException {
        Statement statement = connection.createStatement();// Tạo đối tượng Statement.
        String sql = "delete from User where ID = " + objUser.getID();
        if (statement.executeUpdate(sql) > 0){
            connection.close();
            return true;
        }

        else
            connection.close();
            return false;
    }

}

Xong đó là cách kết nối và truy vấn SQL Server bằng thư viện JDBC trong Android. Tôi đã hướng đẫn các bạn cách sử dụng thư viện JDBC rồi giờ bạn hãy thử vận dụng tất cả các kiến thức trong series này tự làm cho mình một ứng dụng đơn giản đi.

Và lời cuối tôi muốn nói là cảm ơn tất cả các bạn đã theo dõi và ủng hộ tôi trong series Android truyền kì chúc các bạn học tốt và có thể tự viết cho mình một ứng dụng trên mobile một cách hoàn chỉnh. Một lần nữa chào thân ái và quyết thắng ! thôi tôi đi x… à đi chơi đây tạm biệt. :3