当前位置:首页 » 数据仓库 » android读取远程数据库数据
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

android读取远程数据库数据

发布时间: 2022-11-30 01:41:03

‘壹’ 如何将Android应用程序连接到远程数据库

要与远程数据库进行通信,你需要Web服务,以便从远程数据库获取数据或使数据适合远程数据库。
我不确定你目前使用哪个网络平台,但我建议你使用REST和JSON。

‘贰’ 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 初学,愿与大家相互交流。共同进步。

‘叁’ Android开发如何远程查找在电脑上的ACCESS数据显示在Text中吗

操作可行的话,基本就是两种方式:

1)直连,一般不推荐(可以参考这个网页链接),其实就是直接用mysql的jar包进行远程数据库连接,注意例子是mysql的,需要把驱动代码换成access的

网页链接

2)远程服务端连接,,就是你再使用eclipse新建个web项目,简单的可以啥都不想,就直接写个简单的servlet,也必须用mysql的连接jar包,进行数据库查询后返回你需要的信息,然后使用tomcat等工具完成接口发布后,你就可以直接用android手机端进行网络访问(可以使用httpclient或httpurlconnection,或者其他网络框架也行),获取你需要的信息了。剩下的就是UI操作了

‘肆’ Android 怎么连接远程数据库

数据库对于你的开发应用来说都是远程的
一般情况下你需要提供url
username
password就可以访问对应的数据库的,他跟你数据库放在那里没关系,你只要确保你提供的url是可访问的,还有就是你访问数据库时有响应的数据库驱动支持。

‘伍’ 请问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,但那只适合储存本机的资料。

‘柒’ android 怎么读取数据库中的数据

android读取数据库可以使用sqlite一些api进行读取,实例如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

/**
* 查找一条数据
* @param uid
*/
public User find(Integer uid){
SQLiteDatabase db=dbOpenHelper.getReadableDatabase(); //创建数据库辅助类
Cursor cursor =db.rawQuery("select * from user where uid=?", new String[]{uid.toString()}); //创建一个游标
if(cursor.moveToFirst()){ //循环遍历查找数组
int uid2=cursor.getInt(cursor.getColumnIndex("uid"));
String uname=cursor.getString(cursor.getColumnIndex("uname"));
String uaddress=cursor.getString(cursor.getColumnIndex("uaddress"));
User user=new User();
user.setUid(uid2);
user.setUname(uname);
user.setUaddress(uaddress);
return user;
}
cursor.close();
return null;
}

‘捌’ android程序中如何直接操作远程服务器上的数据库

直接操作是办不到的,而且这样很不安全。
有方法达到你想要的效果,具体如下。
建议:在客户端和服务端之间写一个自己的通信协议。
比如:客户端要更改、删除服务端的数据,就给服务端发送一个报文:“删除”+表名+条件。
服务端这么接到后,就调用服务端的程序,将接到的报文转化为sql语句执行即可。
简单的一个流程就是上面那样子啦,有点像QQ和QQ服务器的一个交互过程。
补充:如果楼主对TCP/IP协议比较了解的话,上面的过程可以轻松实现。现实中的应用例子也是这样,谁也不会让Client直接操作数据库的,那无异于自杀。

‘玖’ 请教安卓下如何访问本地及远程数据库

首先要有数据库客户端呢。
然后就是组网,就是手机要和本地或者远程的
数据库服务器
组网,参见下零遁的内网访问,全端口可用,直接访问数据库IP

‘拾’ 安卓系统中从其他应用中读取共享的数据库数据需要用到

可以按以下步骤进行:
Android应用的数据库一般都是私有的,其他应用无法访问,那么怎么在手机已root的前提下,在自己的应用中读取指定应用中的数据信息呢,现提供一种思路。
以uc浏览器历史浏览记录为例:
一:对手机进行root。
某些厂家的Android设备是支持在系统设置中一键root的,如魅族手机。更通用的情况下一般是用第三方软件进行root,如KingRoot。
二:在手机上安装RootExplorer。
RootExplorer是在Android上使用很方便的文件浏览器,借用它,我们可以找到uc浏览器的历史记录数据库所在为data/data/com.UCMobile/databases/history/history。
三:将数据库文件复制到sd卡指定目录。
四:从sd卡数据库文件中读取数据。
五:将数据加载到Recyclerview中展示。
至此,我们已经实现了在自己应用中读取其他应用数据库数据的一个完整过程,诚然这种方式存在许多局限性,但不失为解决方案的一种。