通过Android智能终端完成mysql数据库中的账号密码验证

来源:互联网 发布:如何备份c盘数据 编辑:程序博客网 时间:2024/06/06 05:01

首先要先建立一个android_test数据库,在数据库中建立一张userinfo的表。

表中包含字段username,password。

然后创建一个android项目,在res/layout中新建一个page_2.xml的xml文件。设计界面如下

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    android:orientation="vertical" >        <RelativeLayout        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:layout_marginTop="1dp"        android:orientation="horizontal" >                <TextView        android:id="@+id/textView1"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_marginTop="20dp"       android:layout_centerHorizontal="true"        android:text="@string/welcome"        android:textSize="28sp" />        </RelativeLayout>                         <RelativeLayout        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:orientation="horizontal"         android:layout_marginTop="30dp">         <TextView             android:id="@+id/textView2"             android:layout_width="wrap_content"             android:layout_height="wrap_content"             android:layout_alignParentLeft="true"             android:layout_alignParentTop="true"             android:layout_marginLeft="36dp"             android:text="学号"              android:textSize="30sp" />                  <AutoCompleteTextView        android:id="@+id/auto1"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_marginLeft="130dp"                android:ems="10"        android:hint="请输入你的学号"        android:inputType="phone"        android:singleLine="true" />                 </RelativeLayout>                           <RelativeLayout        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:orientation="horizontal"         android:layout_marginTop="30dp">             <TextView                 android:id="@+id/textView3"                 android:layout_width="wrap_content"                 android:layout_height="wrap_content"                 android:layout_alignParentLeft="true"                 android:layout_alignParentTop="true"                 android:layout_marginLeft="36dp"                 android:text="密码"                  android:textSize="30sp"/>                                        <EditText        android:id="@+id/editText2"        android:layout_width="wrap_content"        android:layout_height="wrap_content"         android:layout_marginLeft="130dp"        android:ems="10"        android:hint="请输入你的密码"        android:inputType="textPassword"        android:singleLine="true" />                      </RelativeLayout>                  <RelativeLayout        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:orientation="horizontal"         android:layout_marginTop="50dp">        <TextView            android:id="@+id/textView1"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_alignParentLeft="true"            android:layout_alignParentTop="true"            android:layout_marginLeft="36dp"            android:text="课程"            android:textSize="30sp" />        <Spinner            android:id="@+id/spinner1"            android:layout_width="120dp"            android:layout_height="wrap_content"            android:layout_alignParentTop="true"            android:layout_marginLeft="60dp"            android:layout_toRightOf="@+id/textView1" />            </RelativeLayout>         <RelativeLayout                android:layout_width="fill_parent"        android:layout_height="fill_parent"        android:orientation="horizontal"         android:layout_marginTop="30dp"             >             <Button                 android:id="@+id/button1"                 android:layout_width="100dp"                 android:layout_height="40dp"                 android:layout_alignParentLeft="true"                 android:layout_alignParentTop="true"                 android:layout_marginLeft="52dp"                 android:layout_marginTop="26dp"                 android:text="@string/sign_in" />             <Button                 android:id="@+id/button2"                 android:layout_width="100dp"                 android:layout_height="40dp"                 android:layout_alignBaseline="@+id/button1"                 android:layout_alignBottom="@+id/button1"                 android:layout_marginLeft="28dp"                 android:layout_toRightOf="@+id/button1"                 android:text="清空" />                      </RelativeLayout>      </LinearLayout>    
注意:spinner中的数据源可以根据自己的需求来更改,只是为了实现把本页面的数据传到下一个界面的功能。

然后新建page2.java文件

