如何进行Android数据库 *** 作

如何进行Android数据库 *** 作,第1张

Android数据 *** 作类实例

实体类:UserInfojava

package mydb;

import javaioSerializable;

import androidgraphicsdrawableDrawable;

public class UserInfo implements Serializable {

public static final String ID = "_id";

public static final String USERID = "userId";

public static final String TOKEN = "token";

public static final String TOKENSECRET = "tokenSecret";

public static final String USERNAME = "userName";

public static final String USERICON = "userIcon";

private String id;

private String userId; // 用户id

private String token;

private String tokenSecret;

private String userName;

private Drawable userIcon;

//getter and setter省略

}

SqliteHelper类:

package mydb;

import androidcontentContext;

import androiddatabasesqliteSQLiteDatabase;

import androiddatabasesqliteSQLiteDatabaseCursorFactory;

import androiddatabasesqliteSQLiteOpenHelper;

import androidutilLog;

public class SqliteHelper extends SQLiteOpenHelper{

//用来保存UserID、Access Token、Access Secret的表名

public static final String TB_NAME= "users";

public SqliteHelper(Context context, String name, CursorFactory factory, int version) {

super(context, name, factory, version);

}

//创建表

@Override

public void onCreate(SQLiteDatabase db) {

dbexecSQL( "CREATE TABLE IF NOT EXISTS "+

TB_NAME+ "("+

UserInfo ID+ " integer primary key,"+

UserInfo USERID+ " varchar,"+

UserInfo TOKEN+ " varchar,"+

UserInfo TOKENSECRET+ " varchar,"+

UserInfo USERNAME+ " varchar,"+

UserInfo USERICON+ " blob"+

")"

);

Log e("Database" ,"onCreate" );

}

//更新表

@Override

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

dbexecSQL( "DROP TABLE IF EXISTS " + TB_NAME );

onCreate(db);

Log e("Database" ,"onUpgrade" );

}

//更新列

public void updateColumn(SQLiteDatabase db, String oldColumn, String newColumn, String typeColumn){

try{

dbexecSQL( "ALTER TABLE " +

TB_NAME + " CHANGE " +

oldColumn + " "+ newColumn +

" " + typeColumn

);

} catch(Exception e){

eprintStackTrace();

}

}

}

CRUD类DataHelper:

package mydb;

import javaioByteArrayInputStream;

import javaioByteArrayOutputStream;

import javautilArrayList;

import javautilList;

import androidcontentContentValues;

import androidcontentContext;

import androiddatabaseCursor;

import androiddatabasesqliteSQLiteDatabase;

import androidgraphicsBitmap;

import androidgraphicsdrawableDrawable;

import androidutilLog;

