Android連線網路資料庫的方式

sakura_echo發表於2018-11-08

android

前言

以連線 SQL Server 的網路資料庫為例,

常用的一共有兩種方式:

1.在Android工程中引入JDBC驅動,直接連線;

2.通過WebService等方法的間接連線。

採用JDBC方法主要問題是安全性不高,而且一旦要訪問的資料量過多,容易出問題。

另外,Android系統本身有對json或者xml直接解析的api,所以建議採用第二種方法,實用性與安全性都提高了。

正文

1 直接連線方式

1.1 使用jtds方法

1.1.1 匯入jtds相關依賴,具體可操作如下:

  首先,需要下載jdts最新的Jar包 https://sourceforge.net/projects/jtds/ 。

  然後,在工程目錄下,把jtdsjar包拷貝到libs資料夾。

  編譯專案。對lib進行引用。

  最後,編輯測試程式碼,執行測試。

1.1.2 用jdts連線sql server資料庫有兩種方式:

第一種就是指定使用者和密碼;第二種就是windows系統賬戶。

兩種連線有什麼不同呢?url不同,然後就是第二種不需要使用者名稱和密碼。

兩種url如下例:

第一種:url=”jdbc:jtds:sqlserver://192.168.1.1;database=Assess”;

第二種:url=”jdbc:jtds:sqlserver://192.168.1.1;database=Assess;integratedSecurity=true”;

然後的程式碼就差不多了:

Class.forName(DRIVER);

conn=DriverManager.getConnection(url,user_name, password);//第一種

conn=DriverManager.getConnection(url);//第二種

System.out.println("connect success!");

1.1.3 一個簡單的Android通過jdbc直接連線mysql資料庫的小例子

1.1.3.1 Android 連線MySQL資料庫
public class DBOpenHelper {
    //MySQL 驅動 根據使用的驅動自行調整使用
    //private static String driver = "com.mysql.jdbc.Driver";
    private static String driver = "net.sourceforge.jtds.jdbc.Driver";
    //MYSQL資料庫連線Url,此處需要注意根據使用的驅動不同,連線url的方式也會有所差別,本文使用的驅動為JTDS
    //private static String url = "jdbc:mysql://IP:埠號/資料庫";
    private static String url = "jdbc:jtds:sqlserver://IP:埠號;instanceName=SQLEXPRESS;databaseName=資料庫名";
    private static String user = "使用者名稱";//使用者名稱
    private static String password = "密碼";//密碼
 
    /**
     * 連線資料庫
     * */
 
    public static Connection getConn(){
        Connection conn = null;
        try {
            Class.forName(driver);//獲取MYSQL驅動
            conn = (Connection) DriverManager.getConnection(url, user, password);//獲取連線
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return conn;
    }
 
    /**
     * 關閉資料庫
     * */
 
    public static void closeAll(Connection conn, PreparedStatement ps){
        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (ps != null) {
            try {
                ps.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
 
    /**
     * 關閉資料庫
     * */
 
    public static void closeAll(Connection conn, PreparedStatement ps, ResultSet rs){
        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (ps != null) {
            try {
                ps.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (rs != null) {
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}
1.1.3.2 增刪改查
public class DBService {
 
    private Connection conn=null; //開啟資料庫物件
    private PreparedStatement ps=null;//操作整合sql語句的物件
    private ResultSet rs=null;//查詢結果的集合
 
    //DBService 物件
    public static DBService dbService=null;
 
    /**
     * 構造方法 私有化
     * */
 
    private DBService(){
 
    }
 
    /**
     * 獲取MySQL資料庫單例類物件
     * */
 
    public static DBService getDbService(){
        if(dbService==null){
            dbService=new DBService();
        }
        return dbService;
    }
 
 
    /**
     * 獲取User資訊    例句---查
     * */
 
    public List<User> getUserData(){
        //結果存放集合
        List<User> list=new ArrayList<User>();
        //MySQL 語句
        String sql="select * from user";
        //獲取連結資料庫物件
        conn= DBOpenHelper.getConn();
        try {
            if(conn!=null&&(!conn.isClosed())){
                ps= (PreparedStatement) conn.prepareStatement(sql);
                if(ps!=null){
                    rs= ps.executeQuery();
                    if(rs!=null){
                        while(rs.next()){
                            User u=new User();
                            u.setId(rs.getString("id"));
                            u.setName(rs.getString("name"));
                            u.setPhone(rs.getString("phone"));
                            u.setContent(rs.getString("content"));
                            u.setState(rs.getString("state"));
                            list.add(u);
                        }
                    }
                }
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        DBOpenHelper.closeAll(conn,ps,rs);//關閉相關操作
        return list;
    }
 
    /**
     * 修改資料庫中某個物件的狀態   例句---改
     * */
 
    public int updateUserData(String phone){
        int result=-1;
        if(!StringUtils.isEmpty(phone)){
            //獲取連結資料庫物件
            conn= DBOpenHelper.getConn();
            //MySQL 語句
            String sql="update user set state=? where phone=?";
            try {
                boolean closed=conn.isClosed();
                if(conn!=null&&(!closed)){
                    ps= (PreparedStatement) conn.prepareStatement(sql);
                    ps.setString(1,"1");//第一個引數state 一定要和上面SQL語句欄位順序一致
                    ps.setString(2,phone);//第二個引數 phone 一定要和上面SQL語句欄位順序一致
                    result=ps.executeUpdate();//返回1 執行成功
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        DBOpenHelper.closeAll(conn,ps);//關閉相關操作
        return result;
    }
 
    /**
     * 批量向資料庫插入資料   例句---增
     * */
 
    public int insertUserData(List<User> list){
        int result=-1;
        if((list!=null)&&(list.size()>0)){
            //獲取連結資料庫物件
            conn= DBOpenHelper.getConn();
            //MySQL 語句
            String sql="INSERT INTO user (name,phone,content,state) VALUES (?,?,?,?)";
            try {
                boolean closed=conn.isClosed();
                if((conn!=null)&&(!closed)){
                    for(User user:list){
                        ps= (PreparedStatement) conn.prepareStatement(sql);
                        String name=user.getName();
                        String phone=user.getPhone();
                        String content=user.getContent();
                        String state=user.getState();
                        ps.setString(1,name);//第一個引數 name 規則同上
                        ps.setString(2,phone);//第二個引數 phone 規則同上
                        ps.setString(3,content);//第三個引數 content 規則同上
                        ps.setString(4,state);//第四個引數 state 規則同上
                        result=ps.executeUpdate();//返回1 執行成功
                    }
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        DBOpenHelper.closeAll(conn,ps);//關閉相關操作
        return result;
    }
 
   
    /**
     * 刪除資料  例句---刪
     * */
 
    public int delUserData(String phone){
        int result=-1;
        if((!StringUtils.isEmpty(phone))&&(PhoneNumberUtils.isMobileNumber(phone))){
            //獲取連結資料庫物件
            conn= DBOpenHelper.getConn();
            //MySQL 語句
            String sql="delete from user where phone=?";
            try {
                boolean closed=conn.isClosed();
                if((conn!=null)&&(!closed)){
                    ps= (PreparedStatement) conn.prepareStatement(sql);
                    ps.setString(1, phone);
                    result=ps.executeUpdate();//返回1 執行成功
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        DBOpenHelper.closeAll(conn,ps);//關閉相關操作
        return result;
    }
 
}

2 通過WebService方式進行連線

通過實現WebService端相關功能,向外部提供相關API方法,使用JSON或者XML資料協議進行通訊,基本操作,具體細節不作贅述


相關文章