㈠ Android 怎麼連接遠程資料庫
想實現一個功能即讓android訪問遠程資料庫,但是網上很多人都不建議直連。據說問題多多。那麼中間就加個第三者吧。
實現思路:在資料庫和Android客戶端添加一個webservice,處理每次客戶端發來的請求。而在android客戶端使用ksoap2解析webservice返回的數據。
一 webservice 端,我使用序列化的方式實現的。不知道這里跟xml的實現哪個對手機來說更好。這里先放下,以後研究。
1.我使用的是xfire。新建一個webservice項目,然後我們開始寫代碼
2.一個介面
Java代碼
public interface ICompany {
public List<Company> getCompanyList();
}
3一個實現類
Java代碼
public class ICompanyImp implements ICompany {
CompanyDAO com=new CompanyDAO();
//得到所有公司列表
public List<Company> getCompanyList() {
List<Company> list=new ArrayList<Company>();
try {
list=com.getCompanyList();
} catch (sqlException e) {
e.printStackTrace();
list=null;
}
return list;
}
}
注意: 我這里的返回值是list,不少webservice的基本類型,所以需要為它配置文件 介面+.aegis.xml
4 介面+.aegis.xml
Xml代碼
<?xml version="1.0" encoding="UTF-8"?>
<mappings>
<mapping>
<!--
<method name="getCollectionsRowCount">
<parameter index="0" componentType="java.lang.String"/>
</method>
-->
<!-- 返回的類型是Map的話,做法和List一樣。但定義的類型,是Map中的Value部分 -->
<method name="getCompanyList">
<return-type componentType="bean.Company"/>
</method>
</mapping>
</mappings>
5.service.xml
Xml代碼
<?xml version="1.0" encoding="UTF-8"?>
<beans >
<service xmlns="http://xfire.codehaus.org/config/1.0"
xmlns:s="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<name>MyService</name>
<serviceClass>main.service.ICompany</serviceClass>
<implementationClass>main.service.ICompanyImp</implementationClass>
<style mce_bogus="1">wrapped</style>
<use>literal</use>
<scope>application</scope>
<namespace>http://android.googlepages.com/</namespace>
</service>
</beans>
發布項目後,運行效果如圖:
項目結構:
二 android客戶端
因為ksoap2解析webservice得到的數據類似於以下:getCompanyListResponse{out=anyType{Company=anyType{company=安徽江淮汽車股份有限公司; id=1; }; }; }
1 解析類:MyWebServiceHelper
Java代碼
public class MyWebServiceHelper {
// WSDL文檔中的命名空間
private static final String targetNameSpace = "http://android.googlepages.com/";
// WSDL文檔中的URL
private static final String WSDL = "http://192.168.1.144:8080/oilservice/services/MyService";
// 需要調用的方法名(獲得Myervices中的helloWorld方法)
//需要調用的方法名(獲得Myervices中的login方法)
private static final String getCompany="getCompanyList";
public List<Company> getCompanyList( ) {
List<Company> list=new ArrayList<Company>();
SoapObject request =new SoapObject(targetNameSpace,getCompany);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);
envelope.dotNet = false;
envelope.setOutputSoapObject(request);
AndroidHttpTransport httpTranstation = new AndroidHttpTransport (WSDL);
try {
httpTranstation.call(targetNameSpace+getCompany, envelope);
SoapObject soapObject = (SoapObject) envelope.getResponse();
//如果獲取的是個集合,就對它進行下面的操作
if(soapObject.getName()=="anyType") {
//遍歷Web Service獲得的集合
for(int i=0;i<soapObject.getPropertyCount();i++){
Company m=new Company();
//獲取單條的數據
SoapObject soapChilds =(SoapObject)soapObject.getProperty(i);
//對單個的數據進行再次遍歷,把它的每行數據讀取出來
m.setId(Integer.parseInt(soapChilds.getProperty("id").toString()));
m.setCompany(soapChilds.getProperty("company").toString());
/*
//獲取實體類的所有屬性
Field[] field = m.getClass().getDeclaredFields();
//遍歷所有屬性,第一個是序列化的id,serialVersionUID,用不到。
for(int j=0 ; j<field.length ; j++){
//獲取屬性的名字
String name = field[j].getName();
System.out.println(name);
}*/
// }
list.add(m);
}
}
} catch (IOException e) {
e.printStackTrace();
} catch (XmlPullParserException e) {
e.printStackTrace();
}
return list;
}
}
2 實現類:
Java代碼
public class OilActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Spinner spinner = (Spinner) findViewById(R.id.company);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(
this,android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(
android.R.layout.simple_spinner_dropdown_item);
//調用自已寫的webService
MyWebServiceHelper webServiceHelper=new MyWebServiceHelper();
List<Company> compnayList= webServiceHelper.getCompanyList();
for(int i=0;i<compnayList.size();i++){
adapter.add(compnayList.get(i).getCompany());
}
spinner.setAdapter(adapter);
}
}
3 兩個項目中都用到的bean
Java代碼
public class Company implements Serializable{
private static final long serialVersionUID = 1L;
private int id;
private String company;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getCompany() {
return company;
}
public void setCompany(String company) {
this.company = company;
}
}
最後測試以下,list返回正確。效果圖:
3項目結構:
參考文章:
http://ksoap2.sourceforge.net/doc/api/ ksoap2的API
http://topic.csdn.net/u/20110412/16/0341626d-8576-4dda-b9e4-aab3ff50c980.html 關於list處理的帖子
http://blog.csdn.net/haha_mingg/article/details/6338332,總的思路的實現。在此感謝作者的無私奉獻
android 初學,願與大家相互交流。共同進步。
㈡ 請教安卓下如何訪問本地及遠程資料庫
首先要有資料庫客戶端呢。
然後就是組網,就是手機要和本地或者遠程的資料庫伺服器組網,參見下零遁的內網訪問,全埠可用,直接訪問資料庫IP
㈢ 手機遠程下載資料庫的數據用到了哪些技術
樓主,我來幫你理清一下這些概念的問題。
首先,現在流行的解決方案模式有兩種:C/S架構,B/S架構。
正如樓主所說的,手機遠程下載資料庫數據的話,其實也是上面兩種結構分為兩種。
C/S模式的應用,是指要安裝在手機上的軟體,例如QQ,飛信等客戶端。他們遠程連接所用到技術要根據他們開發的語言而定,如果是Java開發的話,那麼會用到Java遠程通信類,C++開發,也會用到C本身封裝好的類。連接方式有UDP和TCP兩種連接方式。
B/S模式的應用,是指通過手機瀏覽器訪問網站,手機本身不需要安裝任何軟體,具體業務的實現也不在手機上,而是在遠程伺服器段上實現。根據你網站的請求和參數,經過遠程伺服器調用具體的方法,產生一個表現層,然後呈現在手機上面。至於B/S模式涉及的技術有很多很多,Java的J2EE體系中有很多技術,有表現層模版化,資料庫模版化,依賴注入等等技術,不能盡數。
至於樓主說的GPRS,這是手機通信方面的范疇,這是一個制式,信號通過GPRS制式發送和接收。
希望我提供的這些資料會給樓主幫助!
㈣ 如何將Android應用程序連接到遠程資料庫
要與遠程資料庫進行通信,你需要Web服務,以便從遠程資料庫獲取數據或使數據適合遠程資料庫。
我不確定你目前使用哪個網路平台,但我建議你使用REST和JSON。
㈤ 請問Android怎樣連接遠程MySQL資料庫
Android客戶端直接連接遠程MySQL資料庫的方法如下:
String result = "";
//首先使用NameValuePair封裝將要查詢的年數和關鍵字綁定
ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("year","1980"));
//使用HttpPost封裝整個SQL語句
//使用HttpClient發送HttpPost對象
try{
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://example.com/getAllPeopleBornAfter.php");
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
InputStream is = entity.getContent();
}catch(Exception e){
Log.e("log_tag", "Error in http connection "+e.toString());
}
//將HttpEntity轉化為String
try{
BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
result=sb.toString();
}catch(Exception e){
Log.e("log_tag", "Error converting result "+e.toString());
}
//將String通過JSONArray解析成最終結果
try{
JSONArray jArray = new JSONArray(result);
for(int i=0;i<jArray.length();i++){
JSONObject json_data = jArray.getJSONObject(i);
Log.i("log_tag","id: "+json_data.getInt("id")+
", name: "+json_data.getString("name")+
", sex: "+json_data.getInt("sex")+
", birthyear: "+json_data.getInt("birthyear")
);
}
}
}catch(JSONException e){
Log.e("log_tag", "Error parsing data "+e.toString());
}
雖然Android開發中可以直接連接資料庫,但是實際中卻不建議這么做,應該使用伺服器端中轉下完成。
㈥ Android 怎麼連接遠程資料庫
1:要有伺服器端程序,如ruby等,由伺服器端操作資料庫,android客戶端通過http收發json或xml與伺服器交互。
2:android有自己的資料庫sqlite,但那隻適合儲存本機的資料。
㈦ 手機APP如何使用遠程伺服器上的MDB文件作為資料庫進行讀寫訪問
下面有兩種方式,避免這個錯誤:
方式a. 使用DAO引擎訪問
Dim File, Conn, RS
Const ReadOnly = False
File = "\\server\share\file.mdb"
Set Conn = CreateObject("DAO.DBEngine.35").Workspaces(0).OpenDatabase(File,,ReadOnly)
Set RS = Conn.OpenRecordset(SQL)
方式b. ADO + Jet OLE DB provider方式
Dim Conn, RS
Set Conn = CreateObject("ADODB.Connection")
Conn.Provider = "Microsoft.Jet.OLEDB.4.0"
Conn.Open "\\server\share\file.mdb"
Set RS = Conn.Execute(SQL)
確定在運行ASP頁面時有足夠的訪問許可權以訪問遠程計算機上的MDB文件,在訪問MDB文件前需要先登錄到遠程計算機,添加下面的代碼:
Set UM = CreateObject("UserManager.Server")
UM.LogonUser "帳號", "口令", "域"
...
open database
...
UM.RevertToSelf
㈧ Android 怎麼連接遠程資料庫
可以通過中間服務, 比如一個站點開放一個地址 yourdomain.com/android.aspx 然後通過android發送請求到這個地址, android.aspx根據請求的get/post數據進行相應操作
㈨ android程序中如何直接操作遠程伺服器上的資料庫
直接操作是辦不到的,而且這樣很不安全。
有方法達到你想要的效果,具體如下。
建議:在客戶端和服務端之間寫一個自己的通信協議。
比如:客戶端要更改、刪除服務端的數據,就給服務端發送一個報文:「刪除」+表名+條件。
服務端這么接到後,就調用服務端的程序,將接到的報文轉化為sql語句執行即可。
簡單的一個流程就是上面那樣子啦,有點像QQ和QQ伺服器的一個交互過程。
補充:如果樓主對TCP/IP協議比較了解的話,上面的過程可以輕松實現。現實中的應用例子也是這樣,誰也不會讓Client直接操作資料庫的,那無異於自殺。
㈩ Android 怎麼連接遠程資料庫
資料庫對於你的開發應用來說都是遠程的
一般情況下你需要提供url
username
password就可以訪問對應的資料庫的,他跟你資料庫放在那裡沒關系,你只要確保你提供的url是可訪問的,還有就是你訪問資料庫時有響應的資料庫驅動支持。