安卓开发中连接数据库的思路及步骤

使用软件:MyEclipse 2017 CI、Android Studio、Navicat for MySQL(数据库)

在 Navicat for MySQL 软件中:

1、数据库建表

        如 users 表,含id,nickname,age等列名

MyEclipse 2017 CI软件中:

2、创建User.java类

        User.java类中包含id,nickname,age等字段、不带参数的默认构造方法User()、带有参数的构造方法User(String id, String nickName)、各个字段的getter和setter方法

    package com.test.model;

    public class User {
    	private String id;
	    private String nickName;
	    private String age;

	    public User() {}
	    
	    public User(String id, String nickName, String age) {
			super();
			this.id = id;
			this.nickName = nickName;
			this.age = age;
		}
	    
	    public String getId() {
	        return id;
	    }

	    public void setId(String id) {
	        this.id = id;
	    }

	    public String getNickName() {
	        return nickName;
	    }

	    public void setNickName(String nickName) {
	        this.nickName = nickName;
	    }

	    public String getAge() {
	        return age;
	    }

	    public void setAge(String age) {
	        this.age = age;
	    }
    }
3、创建UserDao.java类

        UserDao.java类中包含默认构造方法UserDao();
        add(User user)、update(User user)、findById(String id)、findAll()等对数据库操作的方法(增删改查),方法中包含sql语句和User.java类中的getter和setter方法,返回 User 或 List<User>

package com.test.dao;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import com.test.common.DbObject;
import com.test.model.User;

public class UserDao {
	public UserDao() {}

	public User add(User user){
		String sql = "insert into users (nickName,id,age) " + " values(?,?,?)";
		DbObject.executeUpdate(sql, user.getNickName(), user.getId(),user.getAge());
		
		return user;
	}
	
	public List<User> findAll(){
		ResultSet  rs = null;
		String sql = "select * from users";
		ArrayList<User> list = new ArrayList<User>();
		
		User user = null;
		
		try {
			rs = DbObject.executeQuery(sql);
			
			while (rs.next()){
				user = new User();
				 user.setNickName(rs.getString("nickName"));
	             user.setAge(rs.getString("age"));
	             user.setId(rs.getString("id"));
				list.add(user);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally{
			DbObject.close(null, null, rs);
		}
		
		return list;
	}
	
	public User findById(String id){
		ResultSet  rs = null;
		String sql = "select * from users where " + "id=?";
		
		User user = null;
		
		try {
			rs = DbObject.executeQuery(sql, id);
			
			if (rs.next()){
				 user = new User();
				 user.setNickName(rs.getString("nickName"));
	             user.setAge(rs.getString("age"));
	             user.setId(rs.getString("id"));
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally{
			DbObject.close(null, null, rs);
		}
		return user;
	}
}
4、创建UserService.java类

        UserService.java类中包含默认构造方法UserService()和对UserDao.java类中的findById(String id)、findAll()等方法的调用

package com.test.service;

import java.util.List;

import com.test.dao.UserDao;
import com.test.model.User;

public class UserService {

	public UserService() {}
	
	public User findById(String id){
		UserDao dao = new UserDao();
		return dao.findById(id);
	}
	
	public List<User> findAll(){
		UserDao dao = new UserDao();
		return dao.findAll();
	}
}
5、创建SearchUserServlet.java类

         SearchUserServlet.java类包含路径:@WebServlet("/searchuser") 和 doGet、doPost方法;
        doGet 方法中包括获取参数,调用 UserService.java 类中的方法,获取要查找的 User 或 List<User>, 将 User 类型转化为 JSON 类型,最后把 JSON 格式写到服务端流中,作为响应response

package com.test.controller;

import java.io.IOException;
import java.io.PrintWriter;

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 com.test.model.User;
import com.test.service.UserService;

import net.sf.json.JSONObject;

@WebServlet("/searchuser")
public class SearchUserServlet extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // 获取搜索关键字
        String userId = request.getParameter("searchKeyword");
        userId = new String(userId.getBytes("iso8859-1"), "utf-8");

        // 使用UserService查找用户
        UserService service = new UserService();
        User user = service.findById(userId);

		JSONObject jsonObject=new JSONObject();
    	//把User类型转化为JSON类型:JSON序列化
    	jsonObject.put("user",user);
    	//设置服务器端编码
    	response.setCharacterEncoding("utf-8");
    	//把JSON格式写到服务端流中
    	PrintWriter printWriter = response.getWriter();
    	printWriter.write(jsonObject.toString());

    	System.out.print("用户信息 JSON格式输出:"+jsonObject.toString());
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // 这里可以处理POST请求,如果不需要可以留空
    }
}

Android Studio软件中:

6、创建 SearchUserActivity.java 类

        在 SearchUserActivity.java 类的onCreate方法中,调用方法 sendGetRequest(searchKeyword);  发送GET请求获取用户信息
        在sendGetRequest(searchKeyword)方法中创建新线程执行网络请求(使用OkHttp发送GET请求、解析JSON响应、更新UI、处理用户不存在的情况)

import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import androidx.appcompat.app.AppCompatActivity;

import org.json.JSONException;
import org.json.JSONObject;

import java.io.IOException;

import com.example.test.user.util.OkHttpUtil;

public class SearchUserActivity extends AppCompatActivity {
    private static final String TAG = "SearchUserActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_searchuser);

        // 获取首页搜索框中传递过来的搜索关键字
        String searchKeyword = getIntent().getStringExtra("search_keyword");

        // 发送GET请求获取攻略详情
        sendGetRequest(searchKeyword);

        // 获取关注按钮
        Button guanzhuButton = findViewById(R.id.guanzhu);

        // 设置按钮点击事件监听器
        guanzhuButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 执行OkHttpUtil调用
                sendGuanzhuRequest(searchKeyword);
            }
        });
    }

    // 更新用户关注状态按钮文本
    private void updateGuanzhuButton(String guanzhu) {
        Button guanzhuButton = findViewById(R.id.guanzhu);
        if (guanzhu.equals("true")) {
            guanzhuButton.setText("已关注");
        } else {
            guanzhuButton.setText("关注");
        }
    }
    // 发送关注请求
    private void sendGuanzhuRequest(final String searchKeyword) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    // 发送OkHttp请求到 "/Test/guanzhu"
                    String response = OkHttpUtil.get("/Test/guanzhu?searchKeyword=" + searchKeyword);
                    Log.d(TAG, "用户关注Response: " + response);

                    // 解析响应的JSON数据
                    if (!response.equals("{}")) {
                        JSONObject jsonObject = new JSONObject(response);
                        JSONObject user = jsonObject.getJSONObject("user");

                        // 获取关注状态
                        String guanzhu = user.getString("guanzhu");

                        // 在UI线程中更新关注按钮文本
                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                updateGuanzhuButton(guanzhu);
                            }
                        });

                    } else {
                        // 用户不存在,弹出对话框提示用户
                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                AlertDialog.Builder builder = new AlertDialog.Builder(SearchUserActivity.this);
                                builder.setTitle("提示");
                                builder.setMessage("该用户不存在,请重新输入");
                                builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
                                    @Override
                                    public void onClick(DialogInterface dialog, int which) {
                                        // 用户点击确定按钮后的操作,例如清空输入框等
                                    }
                                });
                                builder.show();
                            }
                        });
                    }
                } catch (IOException | JSONException e) {
                    e.printStackTrace();
                }
            }
        }).start();
    }

    private void sendGetRequest(final String searchKeyword) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    String response = OkHttpUtil.get("/Test/searchuser?searchKeyword=" + searchKeyword);
                    Log.d(TAG, "用户信息Response: " + response);

                    // 解析响应的JSON数据
                    if (!response.equals("{}")) {
                        JSONObject jsonObject = new JSONObject(response);
                        JSONObject user = jsonObject.getJSONObject("user");

                        // 从JSON数据中提取信息
                        String idCard = user.getString("id");
                        // 获取关注状态
                        String guanzhu = user.getString("guanzhu");

                        Log.d(TAG,"run3:"+id);

                        // 在UI线程中更新UI显示
                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                // 在此将id等信息显示在相应的视图上
                                TextView TextView1 = findViewById(R.id.user_id_textView);
                                TextView1.setText(idCard);
                                updateGuanzhuButton(guanzhu);
                            }
                        });
                    } else {
                        // 用户不存在,弹出对话框提示用户
                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                AlertDialog.Builder builder = new AlertDialog.Builder(SearchUserActivity.this);
                                builder.setTitle("提示");
                                builder.setMessage("该用户不存在,请重新输入");
                                builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
                                    @Override
                                    public void onClick(DialogInterface dialog, int which) {
                                        // 用户点击确定按钮后的操作,例如清空输入框等
                                    }
                                });
                                builder.show();
                            }
                        });
                    }
                } catch (IOException | JSONException e) {
                    e.printStackTrace();
                }
            }
        }).start();
    }
}

String response = OkHttpUtil.get("/Test/searchuser?searchKeyword=" + searchKeyword);

中的 Test 是 MyEclipse 2017 CI 软件中创建的项目名

知识点:

Activity 类中的onCreate 方法:

        在Android开发中,onCreate 是一个生命周期方法,它属于 Activity 类。当一个 Activity 被首次创建时,onCreate 方法会被系统调用。这是初始化 Activity 所必需的设置和视图(UI)组件的地方。

onCreate 方法通常包含以下操作:
  • 设置布局:通过调用 setContentView 方法来设置 Activity 的用户界面。这通常是一个XML布局文件,它定义了 Activity 的外观。
  • 初始化组件:使用 findViewById 来查找并初始化UI组件,如按钮、文本框等。
  • 设置监听器:为UI组件设置事件监听器,以响应用户交互,如点击事件。
  • 加载数据:如果 Activity 需要显示数据,可能会在这里进行数据的加载和初始化。

  • 18
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值