前言:在迩来学习安卓开发的过程中,需要毗连MySQL数据库,这内里遇到了许多题目,也翻阅了网上大量资料,都条理不齐,有的还存在题目,于是我这里完整的记录一下我是怎样精确毗连MySQL数据库并记录一下自己踩过的坑,真的耗费了我许多时间,盼望对大家有资助。
目次
一、精确毗连MySQL数据库
1.1、JDBC工具类
1.2、UserDao层
1.3、自界说事件
1.4、项目结构
1.5、开启外网访问权限
二、踩坑记录
2.1、报错一
2.2、报错二
2.3、报错三
2.4、报错四
三、总结
一、精确毗连MySQL数据库
代码都是博主亲自测试无误后写的,内里的坑我都替大家踩完了,大家可以放心参考。
1.1、JDBC工具类
jar包驱动版本如图所示:
亲测可用,这个版本很好用,我的本地数据库是8.0的版本,也是可以正常毗连的。
这里采用的是单例模式,全程只会获取一次毗连,避免不必要的开销,
工具类完整代码:
- package com.example.studentsystem.utils;
- import java.sql.Connection;
- import java.sql.DriverManager;
- public class JDBCUtil {
- private static JDBCUtil jdbcUtil;
- private Connection connection;
- private JDBCUtil() {
- }
- public static JDBCUtil getInstance() {
- if(jdbcUtil == null) {
- jdbcUtil = new JDBCUtil();
- }
- return jdbcUtil;
- }
- public Connection getConnection() throws Exception {
- if(connection == null) {
- //1、装载驱动
- Class.forName("com.mysql.jdbc.Driver");
- //2.定义连接url
- String url="jdbc:mysql://ip地址:3306/数据库名称?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=UTF-8&useSSL=false";
- //3.定义账号和密码
- String username="账号";
- String password="密码";
- //4.获得连接对象
- connection = DriverManager.getConnection(url, username, password);
- }
- return connection;
- }
- }
复制代码 注:这里的ip地址需要自己打开cmd窗口,使用ipconfig下令获取本机的IPV4地址,不能用localhost!!!
1.2、UserDao层
这里简单的展示一下我是怎样毗连数据库举行查询操纵的。
完整代码:
- package com.example.studentsystem.dao;
- import android.util.Log;
- import com.example.studentsystem.utils.JDBCUtil;
- import java.sql.Connection;
- import java.sql.PreparedStatement;
- import java.sql.ResultSet;
- public class UserDao {
- public void test(){
- try {
- Connection connection = JDBCUtil.getInstance().getConnection();
- String sql = "select * from sys_user";
- PreparedStatement preparedStatement = connection.prepareStatement(sql);
- ResultSet resultSet = preparedStatement.executeQuery();
- while (resultSet.next()) {
- int userId = resultSet.getInt("user_id");
- String usr = resultSet.getString("username");
- String pwd = resultSet.getString("password");
- String role = resultSet.getString("role");
- // 处理每一行数据,您可以根据需求进行相应的操作
- System.out.println("user: " + userId);
- System.out.println("username: " + usr);
- System.out.println("password: " + pwd);
- System.out.println("role: " + role);
- }
- resultSet.close();
- preparedStatement.close();
- } catch (Exception e) {
- System.out.println(e);
- Log.e("jdbc",e.getMessage());
- }
- }
- }
复制代码 1.3、自界说事件
这里需要自己自界说一个点击事件举行测试,由于数据库毗连需要耗费肯定时间,所以需要肯定要放在线程当中去处理,否则会报错。
完整代码:
- package com.example.studentsystem;
- import androidx.appcompat.app.AppCompatActivity;
- import android.os.Bundle;
- import android.view.View;
- import com.example.studentsystem.dao.UserDao;
- public class MainActivity extends AppCompatActivity {
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- }
-
-
- public void login(View view){
- new Thread(){
- @Override
- public void run() {
- UserDao userDao = new UserDao();
- userDao.test();
- }
- }.start();
- }
- }
复制代码 1.4、项目结构
我是这样建包的,大家可以参考一下,activity_main.xml主页面加了个按钮,去触发login这个方法的,这里就不贴出来了。
1.5、开启外网访问权限
找到AndroidManifest.xml文件,添加如下两行代码。
- <uses-permission android:name="android.permission.INTERNET" />
- <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
复制代码
到这里就可以了。
二、踩坑记录
这里我给大家整理了几种常见的报错,以及我的办理方案,仅供参考。
2.1、报错一
题目详情:
Could not create connection to database server
如图所示:
办理办法:
第一种情况:是由于的ip地址写的是localhost了,应该是本机的IPV4地址。
第二种情况:是你的jar包驱动和MySQL版本不匹配,这里我推荐的稳定版本是:5.1.49的驱动jar包,既可以毗连MySQL8.0也可以毗连MySQL5.0版本的。
第三种情况:你的有关数据库的毗连操纵必须在线程当中实现。
这三个题目自己一个个排查过去,大部分都是以上三种缘故原由。
2.2、报错二
题目详情:
Access denied for user 'root'@'HTT' (using password: YES)
办理办法:
账号暗码检查过了都是对的,就是毗连不上,后来才发现是由于没有开启远程访问的权限,如图所示:
依次输入如下三行下令:
- update user set host = '%' where user = 'root';
复制代码 执行完以后,就毗连上了。
2.3、报错三
题目详情:
E/AndroidRuntime: FATAL EXCEPTION: Thread-2
Process: com.example.studentsystem, PID: 10636
java.lang.NoClassDefFoundError: Failed resolution of: Ljava/sql/SQLType;
at com.mysql.cj.jdbc.ConnectionImpl.getMetaData(ConnectionImpl.java:1170)
at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:447)
at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:246)
at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:197)
at java.sql.DriverManager.getConnection(DriverManager.java:580)
at java.sql.DriverManager.getConnection(DriverManager.java:218)
at com.example.studentsystem.utils.JDBCUtil.getConnection(JDBCUtil.java:33)
at com.example.studentsystem.dao.UserDao.test(UserDao.java:15)
at com.example.studentsystem.MainActivity$1.run(MainActivity.java:25)
Caused by: java.lang.ClassNotFoundException: Didn't find class "java.sql.SQLType" on path: DexPathList[[dex file "/data/data/com.example.studentsystem/code_cache/.overlay/base.apk/classes4.dex", zip file "/data/app/~~43pk1avwKCpcsqDTUZz4XA==/com.example.studentsystem-57z9E8XIRruRPRJVm4fHhg==/base.apk"],nativeLibraryDirectories=[/data/app/~~43pk1avwKCpcsqDTUZz4XA==/com.example.studentsystem-57z9E8XIRruRPRJVm4fHhg==/lib/x86_64, /system/lib64, /system_ext/lib64]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:259)
at java.lang.ClassLoader.loadClass(ClassLoader.java:637)
at java.lang.ClassLoader.loadClass(ClassLoader.java:573)
at com.mysql.cj.jdbc.ConnectionImpl.getMetaData(ConnectionImpl.java:1170)
at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:447)
at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:246)
at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:197)
at java.sql.DriverManager.getConnection(DriverManager.java:580)
at java.sql.DriverManager.getConnection(DriverManager.java:218)
at com.example.studentsystem.utils.JDBCUtil.getConnection(JDBCUtil.java:33)
at com.example.studentsystem.dao.UserDao.test(UserDao.java:15)
at com.example.studentsystem.MainActivity$1.run(MainActivity.java:25)
办理办法:
还是由于jar包驱动的题目,我这里用了8.0版本的驱动jar包,报的这个错误,后来换了5.1.49的驱动jar包就好了。
2.4、报错四
题目详情:
Public Key Retrieval is not allowed
办理办法:
在 JDBC 毗连串中加入 allowPublicKeyRetrieval=true 参数。
三、总结
以上就是关于我怎样毗连MySQL数据的完整分享,盼望对大家有资助,如果写的有题目或者有遗漏的欢迎在评论区补充。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |