AndroidStudio通过JTDS远程访问SQLServer数据库


引用http://blog.sina.com.cn/s/blog_45eaa01a0102y8ug.html

一、下载SQL驱动JTDS   1 到这里 https://sourceforge.net/projects/jtds/files/jtds/ 下载 jtds-1.3.1-dist.zip   2 在Android Studio中导入Library项目  在开发环境菜单    File -- New -- Import Project...  从中找到下载的加入   3 把Library项目添加到源项目中   这部不做,调用以下语句 Class.forName("net.sourceforge.jtds.jdbc.Driver"); 会出现 ClassNotFound:net.sourceforge.jtds.jdbc.Driver 错误    在开发环境,从菜单 File -- Project Structure,点击进入  在窗口左侧选择自己的项目后,点击右侧的Dependencies。  点击右侧的“+”添加按钮,在下拉菜单中找到Module Dependency,点击打开项目选择窗口。  选择前面步骤中导入的Library项目后,点击OK按钮导入到自己项目中  AndroidStudio通过JTDS远程访问SQLServer数据库   二、开发环境   windows 7 X64 android 5.1 android studio 3.1.2 Microsoft SQL Server 2008 R2   1 SQL ERVER  允许远程访问  开始--SQL2008--配置工具--SQL Server配置管理器--SQL Server网络配置--SQLexpress的协议--TCP/IP 状态 要改为   已启用   AndroidStudio通过JTDS远程访问SQLServer数据库


  2  建立数据库和表 数据库 BOOK   建立表 管理员,字段 编号,姓名,密码,内容如下: 编号    姓名 密码 1001    穆木 1212 1002   久九 123 1003    巴芭 111 1004    admin 111   AndroidStudio通过JTDS远程访问SQLServer数据库

      三、用JTDS连接SQLServer数据库相关代码   1 Android 访问sql server的类   package com.example.wmx.myapplication6; //package com.example.androidsql;   import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement;     public class DBUtil {       private static Connection getSQLConnection(String ip, String user, String pwd, String db)     {         Connection con = null;         try         {             Class.forName("net.sourceforge.jtds.jdbc.Driver");             con = DriverManager.getConnection("jdbc:jtds:sqlserver://" + ip + ":1433/" + db, user, pwd);         } catch (ClassNotFoundException e)         {             e.printStackTrace();         } catch (SQLException e)         {             e.printStackTrace();         }         return con;     }       public static String QuerySQL()     {         String result = "";         try         {             Connection conn = getSQLConnection("10.3.1.37", "sa", "123", "book");             String sql = "select top 10 * from 管理员";             Statement stmt = conn.createStatement();//             ResultSet rs = stmt.executeQuery(sql);             while (rs.next())             {                 String s1 = rs.getString("姓名");                 String s2 = rs.getString("密码");                 result += s1 + "  -  " + s2 + "\n";                 System.out.println(s1 + "  -  " + s2);             }             rs.close();             stmt.close();             conn.close();         } catch (SQLException e)         {             e.printStackTrace();             result += "异常!" + e.getMessage();         }         return result;     }       public static void main(String[] args)     {         QuerySQL();     } }       2 MainActivity.java   package com.example.wmx.myapplication6;   //package com.example.androidsql;   import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.app.Activity; import android.view.Menu; import android.view.View; import android.widget.TextView;   public class MainActivity extends Activity {     private View btnTest;     private View btnClean;     private TextView tvTestResult;     @Override     protected void onCreate(Bundle savedInstanceState)     {         super.onCreate(savedInstanceState);         setContentView(R.layout.activity_main);         btnTest=findViewById(R.id.btnTestSql);         btnClean=findViewById(R.id.btnClean);         tvTestResult = (TextView)findViewById(R.id.tvTestResult);           btnTest.setOnClickListener(getClickEvent());         btnClean.setOnClickListener(getClickEvent());     }       private View.OnClickListener getClickEvent(){         return new View.OnClickListener()         {             @Override             public void onClick(View v)             {                 tvTestResult.setText("...");                 if(v==btnTest){                     test();                   }             }         };     }     private void test()     {         Runnable run = new Runnable()         {             @Override            public void run()             {    //测试数据库的语句,在子线程操作,在主线程好像不成功。                 String ret = DBUtil.QuerySQL();                 Message msg = new Message();                 msg.what=1001;                 Bundle data = new Bundle();                 data.putString("result", ret);                 msg.setData(data);                 mHandler.sendMessage(msg);             }         };         new Thread(run).start();       }       Handler mHandler = new Handler(){         public void handleMessage(android.os.Message msg) {             switch (msg.what)             {                 case 1001:                     String str = msg.getData().getString("result");                     tvTestResult.setText(str);                     break;                   default:                     break;             }         };     };   }   以下 XML文件中都有大量的 左尖括号<,测试发现博客中的 < 需要和它后面的内容之间空一格才行,这样做太麻烦了,为了简单拍成图片 3 activity_main.xml   AndroidStudio通过JTDS远程访问SQLServer数据库     4 content_main.xml  
AndroidStudio通过JTDS远程访问SQLServer数据库


5  strings.xml   AndroidStudio通过JTDS远程访问SQLServer数据库     6  AndroidManifest.xml   AndroidStudio通过JTDS远程访问SQLServer数据库   注意:有关网络访问需要如下的许可,       < uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />     < uses-permission android:name="android.permission.INTERNET" />     < uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />   四  执行程序    1  从模拟上   AndroidStudio通过JTDS远程访问SQLServer数据库       2  从真实的手机上
AndroidStudio通过JTDS远程访问SQLServer数据库

      五  IP地址的获得   SQL SERVER 数据库位于PC机上, 手机和PC机位于同一个局域网内   1 获得 PC机IP地址10.3.1.37   从命令行执行 ipconfig 获得Windows IP 配置如下:     无线局域网适配器 无线网络连接:      连接特定的 DNS 后缀 . . . . . . . :    本地链接 IPv6 地址. . . . . . . . : fe80::59cb:ec67:d8a1:77d3    IPv4 地址 . . . . . . . . . . . . : 192.168.123.1    子网掩码  . . . . . . . . . . . . : 255.255.255.0    默认网关. . . . . . . . . . . . . :   以太网适配器 本地连接:      连接特定的 DNS 后缀 . . . . . . . :    本地链接 IPv6 地址. . . . . . . . : fe80::50fb:a1b7:500e:82ef    IPv4 地址 . . . . . . . . . . . . : 10.3.1.37    子网掩码  . . . . . . . . . . . . : 255.255.0.0    默认网关. . . . . . . . . . . . . : 10.3.0.1     2 获得手机的IP地址 10.0.2.10 这一步不需要,只是将来需要静态设置时需要   从手机上, 设置--关于手机-- 状态信息   AndroidStudio通过JTDS远程访问SQLServer数据库     六 以下几个文件夹的内容可能在工作中出现问题,需要删除重新建立   C:\Users\wmx\AppData\Local\Android\Sdk C:\Users\wmx\.android\avd\Nexus_5X_API_22.avd C:\Users\wmx\.gradle\wrapper\dists\gradle-4.4-all\9br9xq1tocpiv8o6njlyu5op1   AndroidStudio通过JTDS远程访问SQLServer数据库