Android 使用jtds远程访问数据库

最近老师让我用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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/277469.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java乘以2的位计算符号_java编程之:按位与运算,等运算规则

按位与运算符(&)参加运算的两个数据&#xff0c;按二进制位进行“与”运算。运算规则&#xff1a;0&00; 0&10; 1&00; 1&11;即&#xff1a;两位同时为“1”&#xff0c;结果才为“1”&#xff0c;否则为0例如&#xff1a;3&5 即 0000 0011 &a…

C语言文字加密程序的实现

前言&#xff1a;当今社会是一个信息社会&#xff0c;你的个人信息和聊天记录极有可能被别有用心的人时时刻刻监视着&#xff0c;那么你想不想实现专属于两个人或一个小圈子的人在社交软件上的交流不被任何其他人读懂呢&#xff1f;下面就给大家提供一个原理极其简单程序极其容…

菜鸟-es6

这里就不在唠叨浏览器对es6的支持跟转码器了&#xff0c;稍微百度一下就ok let and const 变量 and 常量 什么是变量,什么是常量 - 都是存储数据的容器, - 变量》即意思就是程序运行中可以发生变化的,- 常量》即程序运行中不可以发生改变&#xff0c;- 注意&#xff1a;常量…

阿帕奇退出java_java+tomcat+apache安装整合,启动/关闭,添加开机启动服务

安装java1.8#yum update 服务器更新源码包#rpm -qa |grep -E ^open[jre|jdk]|j[re|dk] 搜索任何版本的已安装JDK组件java-1.8.0-openjdk-headless-1.8.0.60-2.b27.el7_1.x86_64pygobject2-2.28.6-11.el7.x86_64pygobject3-base-3.8.2-6.el7.x86_64java-1.8.0-openjdk-1.8.0…

Spring Boot中如何干掉if else

Spring Boot中如何干掉if elsehttp://www.ciphermagic.cn/spring-boot-without-if-else.html 转载于:https://www.cnblogs.com/tyk766564616/p/11089133.html

java 抽象类与接口理解

2019独角兽企业重金招聘Python工程师标准>>> 在java 中抽象类是implements [等有时间了补充] 转载于:https://my.oschina.net/kuchawyz/blog/1929094

dreambackend.java_【AndroidTV】如何自定义屏保、更改屏保时长

目录目录系统屏保源码有哪些在设置中显示的屏保选项有哪些屏保选项是如何获得的多久出现屏保修改方法我的应用项目需求处理方式遇到一个诡异的问题系统屏保源码有哪些如果要自定义屏保可以参考这里的源码&#xff0c;清晰易懂&#xff0c;比网上教程好屏保源码位置BasicDreampa…

模块初识

1.模块 模块的定义与分类 一个模块就是一个py文件.这个魔铠存储很多相似的功能,相似的函数集合体分类 内置模块,标准库,Python自带的,times,os,sys,等等200多种第三方库(模块),各种大神写的一些模块,通过pip install....安装,有6000多种自己写的模块,自定义模块2.import # impo…

算法:把数组排成最小的数

* Description 把数组排成最小的数* 问题&#xff1a;输入一个正整数数组&#xff0c;把数组里所有数字拼接起来排成一个数&#xff0c;打印能拼接出的所有数字中最小的一个。* 例如输入数组{3&#xff0c;32&#xff0c;321}&#xff0c;则打印出这三个数字能排成的最小数字为…

牛客网在线编程java_NowCoder

com.adamjwh.pratice.offer.FindInArrays二维数组中的查找com.adamjwh.pratice.offer.ReplaceSpace替换空格com.adamjwh.pratice.offer.PrintList从头到尾打印链表com.adamjwh.pratice.offer.ReConstructTree重建二叉树com.adamjwh.pratice.offer.MakeQueueWithStack用两个栈实…

质量大国-学习概要

