赞
踩
用Android studio连接Navicat Premium 16管理的mysql,我安装的是mysql5.7.19版本,用的包是mysql-connector-java-5.1.49-bin.jar。
在开始连接前请务必确保MySQL版本不是8.0及以上的版本!!否则会一直报错无法创建连接。
jar包也尽量选择低一些的版本,高版本我没试过,据说新版不太稳定不支持也会报错。
一,mysql下载地址:https://downloads.mysql.com/archives/community
二,Navicat Premium 16安装地址:https://www.downkuai.com/soft/161548.html
三,mysql-connector-java-5.1.49-bin.jar下载地址:https://downloads.mysql.com/archives/c-j/
打开项目,导入jar包,将下载的jar包放入项目/app/libs内,右键,点击Add As Library。
配置环境,在AndroidManifest.xml中加入以下代码来获取网络访问权限。
<uses-permission android:name="android.permission.INTERNET" />
d: //进入D盘
cd D:\mysql\mysql-5.7.19-winx64\bin //进入mysql在的文件夹
mysql -u RCQ -p //登录账号 RCQ要替换为自己的用户名
123456 //输入自己的密码
GRANT ALL PRIVILEGES ON *.* TO 'bya'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
显示ok则表示添加成功
package com.example.androidpractice.Utils; import android.util.Log; import java.sql.Connection; import java.sql.DriverManager; /** * function: 数据库工具类,连接数据库用 */ public class JDBCUtils { private static final String TAG = "mysql-party-JDBCUtils"; private static String driver = "com.mysql.jdbc.Driver";// MySql驱动 private static String dbName = "demo";// 数据库名称 private static String user = "bya";// 用户名 private static String password = "123456";// 密码 public static Connection getConn(){ Connection connection = null; try{ Class.forName(driver);// 动态加载类 String ip = "10.73.146.38";// 写成本机地址,不能写成localhost, // 尝试建立到给定数据库URL的连接 connection = DriverManager.getConnection("jdbc:mysql://" + ip + ":3306/" + dbName, user, password); Log.d("ning","数据库连接成功!"); }catch (Exception e){ e.printStackTrace(); Log.d("ning","数据库连接失败!"); } return connection; } }
UserDao.java类:
package com.example.androidpractice.dao; import android.util.Log; import com.example.androidpractice.Utils.JDBCUtils; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; /** * author: 白易安 * date: 2023.08.05 * **/ public class UserDao { //根据传入的账号查询数据库对应的密码,再与传入的密码进行对比 public boolean loginup(String account, String password) { Connection connection = null; PreparedStatement pstmt = null; ResultSet rs = null; try { // 获取数据库连接 connection = JDBCUtils.getConn(); Log.d("ning","账号:" + account); // 查询表中的密码 String sql = "SELECT password FROM user WHERE account = ?"; pstmt = connection.prepareStatement(sql); pstmt.setString(1, account); rs = pstmt.executeQuery(); if (rs.next()) { // 比较查出的密码和传入的密码是否相同 String dbPassword = rs.getString("password"); Log.d("ning","密码:" + dbPassword); return dbPassword.equals(password); } else { return false; // 没有找到对应的账号,返回false表示登录失败 } } catch (SQLException e) { e.printStackTrace(); // 打印异常信息 return false; // 发生异常,返回false表示登录失败 } finally { // 关闭资源 try { connection.close(); } catch (SQLException e) { throw new RuntimeException(e); } } } //插入数据 public void insert(String account, String password, String name) { Connection connection = null; PreparedStatement pstmt = null; try { // 获取数据库连接 connection = JDBCUtils.getConn(); // 构造SQL语句 String sql = "INSERT INTO user (account, password, name) VALUES (?, ?, ?)"; pstmt = connection.prepareStatement(sql); pstmt.setString(1, account); pstmt.setString(2, password); pstmt.setString(3, name); // 执行SQL语句 pstmt.executeUpdate(); Log.d("ning","插入数据成功!"); } catch (SQLException e) { e.printStackTrace(); // 打印异常信息 Log.d("ning","插入数据失败!"); } finally { // 关闭资源 try { connection.close(); } catch (SQLException e) { throw new RuntimeException(e); } } } }
MainActivity.java:
package com.example.androidpractice; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.os.StrictMode; import android.util.Log; import com.example.androidpractice.dao.UserDao; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); String account="17374517111"; String password="111111"; String account1="17374517444"; String password1="111111444"; String name="d"; UserDao dao=new UserDao(); boolean up=false; if (android.os.Build.VERSION.SDK_INT > 9) { StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); StrictMode.setThreadPolicy(policy); up=dao.loginup(account,password); dao.insert(account1,password1,name); } if (up==true){ Log.d("ning","登录成功"); }else { Log.d("ning","登录失败"); } } }
if (android.os.Build.VERSION.SDK_INT > 9) {
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
}
这段代码是在Android应用中使用的,用于在Android 10(API级别29)及更高版本上启用StrictMode。StrictMode是一个用于检测应用程序中可能的内存泄漏、死锁等问题的工具。
代码解析:
1,首先检查当前设备的Android版本是否大于9(即API级别29),因为从Android 10开始,StrictMode才默认启用。
2,如果设备版本大于9,则创建一个StrictMode.ThreadPolicy对象,允许所有线程执行。
3,最后,使用setThreadPolicy方法将创建的策略设置为当前线程的策略。
因为才学Android没多久,看的课程Android studio只有连接自带的sqlite没有通过网络访问mysql数据库这部分,所以自己搜索着解决了一下,最后那个解决报错的方法肯定不适用于很多情况,还需要在找一些其他方法,我问了AI说可以使用AsyncTask或者Thread来解决,但是还没有试。
继续学习,加油!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。