为了账号安全,请及时绑定邮箱和手机立即绑定

Android下使用JDBC连接Mysql实现创建账号

标签:
MySQL Android

毕设选到了一个Android应用的选题,自学了一个多月开始动手,大概就是一个家政app,要能发布需求等等。

既然有这方面的需求,就肯定需要实现数据同步,网上教学视频里一般都是教的SQLite,那玩意是本地数据库,跟需求有差别,所以我就去查了下,发现可以使用java中的JDBC(JavaDataBaseConnection)直连数据库对数据进行操作。

因本人初入门,技术有限。有错误或遗漏请指出!!!


创建账号实际上就是往数据库中用户表插入一条数据,让我们先看一下用户表是怎样的:


至于怎么搞一台服务器就是你自己的问题了,当然如果是拿来练手的话用虚拟机就可以了。

我这台是vultr的vps,买来搭了个ss,结果项目刚好要一个服务器弄mysql就拿来用的。

我vultr的邀请链接:https://www.vultr.com/?ref=7360147

还有在Linux里开放3306端口啊,装mysql啊,创一个远程访问用户这种我就不在这篇文章中提及了,网上很多教程

好了废话不多说,进入代码部分吧!

以下为注册界面示意图:


可以看到一共只有三个EditText,实际上只输入了账号和密码,数据表中的什么touxiang这种都是用硬解码插入。

以下代码就是主要代码:


package com.example.enz.Housekeeping;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.os.Looper;import android.support.annotation.Nullable;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.Toast;import java.sql.Connection;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;/** * Created by Administrator on 2018/3/26. */public class Register extends Activity {    private Button bt;    private EditText Etext1,Etext2,Etext3;    private String bt_username,bt_password,bt_password2;    @Override    protected void onCreate(@Nullable Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.register);        bt = (Button) findViewById(R.id.register_bt);        Etext1= (EditText) findViewById(R.id.register_username);        Etext2= (EditText) findViewById(R.id.register_passwd);        Etext3= (EditText) findViewById(R.id.register_passwd2);        /*            监听 注册 按钮点击事件         */        bt.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                /*                    获取EditText中用户输入的信息                 */                bt_username=Etext1.getText().toString().trim();                bt_password=Etext2.getText().toString().trim();                bt_password2=Etext3.getText().toString().trim();                /*                    做简单的过滤判断                 */                if (bt_username.equals("")){
                    Toast.makeText(Register.this, "用户名不能为空!", Toast.LENGTH_SHORT).show();                }                else if (bt_password.equals("")){
                    Toast.makeText(Register.this, "密码不能为空!", Toast.LENGTH_SHORT).show();                }                else if (!bt_password.equals(bt_password2)){
                    Toast.makeText(Register.this, "两次输入的密码不一致!", Toast.LENGTH_SHORT).show();                }                else {                    /*                        加载loading动画                     */                    final LoadingDialog loadingDialog = new LoadingDialog(Register.this);                    loadingDialog.setMessage("正在注册...").show();                    new Thread()
                    {                        public void run() {
                            Connection conn = null;                            Statement stmt = null;                            ResultSet rs = null;                            try {                                //使子进程可以显示toast                                Looper.prepare();                                //调用JDBC类的静态方法连接Mysql                                conn = JDBC.JDBC_connection();                                //操纵数据库                                   stmt = conn.createStatement();                                String sql_select = "select * from UserTable where username='"+bt_username+"'";                                rs = stmt.executeQuery(sql_select);                                if(rs.next()){                                    //rs不为null时---代表查询出来有数据                                    Toast.makeText(Register.this, "用户已存在!", Toast.LENGTH_SHORT).show();                                    //关闭loading动画                                    loadingDialog.dismiss();                                }                                else {
                                    String sql = "INSERT INTO UserTable VALUES ('"+bt_username+"','"+bt_password+"','testtouxiang',123456,'testaddress')";                                    stmt.executeUpdate(sql);                                    Toast.makeText(Register.this, "新建用户成功!", Toast.LENGTH_SHORT).show();                                    /*                                        跳转至Login                                     */                                    Intent intent = new Intent(Register.this,Login.class);                                    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);                                    startActivity(intent);                                }
                                Looper.loop();                            }                            catch(ClassNotFoundException e) {
                                e.getMessage();                            }                            catch (SQLException e) {
                                e.getMessage();                            }                            /*                                关闭连接                             */                            finally {                                if (rs != null){                                    try {
                                        rs.close();                                    } catch (SQLException e) {
                                        e.printStackTrace();                                    }
                                }                                if (stmt != null){                                    try {
                                        stmt.close();                                    } catch (SQLException e) {
                                        e.printStackTrace();                                    }
                                }                                if (conn != null){                                    try {
                                        conn.close();                                    } catch (SQLException e) {
                                        e.printStackTrace();                                    }
                                }
                            }

                        }
                    }.start();                }
            }
        });    }

}

