【Android解决方案】连接SQL Server

http://blog.csdn.net/yaoneng119/article/details/8859326


案例说明

前一段时间要做一个用Android平板连接SQL的项目,在这种情况下,我就想到了两种方案:
1)Android Client  + Webservice + SQL的方式来连接
2)Android Client + SQL

本人一直都在用第一种方案做的,都很坚持第一种方案,但由于客户的环境加上其他因素,不能用第一种方案来做,所以就用了第二种;

技术概要

由于SQL官方的驱动不能直接用于Android上运行,所以就在网上搜了一些资料,看到了JTDS驱动,这个是开源的,网址是: http://sourceforge.net/projects/jtds/files/

现在最新的版本是1.3.0,但这个版本不能在Android上用,因为1.3.0是支持Java7的,Android不支持Java7,所以我就选择了1.2.7的版本; 

开发环境

Windows7 x64 专业版 
Android4.0.2
Eclipse4.2+ADT 21+SDK 21

代码实现

以下是数据库连接和测试类DataBaseUtil.java, 注意修改连接字符串
[java]  view plain copy
  1. package com.example.androidsql;  
  2.   
  3. import java.sql.Connection;  
  4. import java.sql.DriverManager;  
  5. import java.sql.ResultSet;  
  6. import java.sql.SQLException;  
  7. import java.sql.Statement;  
  8.    
  9.   
  10. public class DataBaseUtil  
  11. {  
  12.   
  13.     private static Connection getSQLConnection(String ip, String user, String pwd, String db)  
  14.     {  
  15.         Connection con = null;  
  16.         try  
  17.         {  
  18.             Class.forName("net.sourceforge.jtds.jdbc.Driver");  
  19.             con = DriverManager.getConnection("jdbc:jtds:sqlserver://" + ip + ":1433/" + db + ";charset=utf8", user, pwd);  
  20.         } catch (ClassNotFoundException e)  
  21.         {  
  22.             e.printStackTrace();  
  23.         } catch (SQLException e)  
  24.         {  
  25.             e.printStackTrace();  
  26.         }  
  27.         return con;  
  28.     }  
  29.   
  30.     public static String testSQL()  
  31.     {  
  32.         String result = "字段1  -  字段2\n";  
  33.         try  
  34.         {  
  35.             Connection conn = getSQLConnection("xx.xx.xx.xx""sa""123""DataBaseName");  
  36.             String sql = "select top 10 * from UserTable";  
  37.             Statement stmt = conn.createStatement();// 閸掓稑缂揝tatement  
  38.             ResultSet rs = stmt.executeQuery(sql);  
  39.             while (rs.next())  
  40.             {// <code>ResultSet</code>閺堬拷鍨甸幐鍥ф倻缁楊兛绔寸悰锟�  
  41.                 String s1 = rs.getString("Name1");  
  42.                 String s2 = rs.getString("Name2");  
  43.                 result += s1 + "  -  " + s2 + "\n";  
  44.                 System.out.println(s1 + "  -  " + s2);  
  45.             }  
  46.             rs.close();  
  47.             stmt.close();  
  48.             conn.close();  
  49.         } catch (SQLException e)  
  50.         {  
  51.             e.printStackTrace();  
  52.             result += "查询数据异常!" + e.getMessage();  
  53.         }  
  54.         return result;  
  55.     }  
  56.   
  57.     public static void main(String[] args)  
  58.     {  
  59.         testSQL();  
  60.     }  
  61.   
  62. }  




