Androidstudio连mysql_MySQL数据库之Android Studio使用JDBC远程连接mysql的注意事项(附示例)...

本文主要向大家介绍了MySQL数据库之Android Studio使用JDBC远程连接mysql的注意事项(附示例) ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助。

JDBC为java程序访问各种类型的关系型数据库提供了统一的接口,用户不必针对不同数据库写出不同的代码,但是使用JDBC必须得下载相应的驱动,比如我这里是要连接mysql,于是就到mysql官网去下载x相应驱动 https://dev.mysql.com/downloads/connector/j/

这里我下载解压得到 mysql-connector-java-5.1.43-bin.jar

在Eclipse中新建java项目只需要Build Path --> Add External Archives把该jar包的路径添加进来就可以使用。在Android Studio中更是只需要复制粘贴到项目目录的app\libs下即可,IDE会自动加载。——看似如此。

本地Android Studio的配置

我的Android Studio版本是Community Edition2016.2.5,系统是win7 64位。在添加该jar文件后,build出错。

技术分享

按照提示,需要在项目最外层的build.gradle文件中的allprojects { ... }区域(具体见代码下的图片,之后就不附图了)内添加下列代码

tasks.withType(JavaCompile) {

sourceCompatibility = ‘1.7‘

targetCompatibility = ‘1.7‘

}

技术分享

这还没完,此时会提示Error: Unable to find a JDK,起初我怀疑jdk没添加进环境变量,但是cmd窗口测试无误,而且Android Studio新建项目也能编译运行。那么,还是jar包的问题。查了很久后找到了解决方案,看起来是java8的不兼容所致,所以需要全面改为Java7来编译

Android Studio2.1.2 Java8环境下引用Java Library编译出错

1、在所有module的build.gradle文件中的android { ... }区域中添加

compileOptions {

sourceCompatibility JavaVersion.VERSION_1_7

targetCompatibility JavaVersion.VERSION_1_7

}

就我这个新建的项目,没有添加module,所以需要修改的文件就只有app\build.gradle

2、在主module的build.gradle文件(也就是app\build.gradle)的android { defaultConfig { ... } }区域中添加

jackOptions {

enabled true

}

此时编译成功了,但是注意,这才是第一步,仅仅只是成功引用了java库。Android Studio默认是不允许访问Internet的。

因此需要在app/src/main/AndroidManifest.xml中的...区域内添加一行

远程mysql的配置

然后我的mysql是安装在Linux虚拟机(Ubuntu 16.04)上的,默认mysql是禁止远程连接的,所以在Linux上也要进行配置

首先是要让mysql支持中文字符,登陆mysql用户后,输入命令STATUS;可以看到几个字符集是这样的

Server characterset: latin1

Db     characterset: latin1

Client characterset: utf8

Conn.  characterset: utf8

因此需要用超级用户权限修改/etc/mysql/my.cnf,添加下列代码(这里顺便绑定了端口为3306,虽然一般默认端口也是3306)

[client]

default-character-set=utf8

[mysqld]

default-storage-engine=INNODB

character-set-server=utf8

collation-server=utf8_general_ci

port=3306

然后重启mysql,命令如下

$ /etc/init.d/mysql stop

$ /etc/init.d/mysql start

之后再登陆mysql后使用STATUS命令就可以看到字符集全部变成了utf8。

然后mysql默认绑定的IP是127.0.0.1,端口3306,在shell下可以通过shell命令netstat -apn | grep 3306查看端口占用情况,若端口3306对应的第三项(Local Address)是127.0.0.1:3306,那么mysql绑定的就是本地地址,不能远程连接。

还是用超级用户权限修改/etc/mysql/my.cnf,添加下列代码并重启mysql

bind-address=0.0.0.0

重启后再用netstat -apn | grep 3306查看第三项就会变成0.0.0.0:3306,那么mysql就支持了远程连接。

还没完,虽然mysql赋予了远程连接的权限,但是mysql用户并没有。我这里的mysql用户名是team,密码是java123,用root登陆mysql后输入下列命令

mysql> grant all on *.* to team@‘%‘ identified by ‘java123‘ with grant option;

mysql> flush privileges;

