天天看點

Android 連接配接網絡資料庫的方式前言正文

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/

 。

  然後,在工程目錄下,把

jtds

jar

包拷貝到

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資料協定進行通訊,基本操作,具體細節不作贅述