package com.example.sign_in_system_2;import java.util.HashMap;import java.util.List;import java.util.Map;import com.example.sign_in_system_2.Json.JsonTools;import com.example.sign_in_system_2.domain.ResultMessage;import com.example.sign_in_system_2.http.HttpUtils;import android.widget.ArrayAdapter;import android.os.AsyncTask;import android.os.Bundle;import android.app.Activity;import android.app.ProgressDialog;import android.content.Intent;import android.util.Log;import android.view.KeyEvent;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.widget.AdapterView;import android.widget.AdapterView.OnItemSelectedListener;import android.widget.AutoCompleteTextView;import android.widget.Button;import android.widget.EditText;import android.widget.Spinner;import android.widget.Toast;/** *  * @author traject0ry * 在界面2中完成界面的登陆和登陆账号自动填充的功能 */public class page_2 extends Activity implements OnItemSelectedListener {private final String TAG = "page_2";private Button button, button2;private AutoCompleteTextView usernameEditText;private EditText passwordEditText;private ArrayAdapter<String> adapter;// 数组适配器private Spinner spinner;private ArrayAdapter<CharSequence> adapter2;private final String LOGIN_PATH = HttpUtils.BASE_URL+"LoginAction";// 验证账号密码功能的地址private final String Username_PATH = HttpUtils.BASE_URL+"UsernameAction";// 创建dialogprivate ProgressDialog dialog;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.page2);button = (Button) this.findViewById(R.id.button1);usernameEditText = (AutoCompleteTextView) this.findViewById(R.id.auto1);passwordEditText = (EditText) this.findViewById(R.id.editText2);button2 = (Button) this.findViewById(R.id.button2);spinner=(Spinner)this.findViewById(R.id.spinner1);adapter2=ArrayAdapter.createFromResource(this, R.array.course, android.R.layout.simple_spinner_dropdown_item);adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);spinner.setAdapter(adapter2);spinner.setOnItemSelectedListener(this);dialog = new ProgressDialog(this);dialog.setTitle("提示");dialog.setMessage("正在连接,请稍后....");new MyTask().execute(Username_PATH);// button的按键监听器//也可以继承onclicklistener来实现鼠标监听器的功能button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// TODO 自动生成的方法存根click();}});button2.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// TODO 自动生成的方法存根usernameEditText.setText("");passwordEditText.setText("");}});passwordEditText.setOnKeyListener(new View.OnKeyListener() {@Overridepublic boolean onKey(View v, int keyCode, KeyEvent event) {// 当按下回车时执行的操作if (event.getAction() == KeyEvent.ACTION_DOWN&& keyCode == KeyEvent.KEYCODE_ENTER) {click();}return false;}});}/* * public boolean onKeyDown(int keyCode, KeyEvent event) { * super.onKeyDown(keyCode, event); return false; } */// click函数public void click() {String value1 = usernameEditText.getText().toString().trim();String value2 = passwordEditText.getText().toString().trim();if (value1 == null || value1.equals("")) {usernameEditText.setError("请输入学号");} else if (value2 == null || value2.equals("")) {passwordEditText.setError("请输入密码");} else {Map<String, String> params = new HashMap<String, String>();params.put("url", LOGIN_PATH);params.put("username", value1);params.put("password", value2);try {String result = new LoginAsyncTask().execute(params).get();ResultMessage message = JsonTools.getResultMessage(result);if (message.getResultCode() == 1) {Toast.makeText(page_2.this, message.getResultMessage(), 1).show();//显示登陆成功Intent intent = new Intent(page_2.this, page_3.class);/* 通过Bundle对象存储封装需要传递的数据 */  Bundle bundle = new Bundle();  /*字符、字符串、布尔、字节数组、浮点数等等,都可以传*/ bundle.putString("username", value1);bundle.putString("course", spinner.getSelectedItem().toString());intent.putExtras(bundle);startActivity(intent);}} catch (Exception e) {// TODO: handle exceptionToast.makeText(page_2.this, "账号密码错误", 1).show();// if中的条件错误也会在catch中执行}}}// 异步任务class LoginAsyncTask extends AsyncTask<Map<String, String>, Void, String> {@Overrideprotected void onPreExecute() {// TODO Auto-generated method stubsuper.onPreExecute();dialog.show();}@Overrideprotected String doInBackground(Map<String, String>... params) {// TODO Auto-generated method stubMap<String, String> map = params[0];// 表单数据Map<String, Object> params2 = new HashMap<String, Object>();params2.put("username", map.get("username"));params2.put("password", map.get("password"));String result = HttpUtils.sendPostMethod(map.get("url"), params2,"utf-8");return result;}@Overrideprotected void onPostExecute(String result) {// TODO Auto-generated method stubsuper.onPostExecute(result);dialog.dismiss();}}// AutoCompleteTextview的异步任务class MyTask extends AsyncTask<String, Void, List<String>> {@Overrideprotected void onPreExecute() {// TODO Auto-generated method stubsuper.onPreExecute();dialog.show();}@Overrideprotected List<String> doInBackground(String... params) {// TODO Auto-generated method stubList<String> list = null;String jsonString = HttpUtils.sendPostMethod2(params[0], "utf-8"); Log.i(TAG, "--->>"+jsonString); System.out.println("----->>"+jsonString); list = JsonTools.parseList(jsonString);System.out.println("---list-->>"+list);return list;}@Overrideprotected void onPostExecute(List<String> result) {// TODO Auto-generated method stubsuper.onPostExecute(result);adapter = new ArrayAdapter<String>(page_2.this, android.R.layout.simple_list_item_1, result);usernameEditText.setAdapter(adapter);//适配器完成自动填充窗体中数据源的绑定dialog.dismiss();}}@Overridepublic void onItemSelected(AdapterView<?> parent, View view, int position,long id) {// TODO 自动生成的方法存根String item=spinner.getItemAtPosition(position).toString();Toast.makeText(this, "你选中了"+item, 1).show();}@Overridepublic void onNothingSelected(AdapterView<?> parent) {// TODO 自动生成的方法存根}}

服务器代码:

DBManager.java

package com.jdbc.db;import java.lang.reflect.Field;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.ResultSetMetaData;import java.sql.SQLException;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;/** * 负责访问数据库的工具类 *  * @author Traject0ry *  */public class DBManager {// 数据库的用户名和密码private final String USERNAME = "root";private final String PSWD = "root";// 数据库的驱动private final String DRIVER = "com.mysql.jdbc.Driver";private final String URL = "jdbc:mysql://127.0.0.1:3306/android_test";private Connection connection;// 链接数据库private PreparedStatement pstmt;// 采用预编译的sql语句执行添加、删除、修改和查询的功能,效率高private ResultSet rs;// 查询返回的结果集合private static DBManager instance;public DBManager() {// TODO Auto-generated constructor stubtry {Class.forName(DRIVER);} catch (Exception e) {// TODO: handle exceptione.printStackTrace();}}public void getConnection() {try {connection = DriverManager.getConnection(URL, USERNAME, PSWD);} catch (Exception e) {// TODO: handle exception}}/** * 使用单例模式获得数据库的访问对象:保证数据的安全性 *  * @return */public static DBManager getInstance() {if (instance == null) {instance = new DBManager();}return instance;}/** * 释放连接: */public void releaseConn() {if (rs != null) {try {rs.close();} catch (Exception e) {// TODO: handle exception}}if (pstmt != null) {try {pstmt.close();} catch (Exception e) {// TODO: handle exception}}if (connection != null) {try {connection.close();} catch (Exception e) {// TODO: handle exception}}}public List<String> query(String sql) throws SQLException {Map<String, Object> map = new HashMap<String, Object>();pstmt = connection.prepareStatement(sql);List<String> list = new ArrayList<String>();rs = pstmt.executeQuery();ResultSetMetaData metaData = rs.getMetaData();int cols_len = metaData.getColumnCount();String key = metaData.getColumnName(1);System.out.println("key=" + key);System.out.println("len=" + cols_len);while (rs.next()) {String value = rs.getString(key);System.out.println("value=" + value);if (value == null) {value = "";}list.add(value);}return list;}}

LoginDao.java:

package com.android.login;import java.util.List;import java.util.Map;import com.jdbc.db.DBManager;public class LoginDao implements LoginService {private DBManager manager;public LoginDao() {// TODO Auto-generated constructor stubmanager = DBManager.getInstance();}@Overridepublic boolean isUserExitLogin(List<Object> params) {// TODO Auto-generated method stubString sql = "select * from userinfo where username = ?  and password = ? ";//?为params的值manager.getConnection();Map<String, Object> map = null;boolean flag = false;try {map = manager.querySimpleMap(sql, params);flag = map.isEmpty() ? false : true;} catch (Exception e) {// TODO: handle exception}return flag;}}

ResultMessage.java:

package com.android.login;public class ResultMessage {private int resultCode;// 结果码private String resultMessage;// 结果信息public int getResultCode() {return resultCode;}public void setResultCode(int resultCode) {this.resultCode = resultCode;}public String getResultMessage() {return resultMessage;}public void setResultMessage(String resultMessage) {this.resultMessage = resultMessage;}public ResultMessage() {// TODO Auto-generated constructor stub}public ResultMessage(int resultCode, String resultMessage) {super();this.resultCode = resultCode;this.resultMessage = resultMessage;}}

建立接口LoginService.java:

package com.android.login;import java.util.List;public interface LoginService {// 判断用户是否存在public boolean  isUserExitLogin(List<Object> params);}
LoginAction.java:

package com.android.login;/** * @author 张仁杰 */import java.io.IOException;import java.io.PrintWriter;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import net.sf.json.JSONSerializer;/** * Servlet implementation class LoginAction */@WebServlet("/LoginAction")public class LoginAction extends HttpServlet {private static final long serialVersionUID = 1L;    private LoginService service;@Overridepublic void init() throws ServletException {// TODO Auto-generated method stubsuper.init();service = new LoginDao();}    /**     * @see HttpServlet#HttpServlet()     */    public LoginAction() {        super();        // TODO Auto-generated constructor stub    }/** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stubthis.doPost(request, response);}/** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stubresponse.setContentType("text/html;charset=utf-8");request.setCharacterEncoding("utf-8");response.setCharacterEncoding("utf-8");PrintWriter writer = response.getWriter();//获得客户端提交表单数据String username = request.getParameter("username");String password = request.getParameter("password");List<Object> params = new ArrayList<Object>();params.add(username);params.add(password);boolean flag = service.isUserExitLogin(params);System.out.println("--->>"+flag);if(flag){ResultMessage message = new ResultMessage(1, "登录成功");Map<String,Object> map = new HashMap<String, Object>();map.put("result", message);String jsonString = JSONSerializer.toJSON(map).toString();writer.println(jsonString);}writer.flush();writer.close();}}

这样一个简单的账号密码验证的功能就完成了。

0 0
原创粉丝点击