Android客户端和数据库通信综合小例程序
1.android连接数据库的方式有两种
1.通过连接服务器,再由服务器读取数据库来实现数据的增删改查,这也是我们常用的方式。
2.android直接连接数据库,这种方式非常耗手机内存,而且容易被反编译造成安全隐患,所以在实际项目中不推荐使用。
2.连接服务器方式: http通信 、 Socket通信
Http通信:POST方式、GET方式
POST方式和GET方式的区别:
前者通过Http消息实体发送数据给服务器,安全性高,数据传输大小没有限制,后者通过URL的查询字符串传递给服务器参数,以明文显示在浏览器地址栏,保密性差,最多传输2048个字符。但是GET请求并不是一无是处——GET请求大多用于查询(读取资源),效率高。POST请求用于注册、登录等安全性较高且向数据库中写入数据的操作。
除了POST和GET,http通信还有其他方式!请参见http请求的方法。
Http与Scoket区别:
简单理解:一个单向,一个双向。(具体了解,自行google)
开发环境部署:
程序结构:
android+servlet+service+mysql+mysqlfront
仅供参考:能实现相关功能即可
操作系统:win10
数据库:mysql 数据库工具: MySqlFront
服务器:tomcat 服务器工具: myeclipse
安卓端:genymotion虚拟机 安卓端工具:eclipse
数据库设计:
create table users (
id int primary key not null auto_increment,
username varchar(40) unique not null,
password varchar(40) not null
) ;
1、服务器设计:
目录如图所示—>
2.项目代码:
```java
package cn.itcast.estore.service;
import javax.mail.Message;
import javax.mail.Session;
import cn.itcast.estore.dao.UserDAO;
import cn.itcast.estore.domain.User;
import cn.itcast.estore.utils.MailUtils;
/**
* 用户操作 业务层
*
* @author seawind
*
*/
public class UserService {
// 用户注册
// 这里没写返回值,用户名 或者 邮箱重复 报错
public void regist(User user) {
// 1、将用户信息 保存数据库
// 生成激活码
String activecode = MailUtils.generateActivecode();
user.setActivecode(activecode);
// 传递DAO
UserDAO dao = new UserDAO();
dao.insert(user);
// 2、发送激活邮件 ---- 安装易邮测试
// 易邮三个账号 service/111 aaa/111 bbb/111 --- service发邮件
// 创建Session
Session session = MailUtils.createSession();
try {
// 编写邮件
Message message = MailUtils.generateMessage(session, user);
// 发送邮件
MailUtils.sendMail(message, session);
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException("发送激活邮件失败!");
}
}
// 账户激活
public void active(String activecode) {
// 1、根据激活码 查询账户 --- 判断激活码是否存在
UserDAO dao = new UserDAO();
User user = dao.findByActivecode(activecode);
if (user == null) {
// 激活码无效
throw new RuntimeException("激活码无效!");
} else {
// 激活码存在
// 2 判断激活码是否过期
if (System.currentTimeMillis() - user.getRegisttime().getTime() > 1000 * 60 * 60 * 2) {
// 超过两小时
// TODO 重新发送 --- 更新数据库保存激活码
throw new RuntimeException("激活码已经过期!");
} else {
// 3 可以激活
user.setState(1);
dao.updateState(user);
}
}
}
// 用户登录 --- 返回包含所有用户信息 对象
public User login(User user) {
// 传递用户名 和密码 到DAO
UserDAO userDAO = new UserDAO();
return userDAO.findByUsernameAndPassword(user.getUsername(), user
.getPassword());
}
}
客户端设计:
现在开始思考需要什么东西…
<1> 登陆和注册页面:布局文件
login.xml , register.xml
<2> 登陆和注册页面对应的Activity组件,在activity中进行具体操作
login.java , register.java
<3> 能够实现Http以get/post方式通信的类
WebService.java , WebServicePost.java
<4> 网络通信权限
<uses-permission android:name="android.permission.INTERNET" />
项目结构和AndroidMainfest.xml:
<?xml version="1.0" encoding="utf-8"?><uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.androidhttpdemo.Login"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.example.androidhttpdemo.RegLet"
android:label="@string/title_activity_reg_let" >
</activity>
</application>
``` 界面(极为简陋,按个人自行喜好设定):
登陆界面:
注册界面:
运行效果:
客户端注册——>
服务器器端——>
后台数据库代码和Android工程后续放链接。
https://download.csdn.net/download/liumao1993/12052074
https://download.csdn.net/download/liumao1993/12052082