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数据库等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)