public class DataHelper {

// 数据库名称

private static String DB_NAME = "weibodb";

// 数据库版本

private static int DB_VERSION = 2;

private SQLiteDatabase db;

private SqliteHelper dbHelper;

public DataHelper(Context context) {

dbHelper = new SqliteHelper(context, DB_NAME, null, DB_VERSION );

db = dbHelpergetWritableDatabase();

}

public void Close() {

dbclose();

dbHelperclose();

}

// 获取users表中的UserID、Access Token、Access Secret的记录

public List<UserInfo> GetUserList(Boolean isSimple) {

List<UserInfo> userList = new ArrayList<UserInfo>();

Cursor cursor = dbquery(SqliteHelper TB_NAME, null, null , null, null,

null, UserInfo ID + " DESC");

cursormoveToFirst();

while (!cursorisAfterLast() && (cursorgetString(1) != null )) {

UserInfo user = new UserInfo();

usersetId(cursorgetString(0));

usersetUserId(cursorgetString(1));

usersetToken(cursorgetString(2));

usersetTokenSecret(cursorgetString(3));

if (!isSimple) {

usersetUserName(cursorgetString(4));

ByteArrayInputStream stream = new ByteArrayInputStream(cursorgetBlob(5));

Drawable icon = DrawablecreateFromStream(stream, "image");

usersetUserIcon(icon);

}

userListadd(user);

cursormoveToNext();

}

cursorclose();

return userList;

}

// 判断users表中的是否包含某个UserID的记录

public Boolean HaveUserInfo(String UserId) {

Boolean b = false;

Cursor cursor = dbquery(SqliteHelper TB_NAME, null, UserInfoUSERID

+ "=", new String[]{UserId}, null, null, null );

b = cursormoveToFirst();

Log e("HaveUserInfo", btoString());

cursorclose();

return b;

}

// 更新users表的记录,根据UserId更新用户昵称和用户图标

public int UpdateUserInfo(String userName, Bitmap userIcon, String UserId) {

ContentValues values = new ContentValues();

valuesput(UserInfo USERNAME, userName);

// BLOB类型

final ByteArrayOutputStream os = new ByteArrayOutputStream();

// 将Bitmap压缩成PNG编码,质量为100%存储

userIconcompress(BitmapCompressFormat PNG, 100, os);

// 构造SQLite的Content对象,这里也可以使用raw

valuesput(UserInfo USERICON, ostoByteArray());

int id = dbupdate(SqliteHelper TB_NAME, values, UserInfoUSERID + "=" , new String[]{UserId});

Log e("UpdateUserInfo2", id + "");

return id;

}

// 更新users表的记录

public int UpdateUserInfo(UserInfo user) {

ContentValues values = new ContentValues();

valuesput(UserInfo USERID, usergetUserId());

valuesput(UserInfo TOKEN, usergetToken());

valuesput(UserInfo TOKENSECRET, usergetTokenSecret());

int id = dbupdate(SqliteHelper TB_NAME, values, UserInfoUSERID + "="

+ usergetUserId(), null);

Log e("UpdateUserInfo", id + "");

return id;

}

// 添加users表的记录

public Long SaveUserInfo(UserInfo user) {

ContentValues values = new ContentValues();

valuesput(UserInfo USERID, usergetUserId());

valuesput(UserInfo TOKEN, usergetToken());

valuesput(UserInfo TOKENSECRET, usergetTokenSecret());

Long uid = dbinsert(SqliteHelper TB_NAME, UserInfoID, values);

Log e("SaveUserInfo", uid + "");

return uid;

}

// 添加users表的记录

public Long SaveUserInfo(UserInfo user, byte[] icon) {

ContentValues values = new ContentValues();

valuesput(UserInfo USERID, usergetUserId());

valuesput(UserInfo USERNAME, usergetUserName());

valuesput(UserInfo TOKEN, usergetToken());

valuesput(UserInfo TOKENSECRET, usergetTokenSecret());

if(icon!= null){

valuesput(UserInfo USERICON, icon);

}

Long uid = dbinsert(SqliteHelper TB_NAME, UserInfoID, values);

Log e("SaveUserInfo", uid + "");

return uid;

}

// 删除users表的记录

public int DelUserInfo(String UserId) {

int id = dbdelete(SqliteHelper TB_NAME,

UserInfo USERID + "=", new String[]{UserId});

Log e("DelUserInfo", id + "");

return id;

}

public static UserInfo getUserByName(String userName,List<UserInfo> userList){

UserInfo userInfo = null;

int size = userListsize();

for( int i=0;i<size;i++){

if(userNameequals(userListget(i)getUserName())){

userInfo = userListget(i);

break;

}

}

return userInfo;

}

}

想实现一个功能即让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=comdaogetCompanyList();

} catch (SQLException e) {

eprintStackTrace();

list=null;

}

return list;

}

}

注意: 我这里的返回值是list,不少webservice的基本类型,所以需要为它配置文件 接口+aegisxml

4 接口+aegisxml

Xml代码

<xml version="10" encoding="UTF-8">

<mappings>

<mapping>

<!--

<method name="getCollectionsRowCount">

<parameter index="0" componentType="javalangString"/>

</method>

-->

<!-- 返回的类型是Map的话,做法和List一样。但定义的类型,是Map中的Value部分 -->

<method name="getCompanyList">

<return-type componentType="beanCompany"/>

</method>

</mapping>

</mappings>

5servicexml

Xml代码

<xml version="10" encoding="UTF-8">

<beans >

<service xmlns=">

用Android程序去直连MySQL数据库,觉得这样做不好,出于安全等方面考虑。数据库地址,用户名密码,查询SQL什么的都存在程序里,很容易被反编译等方法看到。

