android使用的是sqlite数据库,一般都是每个模块都有一个.db文件,我们可以将系统里的.db文件拷出来在使用android tool中的sqlite3命令来 *** 作和测试数据库。
首先启动模拟器或将手机连接电脑
使用find命令将系统中所有的db文件找出来
adb shell find / -name '*.db' -type f
/mnt/sdcard/openfeint/webui/manifest.db
/mnt/sdcard/dbms/DBMS.db
/data/system/accounts.db
/data/data/com.android.vending/databases/assets14.db
/data/data/com.android.vending/databases/suggestions.db
/data/data/com.android.vending/databases/webviewCache.db
/data/data/com.android.vending/databases/webview.db
/data/data/com.android.vending/databases/billing4.db
/data/data/com.android.providers.userdictionary/databases/user_dict.db
/data/data/com.android.providers.telephony/databases/mmssms.db
/data/data/com.android.providers.telephony/databases/telephony.db
/data/data/com.android.providers.settings/databases/settings.db
/data/data/com.android.providers.media/databases/internal.db
/data/data/com.android.providers.media/databases/external-bd717cb2.db
/data/data/com.android.providers.media/databases/external-5c2507fe.db
/data/data/com.android.launcher/databases/launcher.db
/data/data/com.example.android.apis/databases/webviewCache.db
/data/data/com.example.android.apis/databases/webview.db
/data/data/com.eclipsim.gpsstatus2/databases/google_analytics.db
/data/data/com.eclipsim.gpsstatus2/databases/webviewCache.db
/data/data/com.eclipsim.gpsstatus2/databases/webview.db
/data/data/com.android.inputmethod.latin/databases/userbigram_dict.db
/data/data/com.android.inputmethod.latin/databases/auto_dict.db
/data/data/com.google.android.gsf/databases/talk.db
/data/data/com.google.android.gsf/databases/webviewCache.db
/data/data/com.google.android.gsf/databases/webview.db
/data/data/com.google.android.gsf/databases/googlesettings.db
/data/data/com.google.android.gsf/databases/subscribedfeeds.db
/data/data/com.google.android.gsf/databases/gservices.db
/data/data/com.google.android.gsf/databases/gls.db
/data/data/com.google.android.googlequicksearchbox/databases/qsb-log.db
/data/data/com.google.android.gm/databases/downloads.db
/data/data/com.google.android.gm/databases/mailstore.qinjiangli85@gmail.com.db
/data/data/com.google.android.gm/databases/gmail.db
/data/data/com.google.android.apps.genie.geniewidget/databases/weather.db
/data/data/com.cooliris.media/databases/launcher.db
/data/data/com.cooliris.media/databases/picasa.db
/data/data/com.android.email/databases/EmailProviderBody.db
/data/data/com.android.email/databases/EmailProvider.db
/data/data/com.android.providers.drm/databases/drm.db
/data/data/com.getsetgames.megajump/databases/google_analytics.db
/data/data/com.getsetgames.megajump/databases/webviewCache.db
/data/data/com.getsetgames.megajump/databases/webview.db
/data/data/com.android.providers.downloads/databases/downloads.db
/data/data/com.rich.webviewtest/databases/webviewCache.db
/data/data/com.rich.webviewtest/databases/webview.db
/data/data/com.android.deskclock/databases/alarms.db
/data/data/com.android.providers.contacts/databases/contacts2.db
/data/data/com.android.providers.calendar/databases/calendar.db
/data/data/com.android.browser/app_icons/WebpageIcons.db
/data/data/com.android.browser/app_geolocation/CachedGeoposition.db
/data/data/com.android.browser/app_databases/Databases.db
/data/data/com.android.browser/app_appcache/ApplicationCache.db
/data/data/com.android.browser/databases/browser.db
/data/data/com.android.browser/databases/webviewCache.db
/data/data/com.android.browser/databases/webview.db
/data/data/com.android.bluetooth/databases/btopp.db
有了个db文件列表我们就可以把这些db 复制到电脑上进行 *** 作了
以通讯录数据库为例执行以下 *** 作:
adb pull /data/data/com.android.providers.contacts/databases/contacts2.db F:/androidres/systemdb
--1669 KB/s (271360 bytes in 0.158s)
F:/androidres/systemdb为任意本地目录 不明白pull命令的查看adb help
用sqlite3打开这个文件
F:/androidres/systemdb>sqlite3 contacts2.db
SQLite version 3.6.22
Enter ".help" for instructions
Enter SQL statements terminated with a ""
sqlite>.tables
_sync_state settings
_sync_state_metadata status_updates
accounts v1_settings
activitiesview_contacts
agg_exceptionsview_contacts_restricted
android_metadata view_data
calls view_data_restricted
contact_entities_view view_groups
contact_entities_view_restricted view_raw_contacts
contacts view_raw_contacts_restricted
data view_v1_contact_methods
groupsview_v1_extensions
mimetypes view_v1_group_membership
name_lookup view_v1_groups
nickname_lookup view_v1_organizations
packages view_v1_people
phone_lookup view_v1_phones
propertiesview_v1_photos
raw_contacts
想实现一个功能即让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 comdao=new CompanyDAO()
//得到所有公司列表
public List<Company>getCompanyList() {
List<Company>list=new ArrayList<Company>()
try {
list=comdao.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=0i<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=0i<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 初学,愿与大家相互交流。共同进步。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)