安卓通过JDBC进行数据库操作
来源:互联网 发布:华星创业网络报销网址 编辑:程序博客网 时间:2024/06/05 08:06
安卓通过JDBC进行数据库操作
最近我们有需求,需要在安卓移动端去直接操作远端数据库。对于数据库,了解不是很多。这两天研究了下,把整个流程大概记录一下。以备下次再用。
(我用的开发设备是Mac。)
mysql安装
1、安装Mysql数据库
这个区官网安装就好了。
参看文档:http://www.jianshu.com/p/a8e4068a7a8a
下载的话去mysql官网下载对应的dmg包就好了。
需要注意的是:
一定要保存好之前的初始密码,不然就有点麻烦了。我因为没有保存,直接将mysql删除之后重新安装的,
删除是通过命令行,将mysql对应的文件和包删除就好了:
sudo rm /usr/local/mysql
sudo rm -rf /usr/local/mysql*
sudo rm -rf /Library/StartupItems/MySQLCOM
sudo rm -rf /Library/PreferencePanes/MySQL*
rm -rf ~/Library/PreferencePanes/MySQL*
sudo rm -rf /Library/Receipts/mysql*
sudo rm -rf /Library/Receipts/MySQL*
一条一跳执行。
2、配置环境变量
在terminal中输入
vim ~/.bash_profile
添加环境变量:
mac上应该都是这个地址。原版复制过去就好了。
3、测试mysql是否安装完毕
这里我们最初始的mysql给我的账号名是root,密码是原始它给你的那一串。
这里我们基本上就成功安装了mysql了。
4、修改mysql数据库的密码
mysql>SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpass');
修改方法很多,我用的是这种。
Mysql可视化工具
上面我们安装的是mysql数据库。他的操作都要通过命令行去完成有点麻烦,所以,我们需要有一个可视化的工具。经过调研,我最后用的是
据说是免费里面最好用的。
参考使用教程:https://segmentfault.com/a/1190000006255923
利用它我们就可以可视化地建立一个数据库和对应的表了
登录
这里
host使我们数据库的ip地址;
username是我们mysql里面的账号
password是对应的密码
database可以等不填,等进去之后再建立
port:端口号用默认的就好了。
建立数据库和表:
这里我建立了我的数据库Test1和我的表GoodsInfo
到此为止,我们数据库端的准备工作基本上就完成了,该是主角安卓端登场了。
安卓的数据库访问:
参考:http://blog.csdn.net/yuanzeyao/article/details/38777557
强调:移动端做的是数据展示和交互,如果没有特殊的需求,请不要在移动端和远端数据库直连。(这个谷歌文档里有提醒的,奈何我接到了这样神奇的需求)。
注意:请用真机测试!模拟器访问的话我一直连接不上数据库!换了真机就好了。所以我觉得模拟器有坑啊。
引入jdbc的库:
我们要引入的库的名字是:mysql-connector-java。
之前看了很多引入的文档,都说去引入jar包,然后我去下了jar包,报错需要在java7之下执行。
然后我添加了这个:
但是好像并没有什么用~
之后又找了几篇文档,发现有marven库:
compile 'mysql:mysql-connector-java:5.1.18'
引入之后万事大吉。
设置网络访问权限
添加许可协议:
不加有什么后果呢:
1、可能会报连接不上服务器。(我是因为报这个错,才发现要添加这段的)
2、在查询的时候可能拿不到结果数据
代码部分:
1、连接服务器和数据库:
2、查询数据库
这个就没什么好说的了。
到这里整个过程就ok了。
遇到问题解决流程:
1、查看mysql是否正却安装
2、mysql的用户名和密码是否能登陆得上
3、在sequel pro上建立数据库之后查询下mysql是否有对应数据库
4、用户查询
先切换到mysql的库,然后查询用户。%表示可以访问所有地址,和所有表的权限。Hhh是我后面自己加的用户,具体方法google。
整体代码:
public class MainActivity extends AppCompatActivity { String UserName = "hhh";//用户名 String Password = "137006";//密码 Connection con = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView viewById1 = (TextView) findViewById(R.id.tv_btn1); TextView viewById2 = (TextView) findViewById(R.id.tv_btn2); StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); StrictMode.setThreadPolicy(policy); viewById1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { new Thread(new Runnable() { @Override public void run() { try { // 加载驱动程序 Class.forName("com.mysql.jdbc.Driver");// con = DriverManager.getConnection("jdbc:mysql://localhost:3306/Test1", UserName, Password); con = DriverManager.getConnection("jdbc:mysql://192.168.1.97:3306/Test1?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&failOverReadOnly=false", UserName, Password); } catch (ClassNotFoundException e) { System.out.println("加载驱动程序出错"); } catch (SQLException sql) { System.out.println("SQLException: " + sql.getMessage()); System.out.println("SQLState: " + sql.getSQLState()); System.out.println("Erro: " + sql.getErrorCode()); System.out.println("StackTrace: " + sql.getStackTrace()); System.out.println(sql.getMessage()); } catch (Exception e) { System.out.println(e.getMessage()); } } }).start(); } }); viewById2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (con != null) { try { testConnection(con); } catch (SQLException e) { e.printStackTrace(); } } } }); } public void testConnection(Connection con) throws java.sql.SQLException { try { String sql = "SELECT * FROM GoodsInfo";//查询表名为“table_test”的所有内容 Statement stmt = con.createStatement();//创建Statement ResultSet rs = stmt.executeQuery(sql);//ResultSet类似Cursor while (rs.next()) {//<code>ResultSet</code>最初指向第一行 System.out.println(rs.getString("amount"));//输出第n行,列名为“test_id”的值 System.out.println(rs.getString("spec")); } rs.close(); stmt.close(); } catch (SQLException e) { System.out.println(e.getMessage().toString()); } finally { if (con != null) try { con.close(); } catch (SQLException e) { } } }}
- 安卓通过JDBC进行数据库操作
- 通过JDBC进行数据库基本操作
- Java通过JDBC 进行MySQL数据库操作
- java通过jdbc连接sqlite数据库进行CRUD操作
- 安卓:ContentProvider之服务端提供接口,客户端通过接口对数据库中的数据进行操作
- 通过JDBC操作ORACLE数据库
- java通过jdbc操作数据库
- 通过jdbc对数据库操作
- 数据库基础入门(三)——通过JDBC对数据库进行增删改查操作
- 数据库基础入门(三)——通过JDBC对数据库进行增删改查操作
- 使用系统API对安卓数据库进行操作
- 通过JDBC操作ORACLE数据库实例详解
- MySQL数据库通过JDBC操作,简单查询
- 通过JDBC操作数据库的标准示例
- Java中通过JDBC操作MySQL数据库
- 通过JDBC完成对数据库的操作
- java通过JDBC操作mysql数据库
- Java中通过JDBC操作MySQL数据库
- openresty安装(MAC)
- 实现WebRTC的几个想法
- 一个人的旅行
- Longest Palindromic Substring
- HTML与xml的区别
- 安卓通过JDBC进行数据库操作
- kotlin Fragment 跳转到Activity
- 引用数据类型比较 实现comparator接口
- 实例4-1 是否同一棵二叉搜索树
- int a[] = {12,13,12,13,19,18,15,12,15,16,17},要求对数组a进行排序,要求时间复杂度为O(N)
- POJ 2503 Babelfish 字典树经典题 三种方法 (map,排序+二分,字典树)
- Windows操作系统下QT应用程序打包和发布。
- shu418丢史蒂芬妮 博弈n/p图
- WebRTC基本概念