建议把表示层和数据层逻辑分开,数据层对应网页的表示层提供接口,同时在为Android手机端提供一个接口,简介访问数据库,这接口可以2端都保持一致,比如XML+RPC或者json等等,Android端也有现成的东西能直接用,既安全又省事。

android 链接mysql数据库实例:

package comhl;

import javasqlDriverManager;

import javasqlResultSet;

import commysqljdbcConnection;

import commysqljdbcStatement;

import androidappActivity;

import androidosBundle;

import androidviewView;

import androidviewViewOnClickListener;

import androidwidgetButton;

import androidwidgetTextView;

public class AndroidMsql extends Activity {

@Override

public void onCreate(Bundle savedInstanceState) {

superonCreate(savedInstanceState);

setContentView(Rlayoutmain);

Button btn=(Button)findViewById(Ridbtn);

btnsetOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

sqlCon();

}

});

}

private void mSetText(String str){

TextView txt=(TextView)findViewById(Ridtxt);

txtsetText(str);

}

private void sqlCon(){

try {

ClassforName("commysqljdbcDriver");

} catch (Exception e) {

eprintStackTrace();

}

try {

String url ="jdbc:mysql://192168142128:3306/mysqluser=zzfeihua&password=12345&useUnicode=true&characterEncoding=UTF-8";//链接数据库语句

Connection conn= (Connection) DriverManagergetConnection(url); //链接数据库

Statement stmt=(Statement) conncreateStatement(ResultSetTYPE_SCROLL_SENSITIVE,ResultSetCONCUR_UPDATABLE);

String sql="select from user";//查询user表语句

ResultSet rs=stmtexecuteQuery(sql);//执行查询

StringBuilder str=new StringBuilder();

while(rsnext()){

strappend(rsgetString(1)+"\n");

}

mSetText(strtoString());

rsclose();

SQLite

一个非常流行的嵌入式数据库,它支持

SQL

语言,并且只利用很少的内存就有很好的性能。此外它还是开源的,任何人都可以使用它。许多开源项目((Mozilla,

PHP,

Python)都使用了

SQLite

Android

开发中使用

SQLite

数据库

Activites

可以通过

Content

Provider

或者

Service

访问一个数据库。下面会详细讲解如果创建数据库,添加数据和查询数据库。

创建数据库

Android

不自动提供数据库。在

Android

应用程序中使用

SQLite,必须自己创建数据库,然后创建表、索引,填充数据。Android

提供了

SQLiteOpenHelper

帮助你创建一个数据库,你只要继承

SQLiteOpenHelper

类,就可以轻松的创建数据库。SQLiteOpenHelper

类根据开发应用程序的需要,封装了创建和更新数据库使用的逻辑。SQLiteOpenHelper

的子类,至少需要实现三个方法:

构造函数,调用父类

SQLiteOpenHelper

的构造函数。这个方法需要四个参数:上下文环境(例如,一个

Activity),数据库名字,一个可选的游标工厂(通常是

Null),一个代表你正在使用的数据库模型版本的整数。

onCreate()方法,它需要一个

SQLiteDatabase

对象作为参数,根据需要对这个对象填充表和初始化数据。

onUpgrage()

方法,它需要三个参数,一个

SQLiteDatabase

对象,一个旧的版本号和一个新的版本号,这样你就可以清楚如何把一个数据库从旧的模型转变到新的模型。

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

  / 

      查找一条数据 

      @param uid 

     /  

    public User find(Integer uid){  

        SQLiteDatabase db=dbOpenHelpergetReadableDatabase();  //创建数据库辅助类

        Cursor cursor =dbrawQuery("select  from user where uid=", new String[]{uidtoString()});  //创建一个游标

        if(cursormoveToFirst()){  //循环遍历查找数组

            int uid2=cursorgetInt(cursorgetColumnIndex("uid"));  

            String uname=cursorgetString(cursorgetColumnIndex("uname"));  

            String uaddress=cursorgetString(cursorgetColumnIndex("uaddress"));  

            User user=new User();  

            usersetUid(uid2);  

            usersetUname(uname);  

            usersetUaddress(uaddress);  

            return user;  

        }  

        cursorclose();  

        return null;  

    }

以上就是关于如何进行Android数据库 *** 作全部的内容,包括:如何进行Android数据库 *** 作、Android 怎么连接远程数据库、android怎么连接mysql数据库等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9687822.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存