美文网首页Android技术知识Android开发
Android 连接网络数据库的方式

Android 连接网络数据库的方式

作者: Sakura_echo | 来源:发表于2018-10-29 09:35 被阅读2367次
    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数据协议进行通讯,基本操作,具体细节不作赘述

    相关文章

      网友评论

        本文标题:Android 连接网络数据库的方式

        本文链接:https://www.haomeiwen.com/subject/gftdtqtx.html