问题场景&#xff1a;英国 不断重新定义度量一码历史故事&#xff1a;冷兵器 206年 长平之战 度量衡商鞅统一度量衡 秦国 质量 0.83毫米的箭头 秦国的统一度量衡带来的巨大收益。 1&#xff0c;1791 巴黎 法国科学院 科学革命要为完美的社会提供基点 创建计量体系 孔多塞 重新定…

join的简单总结

BAT面试题&#xff1a;现在有T1、T2、T3三个线程&#xff0c;你怎样保证T2在T1执行完后执行&#xff0c;T3在T2执行完后执行&#xff1f; 这个线程问题通常会在第一轮或电话面试阶段被问到&#xff0c;目的是检测你对”join”方法是否熟悉。这个多线程问题比较简单&#xff0c;…

python numpy矩阵索引_python – Numpy中的矩阵索引

索引后查看形状&#xff1a;In [295]: Anp.matrix([1,2,3])In [296]: A.shapeOut[296]: (1, 3)In [297]: A[0]Out[297]: matrix([[1, 2, 3]])In [298]: A[0].shapeOut[298]: (1, 3)这种行为的关键是np.matrix总是2d.所以即使你选择一行(A [0,&#xff1a;]),结果仍然是2d,形状(…

Activity的呼叫转移*(3个Activity之间的跳转)

Redirection的意思就是“呼叫转移&#xff0c;重寄”的意思 我们也许会再程序开发中遇到这种情况&#xff0c;需要从一个Activity&#xff08;A&#xff09;跳转到另一个Activity&#xff08;B&#xff09;&#xff0c;当在这个Activity&#xff08;B&#xff09;中处理完一些操…

深度解析数据分析、大数据工程师和数据科学家的区别

数据越来越多的影响并塑造着那些我们每天都要交互的系统。不管是你使用Siri&#xff0c;google搜索&#xff0c;还是浏览facebook的好友动态&#xff0c;你都在消费者数据分析的结果。我们赋予了数据如此大的转变的能力&#xff0c;也难怪近几年越来越多的数据相关的角色被创造…

python webservice接口测试传参数_Python3 webservice接口测试方法是什么

Python3 webservice接口测试方法是什么发布时间&#xff1a;2020-06-23 14:07:46来源&#xff1a;亿速云阅读&#xff1a;92作者&#xff1a;清晨不懂Python3 webservice接口测试方法是什么&#xff1f;其实想解决这个问题也不难&#xff0c;下面让小编带着大家一起学习怎么去解…

zabbix4.2 系列(二):agent配置

zabbix-agent&#xff1a; 分为主动模式和被动模式&#xff0c;均在配置文件实现&#xff08;主动模式和被动模式可同时设置&#xff09;&#xff1a; vim /etc/zabbix/zabbix_agentd.conf Server192.168.18.154 &#xff08;用于被动模式&#xff0c;允许哪台服务器可以…

java form 对象 一对一_java-双向一对一地“对象引用了一个未保存...

我有一个简单的一对一关系&#xff1a;>为每个实体单独的DAO.>事务由Spring管理.PersonDao personDao ctx.getBean(PersonDao.class, "personDaoImpl");VehicleDao vehicleDao ctx.getBean(VehicleDao.class, "vehicleDaoImpl");Vehicle vehicle …

RabbitMQ 入门教程(PHP版) 第三部分:发布/订阅(Publish/Subscribe)

发布&#xff0f;订阅 在上篇第二部分教程中&#xff0c;我们搭建了一个工作队列。每个任务之分发给一个工作者&#xff08;worker&#xff09;。在本篇教程中&#xff0c;我们要做的之前完全不一样——分发一个消息给多个消费者&#xff08;consumers&#xff09;。这种模式被…

Proxmox VE 安装、配置、使用之第二章 Proxmox VE 的安全性

第一章 Proxmox VE 的安全性一、 角色及权限图2-1-1二、 Root 的密码安全性把 Root 的实际密码给出去, 在任何系统都是不符合安全规范的!所以在 Linux 里面, 最好把有需要 root 权限的使用者 放到 sudoers 的群组.# sudo usermod -a -G sudo testuserPVE 的权限设定方式 是由 u…