Android 开发链接本地mysql

1.加载jar包

在这里插入图片描述
在这里插入图片描述
最后查看项目依赖看到一下效果说明jar包加载成功
在这里插入图片描述

2.baseDao编码

注意在安卓中 的jdbc:mysql://ip:3306/musicdb
ip不可以使用127.0.0.1以及localhost


```java
package com.examplehq.musicdemo.dao;

import android.util.Log;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class BaseDao {
/***
 * 数据库驱动
 */
private static String driver="com.mysql.jdbc.Driver";
/**
 * 数据库路径
 * 
 */
private static String url="jdbc:mysql://192.168.1.104:3306/musicdb";
/**
 * 用户名
 */
private static String user="sa";
/**
 * 密码
 */
private static String password="sa";

/**
 * 加载驱动类(只需要加载一次) static{} -- 静态块
 * 
 * 
 */
static{
	try {
		Class.forName(driver);
		Log.i("TAG", "加载驱动成功: ");
	} catch (ClassNotFoundException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
}
/**
 * 打开连接  抛出异常 交给调用者处理
 * @return
 * @throws SQLException
 */
public static Connection getConnection() throws SQLException{
	Connection	conn= null;
	Log.i("url", url);
	conn=DriverManager.getConnection(url, user, password);
	Log.i("TAG", "数据库链接成功: ");
	return conn;
	
}
/**
 * 关闭数据库资源从小到大
 * @param conn
 * @param ps
 * @param rs
 */
public void  closeAll(Connection conn, PreparedStatement ps,ResultSet rs) {
	try {
		if (rs!=null) {
			rs.close();
		}if (ps!=null) {
			ps.close();
			
		}if (conn!=null) {
			conn.close();
		}
	} catch (Exception e) {
		// TODO: handle exception
		e.printStackTrace();
	}
	
}
public int myExecutteUpdate(String sql,Object...pars){
	int result =0;
	Connection conn=null;
	PreparedStatement ps=null;
	ResultSet rs=null;
	try {
		conn=getConnection();
		ps=conn.prepareStatement(sql);
		if (pars!=null&& pars.length!=0) {
			for (int i = 0; i < pars.length; i++) {
				ps.setObject(i+1, pars[i]);
			}
		}
		result =ps.executeUpdate();
	} catch (Exception e) {
		// TODO: handle exception
		e.printStackTrace();
	}finally {
		closeAll(conn, ps, rs);
	}
	return result;
	
	
	
	
}
}

3.配置清单文件

在这里插入图片描述

4.编写实现代码usersDaoImpl


   /**
     * 资源
     * @param users
     * @return
     */
    Connection conn =null;
    PreparedStatement ps=null;
    ResultSet rs=null;
    @Override
  public Users login(Users users) {
        Users us=null;
        try {

            conn=BaseDao.getConnection();
            String sql="SELECT*FROM  users WHERE userNumber =? AND password=? AND state!=0";
            ps=conn.prepareStatement(sql);
            ps.setString(1, users.getUserNumber());
            ps.setString(2, users.getPassword());
            rs=ps.executeQuery();
            if (rs.next()) {
                us=new Users();
                us.setId(rs.getInt("id"));
                us.setUserName(rs.getString("userName"));
            }

        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            closeAll(conn, ps, rs);
        }
        return us;
    }

5.调用login方法(安卓中网络链接须在线程中完成)

 public void onLoginClick(View view) {
        String phone = mInputPhone.getInputStr();
        String pwd =mInputPwd.getInputStr();
        //验证用户输入是否合法
      if (!UersUtils.valdateLogin(this,phone,pwd)){
            return;
        }else {
          //创建一个线程来连接数据库并获取数据库中对应表的数据
          new Thread(new Runnable() {
              @Override
              public void run() {
                  // 调用数据库工具类DBUtils的getInfoByName方法获取数据库表中数据
                  Users us = usersDaoImpl.login(new Users(mInputPhone.getInputStr(), mInputPwd.getInputStr()));
                  if (us != null) {
                      Looper.prepare();
                      Toast.makeText(mContext, "登录成功", Toast.LENGTH_SHORT).show();
                      Looper.loop();
                    
                  } else {
                      Looper.prepare();
                      Toast.makeText(mContext, "登录失败", Toast.LENGTH_SHORT).show();
                      Looper.loop();

                  }
              }
          }).start();
      }

    }

附加使用中遇到的问题:
1、如果mysql没有设置远程链接权限出现1130异常可以在mysql库user表中将host修改成%然后重启Mysql服务

在这里插入图片描述
2.线程中弹窗出现一下异常
在这里插入图片描述

在代码中加入
Looper.prepare();
Toast.makeText(mContext, “登录失败”, Toast.LENGTH_SHORT).show();
Looper.loop();
即可解决!

新手上场有问题请指出,谢谢!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章