JDBC类的代码:


package com.example.enz.Housekeeping;import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;/** * Created by Administrator on 2018/4/17. */public class JDBC {    public static Connection JDBC_connection() throws ClassNotFoundException, SQLException {        //加载驱动        Class.forName("com.mysql.jdbc.Driver");        //获得数据库连接        String url = "jdbc:mysql://ip地址:端口一般是3306/数据库名字";        String user = "远程用户";        String passwd = "远程用户密码";        Connection conn = null;        try {
            conn = DriverManager.getConnection(url, user, passwd);        } catch (SQLException e) {
            e.printStackTrace();        }        return conn;    }

}


主要的就是加载驱动跟获取数据库连接的语句,Class.forName(xxxx)这个是固定的,我这里连接的是mysql就填的上面的那一串,JDBC除了Mysql外还可以连接其他数据库,只需要更改xxxx中的数值就好了。

后面三个变量的例子如下:


String url = "jdbc:mysql://192.168.0.1:3306/TestDataBase";String user = "Roger";String passwd = "Passwd";

相信什么意思大家也能看懂,就不多解释这个了。

因为我这个项目中其他地方也需要连接到数据库,所以单独分出了这个类以后直接调用就好了。

下面回到正题,上面主要代码中其实注释已经很详细,但是我还是简单说一下吧。

JDBC连接到数据库后,就直接执行sql语句就好了,啥意思?很简单,等于连接成功后你直接insert就可以插入了。

比如我上面的代码中的实现插入数据的代码:


//调用JDBC类的静态方法连接Mysqlconn = JDBC.JDBC_connection();//操纵数据库stmt = conn.createStatement();String sql_select = "select * from UserTable where username='"+bt_username+"'";rs = stmt.executeQuery(sql_select);if(rs.next()){    //rs不为null时---代表查询出来有数据    Toast.makeText(Register.this, "用户已存在!", Toast.LENGTH_SHORT).show();}else {
    String sql = "INSERT INTO UserTable VALUES ('"+bt_username+"','"+bt_password+"','testtouxiang',123456,'testaddress')";    stmt.executeUpdate(sql);    Toast.makeText(Register.this, "新建用户成功!", Toast.LENGTH_SHORT).show();}

我删了部分其他功能打代码,可以看到,首先是调用JDBC类去连接到了数据库,然后就可以直接插入数据了,不过在此之前还需要进行一个验证,既然是创建账号,而且用户名是主键,是不允许重复的,所以会先执行查询,使用拼接将EditText中获取到的用户名拼接到sql语句中,然后从用户表中查找该用户,若有返回结果,就代表该用户已经存在,那肯定就不能创建了,如果找不到该用户名的数据,代表数据库中不存在该用户,就可以往里加。插入也很简单,就是一条sql语句的事,把用户名和密码拼接到sql语句里(别问我sql语句是什么),然后什么touxiang、phone、address全部都硬解码插入,反正也用不上。

最后使用stmt.executeUpdate(xx)执行这个语句,过一会就能在数据库中看到这些数据了!


注意:

使用JDBC是需要导入jar包的,具体方式网上很多文章都有。

JDBC属于网络操作,所以需在子进程中进行,并需要在AndroidManifest.xml中添加


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

原文出处

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消