MainActivity.java
[java]  view plain copy
  1. package com.example.androidsql;  
  2.   
  3. import android.os.Bundle;  
  4. import android.os.Handler;  
  5. import android.os.Message;  
  6. import android.app.Activity;  
  7. import android.view.Menu;  
  8. import android.view.View;  
  9. import android.widget.TextView;  
  10.   
  11. public class MainActivity extends Activity  
  12. {  
  13.     private View btnTest;  
  14.     private View btnClean;  
  15.     private TextView tvTestResult;  
  16.     @Override  
  17.     protected void onCreate(Bundle savedInstanceState)  
  18.     {  
  19.         super.onCreate(savedInstanceState);  
  20.         setContentView(R.layout.activity_main);  
  21.         btnTest=findViewById(R.id.btnTestSql);  
  22.         btnClean=findViewById(R.id.btnClean);  
  23.         tvTestResult = (TextView)findViewById(R.id.tvTestResult);  
  24.           
  25.         btnTest.setOnClickListener(getClickEvent());  
  26.         btnClean.setOnClickListener(getClickEvent());  
  27.     }  
  28.   
  29.     @Override  
  30.     public boolean onCreateOptionsMenu(Menu menu)  
  31.     {  
  32.         // Inflate the menu; this adds items to the action bar if it is present.  
  33.         getMenuInflater().inflate(R.menu.main, menu);  
  34.         return true;  
  35.     }  
  36.       
  37.        
  38.       
  39.       
  40.     private View.OnClickListener getClickEvent(){  
  41.         return new View.OnClickListener()  
  42.         {             
  43.             @Override  
  44.             public void onClick(View v)  
  45.             {  
  46.                 tvTestResult.setText("...");  
  47.                 if(v==btnTest){  
  48.                     test();  
  49.                       
  50.                 }                 
  51.             }  
  52.         };  
  53.     }  
  54.     private void test()  
  55.     {  
  56.         Runnable run = new Runnable()  
  57.         {             
  58.             @Override  
  59.             public void run()  
  60.             {  
  61.                 String ret = DataBaseUtil.testSQL();  
  62.                 Message msg = new Message();  
  63.                 msg.what=1001;  
  64.                 Bundle data = new Bundle();  
  65.                 data.putString("result", ret);    
  66.                 msg.setData(data);  
  67.                 mHandler.sendMessage(msg);  
  68.             }  
  69.         };  
  70.         new Thread(run).start();  
  71.            
  72.     }  
  73.       
  74.     Handler mHandler = new Handler(){  
  75.         public void handleMessage(android.os.Message msg) {  
  76.             switch (msg.what)  
  77.             {  
  78.                 case 1001:  
  79.                     String str = msg.getData().getString("result");  
  80.                     tvTestResult.setText(str);  
  81.                     break;  
  82.   
  83.                 default:  
  84.                     break;  
  85.             }  
  86.         };  
  87.     };  
  88.   
  89. }  

activity_main.xml

[html]  view plain copy
  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     xmlns:tools="http://schemas.android.com/tools"  
  3.     android:layout_width="match_parent"  
  4.     android:layout_height="match_parent"  
  5.     android:paddingBottom="@dimen/activity_vertical_margin"  
  6.     android:paddingLeft="@dimen/activity_horizontal_margin"  
  7.     android:paddingRight="@dimen/activity_horizontal_margin"  
  8.     android:paddingTop="@dimen/activity_vertical_margin"  
  9.     tools:context=".MainActivity" >  
  10.     <Button   
  11.         android:id="@+id/btnTestSql"  
  12.         android:layout_width="wrap_content"   
  13.         android:layout_height="wrap_content"  
  14.         android:text="@string/testSQL"/>  
  15.     <Button   
  16.         android:id="@+id/btnClean"  
  17.         android:layout_width="wrap_content"   
  18.         android:layout_height="wrap_content"  
  19.         android:layout_alignParentRight="true"  
  20.         android:text="@string/clean"/>  
  21.     <TextView  
  22.         android:id="@+id/tvTestResult"  
  23.         android:layout_width="wrap_content"  
  24.         android:layout_height="wrap_content"  
  25.         android:layout_below="@id/btnTestSql"  
  26.         android:text="@string/hello_world" />  
  27.   
  28. </RelativeLayout>  



strings.xml
[html]  view plain copy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <resources>  
  3.   
  4.     <string name="app_name">AndroidSQL</string>  
  5.     <string name="action_settings">Settings</string>  
  6.     <string name="hello_world">Hello world!</string>  
  7.     <string name="testSQL">测试SQL</string>  
  8.     <string name="clean">清除数据</string>  
  9. </resources>  

Demo下载地址: 





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值