安卓通过JDBC进行数据库操作

安卓通过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) {
                }
        }
    }
}

 

 

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值