team@‘%‘代表用户team支持远程连接,team@‘localhost‘则代表用户team支持本地连接

代码实现

好了,终于可以写代码了,于是迫不可待地在MainAcitivity.java的onCreate()方法内部添加下列代码(先尝试连接)

// 1.加载JDBC驱动

try {

Class.forName("com.mysql.jdbc.Driver");

Log.v(TAG, "加载JDBC驱动成功");

} catch (ClassNotFoundException e) {

Log.e(TAG, "加载JDBC驱动失败");

return;

}

// 2.设置好IP/端口/数据库名/用户名/密码等必要的连接信息

String ip = "192.168.183.134";

int port = 3306;

String dbName = "XYZ";

String url = "jdbc:mysql://" + ip + ":" + port

+ "/" + dbName; // 构建连接mysql的字符串

String user = "team";

String password = "java123";

// 3.连接JDBC

try {

Connection conn = DriverManager.getConnection(url, user, password);

conn.close();

} catch (SQLException e) {

Log.e(TAG, "远程连接失败!");

return;

}

这里使用了andorid.util.Log而不是System.out.println来打印消息,因为可以设置过滤符,通过TAG、日志级别等信息来筛选出特定的日志

技术分享

技术分享

这里我就是通过TAG来筛选,也可以通过Message和Package来筛选,并且支持正则表达式,程序运行时会有大量日志混杂在一起,所以使用Log而不是System.out来打印消息更好。

于是,通过日志过滤符筛选,可以发现连接失败了。

技术分享

这个问题折磨了我一天多,参考了很多网上的代码,和我的基本无异,而且也copy过来测试过都不行,最后在stackoverflow上找到了解答

https://stackoverflow.com/questions/12233145/connecting-to-mysql-from-android-with-jdbchttps://stackoverflow.com/questions/12233145/connecting-to-mysql-from-android-with-jdbc

mysql的连接必须在异步任务类中,也就是说必须新建线程来连接mysql,而不能在主线程中执行代码。

final Thread thread = new Thread(new Runnable() {

@Override

public void run() {

// 反复尝试连接,直到连接成功后退出循环

while (!Thread.interrupted()) {

try {

Thread.sleep(100);  // 每隔0.1秒尝试连接

} catch (InterruptedException e) {

Log.e(TAG, e.toString());

}

// 2.设置好IP/端口/数据库名/用户名/密码等必要的连接信息

String ip = "192.168.183.134";

int port = 3306;

String dbName = "XYZ";

String url = "jdbc:mysql://" + ip + ":" + port

+ "/" + dbName; // 构建连接mysql的字符串

String user = "team";

String password = "java123";

// 3.连接JDBC

try {

Connection conn = DriverManager.getConnection(url, user, password);

Log.i(TAG, "远程连接成功!");

conn.close();

return;

} catch (SQLException e) {

Log.e(TAG, "远程连接失败!");

}

}

}

});

thread.start();

技术分享

成功了,总算可以继续下一步,向远程连接的mysql发送命令了,将上述代码稍作修改

// 3.连接JDBC

Connection conn = null;

try {

conn = DriverManager.getConnection(url, user, password);

Log.i(TAG, "远程连接成功!");

} catch (SQLException e) {

Log.e(TAG, "远程连接失败!");

}

