Android 通过 JDBC 连接远程数据库

前言

本文简记 Windows 10 下 Android Studio 尝试使用 JDBC 连接数据库,在实际项目中不推荐使用。

权限

  • 赋予网络请求权限。

    于 AndroidManifest.xml 文件 <manifest> 内添加。

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

下载 jar 包

  • 注意:如果下错了 jar 包,一般会报错:

    get PatchStore::createDisableExceptionQarthFile method fail.
    

    如果出现了以上错误,请检查下载是否正确。

  • 访问官网:https://dev.mysql.com/downloads/connector/j/

  • 点击右边的 Looking for previous GA versions? 以访问下载包含 Windows 10 支持的 bin 的 jar 包的压缩包(发文时为 5.1.49)。

  • 点击下方两个链接的任意一个下载。

  • 这里将最新的和下载的历史的做一个对比:

    可以看到最新的 8.0.19 不包含 Windows 10 支持的 bin 的 jar 包,所以将非 bin 的 jar 包导入时, Windows 10 下会报错。

导入 jar 包

  • 将下载的历史的 5.1.49 的压缩包中的 mysql-connector-java-5.1.49-bin.jar 复制到 Android Studio 项目的 libs 文件夹下。

  • 点击 Android Studio 右上角的 Project Structure 图标,打开 Project Structure 窗口。

  • 点击 “Dependencies -> app -> + -> Jar Dependency” ,打开 Add Jar/Aar Dependency 窗口。

  • Step 1 项中,选择刚刚复制的 bin.jar 包,点击 “OK” 。

  • 回到 Project Structure 窗口,点击 “OK” 。

代码

  • 码云: LinkMariaDB.zip

  • JDBC 段:

    btn_login.setOnClickListener(new View.OnClickListener() {
    		@Override
    		public void onClick(View view) {
    			// 需在子线程中执行,否则报错
    			new Thread(new Runnable() {
    				@Override
    				public void run() {
    					try {
    						Log.d("=====================================", "Class.forName");
    						Class.forName("com.mysql.jdbc.Driver");
    						Log.d("=====================================", "java.sql.Connection");
    						
    						// 使用你的数据库服务器IP地址,替换IP字母
    						// 还要替换你的账号、密码
    						java.sql.Connection cn= DriverManager.getConnection("jdbc:mysql://IP/test","账号","密码");
    						Log.d("=====================================", "sql");
    						String sql="select username from login";
    						Statement st = cn.createStatement();
    						ResultSet rs = st.executeQuery(sql);
    						Log.d("=====================================", "while(rs.next())");
    						while(rs.next()){
    							String mybook=rs.getString("username");
    							System.out.println(mybook);
    							Log.i("Mainactivity",mybook);
    						}
    						cn.close();
    						st.close();
    						rs.close();
    						Log.d("=====================================", "连接数据库成功");
    					} catch (ClassNotFoundException e) {
    						Log.d("=====================================", "连接数据库失败");
    						e.printStackTrace();
    					} catch (SQLException e) {
    						Log.d("=====================================", "sql语句执行失败");
    						e.printStackTrace();
    					}
    				}
    			}).start();
    		}
    	});
    
  • 结果:

    2020-07-07 20:05:11.214 8203-8260/com.yogile.linkmariadb D/=====================================: Class.forName
    2020-07-07 20:05:11.239 8203-8260/com.yogile.linkmariadb D/=====================================: java.sql.Connection
    2020-07-07 20:05:11.713 8203-8260/com.yogile.linkmariadb W/System.err: Tue Jul 07 12:05:11 GMT 2020 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
    2020-07-07 20:05:11.719 8203-8260/com.yogile.linkmariadb D/NetworkSecurityConfig: No Network Security Config specified, using platform default
    2020-07-07 20:05:12.115 8203-8260/com.yogile.linkmariadb D/=====================================: sql
    2020-07-07 20:05:12.175 8203-8260/com.yogile.linkmariadb D/=====================================: while(rs.next())
    2020-07-07 20:05:12.176 8203-8260/com.yogile.linkmariadb I/System.out: yogile
    2020-07-07 20:05:12.176 8203-8260/com.yogile.linkmariadb I/Mainactivity: yogile
    2020-07-07 20:05:12.178 8203-8260/com.yogile.linkmariadb D/=====================================: 连接数据库成功
    
posted @ 2020-07-07 20:06  Yogile  阅读(1068)  评论(0编辑  收藏  举报