当前位置:   article > 正文

Android连接MySQL数据库实现登陆功能详细步骤_android用jdbc连接mysql数据库实现个人资料显示功能

android用jdbc连接mysql数据库实现个人资料显示功能

1. 加入依赖

在bulid.gradle中的 dependencies项 加入

  implementation 'mysql:mysql-connector-java:5.1.49'

2.开启联网权限

在 manifests/AndroidManifest.xml 文件中 加入

<uses-permission android:name="android.permission.INTERNET"/>

3.  JdbcUtil.java 工具类编写

  1. public class JdbcUtils {
  2. private static JdbcUtils instance;
  3. public static JdbcUtils getInstance() {
  4. if(instance == null){
  5. instance = new JdbcUtils();
  6. }
  7. return instance;
  8. }
  9. public static Connection getConnection(){
  10. try{
  11. Class.forName("com.mysql.jdbc.Driver");
  12. return DriverManager.getConnection("jdbc:mysql://10.0.2.2:3306/数据库名?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false&allowPublicKeyRetrieval=true",
  13. "root",
  14. "12345678");
  15. }catch(Exception e){
  16. e.printStackTrace();
  17. }
  18. return null;
  19. }
  20. public static void close(Connection conn){
  21. try{
  22. conn.close();
  23. }catch(SQLException throwables){
  24. throwables.printStackTrace();
  25. }
  26. }
  27. }

注意:

        1. url部分不能使用localhost或者127.0.0.1,安卓模拟器会把其当作手机本身的地址,应该为手机wifi网关地址10.0.2.2或者电脑局域网地址。 

        2.由于使用的5.1.49版本连接器 所以需要使用以下语句。 

Class.forName("com.mysql.jdbc.Driver"); 

4. UserDao.java

  1. public class UserDao {
  2. JdbcUtils jdbcUtil = JdbcUtils.getInstance();
  3. Connection conn = JdbcUtils.getConnection();
  4. public boolean login(String username, String password) throws SQLException{
  5. String sql = "SELECT * from userInfo where username= ? and password= ?";
  6. if(conn == null){
  7. Log.i("error", "无数据链接");
  8. return false;
  9. }else {
  10. try {
  11. PreparedStatement ps = conn.prepareStatement(sql);
  12. ps.setString(1, username);
  13. ps.setString(2, password);
  14. ResultSet rs = ps.executeQuery();
  15. Log.i("rs", "result:"+rs.toString());
  16. return rs.next();
  17. } catch (SQLException e) {
  18. e.printStackTrace();
  19. return false;
  20. }
  21. }
  22. }
  23. }

其中sql语句 请根据你的实际情况编写。 

5.User.java 

  1. public class User {
  2. private String username;
  3. private String password;
  4. public User(String username, String password) {
  5. this.username = username;
  6. this.password = password;
  7. }
  8. public String getUsername() {
  9. return username;
  10. }
  11. public void setUsername(String username) {
  12. this.username = username;
  13. }
  14. public String getPassword() {
  15. return password;
  16. }
  17. public void setPassword(String password) {
  18. this.password = password;
  19. }
  20. }

实体类 请根据自身数据库设置编写

6. 在MainActivity中调用

  1. public void onClick(View v) {
  2. new Thread(new Runnable() {
  3. @Override
  4. public void run() {
  5. String id = et_id.getText().toString().trim();
  6. String pwd = et_pwd.getText().toString().trim();
  7. if (id.equals("") || pwd.equals("")) {
  8. Looper.prepare();
  9. Toast toast = Toast.makeText(MainActivity.this, "输入不能为空!", Toast.LENGTH_SHORT);
  10. toast.show();
  11. Looper.loop();
  12. }
  13. UserDao ud = new UserDao();
  14. Boolean result;
  15. try {
  16. result = ud.login(id, pwd);
  17. } catch (SQLException e) {
  18. throw new RuntimeException(e);
  19. }
  20. Looper.prepare();
  21. Toast toast;
  22. if (!result) {
  23. toast = Toast.makeText(MainActivity.this, "用户名不存在或密码错误!", Toast.LENGTH_SHORT);
  24. } else {
  25. toast = Toast.makeText(MainActivity.this, "登录成功", Toast.LENGTH_SHORT);
  26. }
  27. toast.show();
  28. Looper.loop();
  29. }
  30. }).start();
  31. }

注意:需要新开一个线程访问数据库,否则可能主线程超时杀死连接导致 conn = null

其他布局文件 或者 变量名请根据实际情况更改。 

可能出现的问题:

  1. /**
  2. * @author Kevin Wang
  3. * 使用5.1.49版本连接器,用com.mysql.jdbc.Driver作为ClassName
  4. * MySQL Server : 8.0.30
  5. * 一直出现conn null 的原因是:
  6. * 1. 连接器版本问题 -> 在build.gradle中加入
  7. * implementation 'mysql:mysql-connector-java:5.1.49' 依赖项
  8. * 2. 数据库访问需要新开一个线程使用否则会网络超时,主线程杀死连接,返回null
  9. * 3. 联网权限未开启 -> 需要在manifests/AndroidManifest.xml加入
  10. * <uses-permission android:name="android.permission.INTERNET"/>
  11. * 4. 数据库url问题,如果使用localhost或者127.0.01 安卓模拟器会默认把手机地址当作前面两个地址
  12. * -> 将ip改为模拟器连接wifi的网关10.0.2.2 或者 局域网中电脑的ip地址即可
  13. *
  14. * */

文章为作者本人学习过程中总结的内容,内容或逻辑质量不高。 若有问题,还请各位读者斧正。  

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/513094
推荐阅读
相关标签
  

闽ICP备14008679号