最近老师让我用jtds这个jar包远程访问数据库中的数据,虽然不难,但有几个点还是要注意一下的。

1、jtds的jar包我使用的是1.2.7这个版本的,如果是Java工程使用的是1.3.1这个版本,Android工程不能使用1.3.1否则连接不上数据库

2、远程数据库服务器的防火墙要关闭

下面是如何使用jtds的案例

Javabean有两个字段一个是id,一个是stuName

package com.ht.jdts;

public class StuDomain {
    private String id;
    private String stuName;
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getStuName() {
        return stuName;
    }
    public void setStuName(String stuName) {
        this.stuName = stuName;
    }
}

访问sqlserver的工具类

package com.example.jdtsproc;

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

public class SqlHelper {
    private String drive = "net.sourceforge.jtds.jdbc.Driver";
    private String connStr;
    private String server;
    private String dbName;
    private String userName;
    private String userPwd;
    private Connection con;
    private PreparedStatement pstm;
    private ResultSet rs;
    private Statement stmt;

public SqlHelper(String server, String dbName, String userName,
            String userPwd) {
        this.server = server;
        this.dbName = dbName;//数据库名
        this.connStr = "jdbc:jtds:sqlserver://" + this.server + ":1433/"
                + this.dbName;

this.userName = userName;
        this.userPwd = userPwd;

}

public List<StuDomain> ExecuteQuery(String sql) {

List<StuDomain> stuLists = new ArrayList<StuDomain>();
        
        try {
            Class.forName(drive);
            System.out.println("驱动加载成功");
            con = DriverManager.getConnection(this.connStr, this.userName,
                    this.userPwd);
            System.out.println("数据库连接成功");
            //pstm = con.prepareStatement(sql);
            
            stmt = con.createStatement();
            
            rs = stmt.executeQuery(sql);
            
            while (rs.next()) {

StuDomain stuDomain=new StuDomain();
                stuDomain.setId(rs.getString(1));
                stuDomain.setStuName(rs.getString(2));
                
                stuLists.add(stuDomain);

}
            System.out.println("stuLists.size():"+stuLists.size());

} catch (Exception e) {
            System.out.println("数据库连接异常");
            e.printStackTrace();
            return null;
        } finally {
            try {
                if(rs!=null){
                    rs.close();            
                }
                if(stmt!=null){
                    stmt.close();
                }
                if(con!=null){
                    con.close();
                }

} catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        return stuLists;
    }

}

MainActivity 并将数据显示在ListView上

package com.example.jdtsproc;

import java.util.List;

import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.os.Handler;

import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;

public class MainActivity extends ActionBarActivity {

private Button btn_connect;
    private ListView lv_lists;
    
    private List<StuDomain> stuLists;

private SqlHelper sh=new SqlHelper("xxx.xx.xxx.xx", "MyDb1", "sa", "sa");//第一个参数是访问的远程数据库服务器的ip
    private Handler mHandler=new Handler(){
        public void handleMessage(android.os.Message msg) {
            lv_lists.setAdapter(new StuAdapter());
        };
    };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        initView();
        
        initData();
        
    }

private void initData() {
        btn_connect.setOnClickListener(new OnClickListener() {
            
            @Override
            public void onClick(View v) {
                new Thread(){

public void run() {
                        String sql="select *from stu";
                        stuLists = sh.ExecuteQuery(sql);
                        
                        mHandler.sendEmptyMessage(0);//发送消息
                        //lv_lists.setAdapter(new StuAdapter());
                    };
                }.start();
            }
        });
    }

private void initView() {
        //找到我们所需要的
        btn_connect = (Button) findViewById(R.id.btn_connect);
        lv_lists = (ListView) findViewById(R.id.lv_lists);
    }

class StuAdapter extends BaseAdapter{

@Override
        public int getCount() {

return stuLists.size();
        }

@Override
        public StuDomain getItem(int position) {

return stuLists.get(position);
        }

@Override
        public long getItemId(int position) {
            
            return position;
        }

@Override
        public View getView(int position, View convertView, ViewGroup parent) {
            StuViewHolder stuHolder;
            if(convertView==null){
                convertView=View.inflate(getApplicationContext(), R.layout.list_main, null);
                stuHolder=new StuViewHolder();
                stuHolder.tv_id=(TextView) convertView.findViewById(R.id.tv_id);
                stuHolder.tv_stuname=(TextView) convertView.findViewById(R.id.tv_stuname);
                stuHolder.iv_photos=(ImageView) convertView.findViewById(R.id.iv_photos);
            }else{
                stuHolder=(StuViewHolder) convertView.getTag();
            }
            stuHolder.tv_id.setText(getItem(position).getId());
            stuHolder.tv_stuname.setText(getItem(position).getStuName());
            stuHolder.iv_photos.setImageResource(R.drawable.photopager);
            return convertView;
        }
        
    }
    
    class StuViewHolder{
        public TextView tv_id;
        public TextView tv_stuname;
        public ImageView iv_photos;
    }
 
}

最后奉献jtds的两个jar包    永久链接:https://pan.baidu.com/s/1YBW1I_ddSKe7vcIouDXKrg 密码:0v95

转载于:https://www.cnblogs.com/ww7018/p/9484159.html

Android 使用jtds远程访问数据库相关推荐

  1. Android Studio使用webservice远程访问数据库SQL Server 2008 R2

    首先说一下背景,由于目前个人自学Android Studio,参考度娘实现连接DB的方式,总结出目前主流的两种方式: 1)使用jtds直接访问DB数据库(参考:https://blog.csdn.ne ...

  2. android studio数据库存储数据,如何使用API​​ 23在android studio中的数据库中存储数据?...

    大多数时候我不会发布任何内容,因为我可以在其他帖子中找到我需要的所有内容,但是现在我已经有几天了,您如何在数据库中存储任何内容?这是我的Java代码如何使用API​​ 23在android studi ...

  3. XamarinSQLite教程在Xamarin.Android项目中提取数据库文件

    XamarinSQLite教程在Xamarin.Android项目中提取数据库文件 由于不能直接打开该文件,开发者需要先将数据库文件从Android系统中提取出来.操作步骤如下. (5)选择MyDoc ...

  4. XamarinSQLite教程在Xamarin.Android项目中定位数据库文件

    XamarinSQLite教程在Xamarin.Android项目中定位数据库文件 实际开发中,经常需要验证数据库操作的正确性.这个时候,需要打开数据库文件,进行确认.下面是如何找到MyDocumen ...

  5. XamarinSQLite教程在Xamarin.Android项目中使用数据库

    XamarinSQLite教程在Xamarin.Android项目中使用数据库 在Xamarin.Android项目中使用预设数据库的具体操作步骤如下: (1)创建一个Xamarin.Android项 ...

  6. Android基础总结+SQlite数据库【申明:来源于网络】

    Android基础总结+SQlite数据库[申明:来源于网络] 基础总结篇之一:Activity生命周期:http://blog.csdn.net/liuhe688/article/details/6 ...

  7. Android中实现SQLite数据库CRUD操作的两种方式

    Android中实现SQLite数据库CRUD操作的两种方式 SQLite是一款轻量级的关系型数据库,具有运行速度.占用资源少的特点.通常只需要几百KB的内存就够了,因此特别适合在移动设备上使用.SQ ...

  8. android 保存文件_Android 数据库操作框架LitePal使用介绍(一)

    在Android开发中,前端开发很多情况数据都是从服务器端获取的,使用本地数据库的情况可能不会太常见.有一些需要本地保存的配置数据,也是使用Hawk框架等本地缓存框架进行保存.但是对于如果是一些需要本 ...

  9. xamarin怎么调用java的_XamarinSQLite教程在Xamarin.Android项目中使用数据库

    XamarinSQLite教程在Xamarin.Android项目中使用数据库 在Xamarin.Android项目中使用预设数据库的具体操作步骤如下: (1)创建一个Xamarin.Android项 ...

最新文章

  1. 小黑小波比.点击头像直接上传的实现
  2. Linux查看网卡状态
  3. 重构-改善既有代码的设计读书笔记
  4. 听说你想去大厂看学妹,带你看看网易互娱游戏测试面经
  5. 线性代数导论5——SVD分解
  6. 函数式编程笔记 01
  7. JSON解析中获取不存在的key
  8. 云原生技术的挑战是什么?
  9. 《浪潮之巅》读书笔记——第9章 雅虎
  10. Pytorch(三):数据变换 Transforms
  11. Android studio编程常用控件
  12. java kryo_java kryo序列化与反序列化
  13. Python基础 by.肖洪福
  14. select2中文帮助文档_5款实用办公app , 石墨文档、收趣 | 发现有趣app
  15. 计算机毕业设计SSM大学生志愿者管理系统【附源码数据库】
  16. python模拟输入文本内容(打破复制粘贴限制)
  17. 烤仔建工×MetaEstate×MetaCat | 明天来元宇宙过感恩节!
  18. 网管到底要学什么(三)
  19. 找工作时牢牢记住这些
  20. 自然语言处理NLP——中文抽取式自动文摘(包括中文语料库处理、三种方法实现自动文摘、Rouge评价方法对自动文摘进行打分)

热门文章

  1. 二分法求方程的根_快速求解方程的根——二分法与牛顿迭代法
  2. 微信小程序遍历wx:for,wx:for-item,wx:key
  3. 事物传递机制、应用、加载时机
  4. docker 部署nginx 使用keepalived 部署高可用
  5. vue之filter用法
  6. [UE4]集合:TSet容器
  7. SQL2008R2的 遍历所有表更新统计信息 和 索引重建
  8. Android用户界面程序设计示例
  9. 开发中的问题——环境相关
  10. 【哈利波特】Sherbert Lemon对HP的解读之11