if (conn != null) {

String sql = "SELECT * FROM pokemon";

try {

// 创建用来执行sql语句的对象

java.sql.Statement statement = conn.createStatement();

// 执行sql查询语句并获取查询信息

ResultSet rSet = statement.executeQuery(sql);

// 迭代打印出查询信息

Log.i(TAG, "宝可梦列表");

Log.i(TAG, "ID\tName\tAttr1\tAttr2");

while (rSet.next()) {

Log.i(TAG, rSet.getString("id") + "\t" + rSet.getString("name")

+ "\t" + rSet.getString("attr1") + "\t" + rSet.getString("attr2"));

}

} catch (SQLException e) {

Log.e(TAG, "createStatement error");

}

try {

conn.close();

} catch (SQLException e) {

Log.e(TAG, "关闭连接失败");

}

技术分享

懒得仔细研究java格式化字符串,直接把结果打印出来了,这里只用到了执行查询语句的executeQuery,返回结果到一组迭代对象。

本文由职坐标整理并发布,希望对同学们学习MySQL有所帮助,更多内容请关注职坐标数据库MySQL数据库频道!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/573107.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

纪中2016.10.6比赛不明总结

100<分数<310 ———————————————————————————————————— 期望值&#xff1a; |T1&#xff1a;100/T2&#xff1a;10/T3&#xff1a;100/T4&#xff1a;100 ————————————————————————————————————…

zendstudio快捷键收录

360截屏快捷键&#xff1a;ctrlshiftxzendstudio:注释代码&#xff1a;ctrlshift/删除光标所在行&#xff1a;ctrlD复制当前行&#xff1a;ctrlalt↓上下行互换:alt↑/↓代码格式化&#xff1a;CtrlshiftF&#xff0c;缩进&#xff1a;tab代码折叠快捷键&#xff1a;Ctrl/(小键…

centos8.2安装mysql_centos8安装mysql

通过以root用户或者具有sudo特权的用户身份使用CentOS软件包管理器(dnf)来安装MySQL 8.0# dnf install mysql安装好后&#xff0c;这里注意需要修改两个文件的权限&#xff0c;否则启动失败。# chown -R mysql:mysql /var/run/mysqld# chmod -R 777 /var/lib/mysql设置为开机自…

dedecms代码研究三

上次&#xff0c;我们从dedecms的index.PHP文件中了解到了很多信息&#xff0c;也提出了一些问题&#xff1a; 1&#xff09;加载了/include/common.inc.php&#xff0c;里面做了哪些工作&#xff1f;2&#xff09;/include/arc.partview.class.php到底是干什么的&#xff0c;/…

idea快捷操作_IDEA插件系列 快捷键神器!Key Promoter X

今天起&#xff0c;会陆续给大家介绍一些IDEA的插件。正所谓工欲善其事必先利其器&#xff0c;一款好的插件可以帮我们提升开发效率&#xff0c;或者提升使用IDEA的幸福感&#xff01;今天要推荐的第一款插件 Key Promoter X 。相信很多新手甚至老手&#xff0c;对IDEA中的快捷…

《开讲啦》 20160910 颜宁:女科学家去哪儿了?

视频地址&#xff1a; 《开讲啦》 20160910 颜宁&#xff1a;女科学家去哪儿了&#xff1f; 果然是女神科学家&#xff0c;讲了一些我很感兴趣的东西&#xff0c;让我也体会到了女神的气质&#xff0c;有点感触&#xff0c;这个节目不错&#xff0c;可以追。 颜宁教授于2016年5…

if __name__ == __main__:什么意思_秒懂Python编程中的if __name__ == 'main' 的作用和原理...

来源&#xff1a;菜鸟分析 链接&#xff1a;https://zhuanlan.zhihu.com/p/34112508一天偶然发现知乎上有篇关于对python编程中的if __name__ main的理解陈述&#xff0c;看完之后&#xff0c;自己觉得不够简单明了&#xff0c;于是在其文章底部写了一句话&#xff0c;突然收获…

4.openstack之mitaka搭建glance镜像服务

部署镜像服务 一&#xff1a;安装和配置服务 1.建库建用户 mysql -u root -p CREATE DATABASE glance; GRANT ALL PRIVILEGES ON glance.* TO glancelocalhost IDENTIFIED BY 密码; GRANT ALL PRIVILEGES ON glance.* TO glance% IDENTIFIED BY 密码; flush privileges; 2.keys…

mysql php 变量赋值,在MySQL UPDATE(PHP / MySQL)中使用变量

I am using this code so I can update a record in database:$query mysql_query("UPDATE articleSET com_count ". $comments_countWHERE article_id .$art_id ");My question is: How can I use variables in a MySQL UPDATE statement.解决方案$query m…

mongodb 教程一

mongodb是nosql&#xff08;not only sql&#xff09;的一种方式 。是对不同于传统的关系型数据库的数据库管理系统的统称。 NoSQL - 代表着不仅仅是SQL- 没有声明性查询语言- 没有预定义的模式-键 - 值对存储&#xff0c;列存储&#xff0c;文档存储&#xff0c;图形数据库- 最…

java mysql 回滚_Java 中对数据库操作时的 回滚

Connection connnull;conn.rollback()就可以回滚//用jdbc连接数据库//举例子&#xff0c;比如你在写一个级联删除的方法的时候&#xff0c;为了保证数据完整性&#xff0c;删除的时候一定要确定该删的都删了才行&#xff0c;否则就要回滚&#xff0c;下面是删除方法的例子&…

向文件中追加内容

#echo abcbedf>>a.txt 将abcdef追加到a.txt文件末尾 往文件中写入内容&#xff0c;比如原来的a.txt文件内容是aaaaa&#xff0c; #echo bbbbb>a.txt&#xff0c;这个是bbbbb把a.txt原来的内容替换 这里注意 >是覆盖&#xff0c;>>是追加。 如果为多行输入,需…

kali linux改中文_【亲测实验】kali linux 2020 设置为中文方法

kali 2020.1可用进入我们的正题&#xff0c;修改为中文的步骤1.更换更新源打开终端&#xff0c;输入下边命令打开更新源的文件vim /etc/apt/sources.list在文件结尾加入下边更新源#中科大deb http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contribdeb-src http:…

php取整函数ceil,floor,round,intval函数的区别

1、ceil — 进一法取整说明float ceil ( float $value )返回不小于 value 的下一个整数&#xff0c;value 如果有小数部分则进一位。ceil() 返回的类型仍然是 float&#xff0c;因为 float 值的范围通常比 integer 要大。ceil() 例子 <?php echo ceil(4.3); // 5 echo ceil…

mysql的源码目录_Mysql DBA系统学习(2)了解mysql的源码目录及源文件

了解mysql的源码目录包括客户端代码&#xff0c;服务端代码&#xff0c;测试工具和其他库文件Bdb 伯克利DB表引擎BUILD 构建工程的脚本Client 客户端Cmd-line-utils 命令行工具Config 构建工程所需的一些文件Dbug Fred Fish的调试库Docs 文档文件夹Extra 一些相对独立的次要的工…

开始我的blog之旅

这是我第一次开始写blog的时刻&#xff0c;我也想好了怎么开始&#xff0c;鉴于我喜欢刨根问底的原则&#xff0c;我决定要翻开C语言&#xff0c;重新复习。同时以写blog的形式来印证。 写作路线嘛&#xff0c;就按照《C Primer Plus》第五版的章节套路来&#xff0c;中间在参杂…

ubuntu 破解mysql密码_Ubuntu下忘记MySQL root密码解决方法

Linux下忘记MySQL root密码解决方法忘了mysql密码&#xff0c;从网上找到的解决方案记录在这里。编辑mysql的配置文件/etc/mysql/my.cnf&#xff0c;在[mysqld]段下加入一行“skip-grant-tables”121201191255521.png重启mysql服务ubuntu:~$ sudo service mysql restartmysql s…

面向对象编程其实很简单——Python 面向对象(初级篇)

在Python教学中发现&#xff0c;很多同学在走到面向对象编程这块就开始蒙圈了&#xff0c;为了帮助大家更好的理解面向对象编程并其能将其用到自己的开发过程中&#xff0c;特写此文。 概述 面向过程&#xff1a;根据业务逻辑从上到下写垒代码 函数式&#xff1a;将某功能代码…

nginx mysql双机热备_MYSQL双机热备

mysql从3.23.15版本以后提供数据库复制功能。利用该功能可以实现两个数据库同步&#xff0c;主从模式&#xff0c;互相备份模式的功能&#xff0c;该功能可将一个数据库的工作量分摊于多个Mysql服务器之上&#xff0c;但考虑到种种因素&#xff0c;不要使用过多的同步服务器。最…

Code 0001: Wait rx completed

注意&#xff1a;以下Demo适用于不带DMA功能的串口。 Demo0001 /* 方法&#xff1a; wait_rx函数每1ms扫描串口是否有接受数据&#xff0c;如果长时间没有收到数据&#xff0c;则接受完成。 * 分析&#xff1a; 该方法存在的问题是扫描时间需要配合串口波特率进行设置&#xff…