问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Android 怎么连接远程数据库

发布网友 发布时间:2022-04-29 13:20

我来回答

3个回答

热心网友 时间:2022-04-14 22:50

想实现一个功能即让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 初学,愿与大家相互交流。共同进步。

热心网友 时间:2022-04-15 00:08

一般是不会直接连接数据库的,就像我们浏览网站一样,也是通过后端程序连接数据库的。

若你需要的是嵌入数据库,那另外的说法,MySQL提供嵌入式版本很轻量的

热心网友 时间:2022-04-15 01:43

一般是使用后台连接的,就是安卓连接服务器,服务器再连接数据库,将结果返回给你,很少说直接连接后台数据库的,不安全。sqlite就不说了
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
按现行会计制度的规定,短期借款所发生的利息,一般应记入( )科目。 省钱输送机 江西同步带欧规皮带滚轮模组规格 请问91年3月12日是什么星座拜托各位大神 1991年3月11的双鱼座怎样拜托了各位 谢谢 ...年11月3号。这两个时间出生的人各是什么塔罗牌?拜托各位大神... 孤岛惊魂4怎么不显示dlc 微信百万保障诈骗是怎么回事 秋季大棚里应候种植什么蔬菜最适合 上海音乐学院钢琴十级通过率 请教安卓下如何访问本地及远程数据库 什锦炒饭和扬州炒饭的区别 什锦炒饭有什么材料? 什锦炒饭的介绍 什锦炒饭中的什锦都是什么? 什锦炒饭的什锦是什么? 如何连接android数据库 用Eclipse开发android,怎么连接到数据库? 安卓程序怎么连接到个人电脑数据库 电脑版爱奇艺PPS怎么没弹幕??? excel身份证号求年龄公式 到截止日期2011-6-30 给个公示 可以用的 宠物小精灵全图鉴,只要有名字就行 宠物小精灵全图鉴 你认为五月天最经典的一首歌,附上歌词 五月天最浪漫的最经典的歌词是什么? 五月天经典歌词,越多越好(但也别乱复制啊~~~) 五月天的经典歌词 还要歌名 五月天有什么经典歌词啊 大家说说 给分 五月天经典歌词。 五月天的歌曲有哪些经典的歌词 孩子爱吃什锦炒饭,什锦炒饭都需要哪些原材料? android 如何连接mysql数据库,并且往数据库里面插入数据 什锦炒饭的做法,什锦炒饭怎么做好吃,什锦炒饭 什锦炒饭的制作过程是什么呢?怎么炒才能让米粒变一粒一粒的呢? 安卓怎么连mysql数据库 如何做什锦炒饭(宝宝餐)? 什锦炒饭的做法有哪些? 什锦炒饭的做法步骤图,什锦炒饭怎么做好吃 国宴菜单素什锦炒饭的做法 什锦炒米饭怎么做 什锦炒饭怎么做才更美味? 电脑钉钉直播为什么显示黑板 为什么钉钉直播时,显示电脑cpu负载过高,去年疫情教学直播时没出现这个问题? 怎么调微信好友发信息不通知 保温杯口生锈里面没生锈能用吗? 304不锈钢保温杯杯口与黑色涂层衔接处起了一点锈,其他地方都没有锈,是怎么回事? 属虎男的可以用兔子做微信图像吗? 我属虎微信头像用猪可以吗 我属虎的可以和自己的属相在一起照相吗。可以做微信头像吗? 哪些减肥的App比较好用?