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();
即可解決!

新手上場有問題請指出,謝謝!

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