【Android】通过JDBC连接MySQL数据库实现登录注册

正文索引 [隐藏]

Android连接MySQL相对来说肯定稍微复杂了一点,Android是通过JDBC连接MySQL的,我这边演示就登录注册都放在同一个窗口了,如果没有账号点注册可以直接注册,然后登录xml界面如下,非常简单

XML前端界面

ANDROIDCONMYSQL
jdbc那个包在下面链接,还有Android的连接工具程序
jar工具包还有连接程序
连接MySQL的工具代码可以复制,但是MySQL的jar包是必须下的,连接工具包代码如下

MySQL工具包

public class JdbcUtil {
public static final String DIVERCLASS = "com.mysql.jdbc.Driver";
public static final String URL = "jdbc:mysql://服务器公网ID:3306/数据库名字";
public static final String USER = "数据库用户名";
public static final String PASSWORD = "数据库密码";
//每次别人获取连接的时候,都需要加载该类。但是一个类只需要加载一次就够了。静态代码块只需要执行一次。
static {
try {
Class.forName(DIVERCLASS);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
//连接
public static Connection getConnection() {
Connection connection = null;
try {
connection = (Connection) DriverManager.getConnection(URL,USER,PASSWORD);
return connection;
} catch (Exception e) {
e.printStackTrace();
}
return connection;
}
//关闭资源
public static void close(ResultSet rs, Statement st,Connection conn){
if(rs!=null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(st!=null){
try {
st.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}

注册逻辑

然后现在开始干,我们还需要自建MySQLHelper.java文件来实现MySQL的增删改查
注册是最简单的,我们就从注册开始吧,设置一个静态全局连接变量

private static Connection connection=null;

然后我们开始写函数,该怎么设置呢?我们这样想,既然注册就肯定需要输入账号密码,然后验证,再插入对吧,就肯定需要参数吧
public static void insertLogin(String username,String userpasswd)throws SQLException{
connection = JdbcUtil.getConnection();
String sql = "insert into login (username,userpasswd)values('"+username+"','"+userpasswd+"')";
PreparedStatement ps=connection.prepareStatement(sql);
ps.execute(sql);
}

注册按钮事件

怎么调用呢,在Android里面主线程里面是不允许使用网络的,所有我们需要新开一个线程,注册按钮事件里面代码如下

resitBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (passwdText.getText().toString().isEmpty() || passwdText.getText().toString().isEmpty()) {
Toast.makeText(MainActivity.this, "账号或者密码不能为空", Toast.LENGTH_LONG).show();
} else {
new Thread(new Runnable() {
@Override
public void run() {
//Looper.prepare();//循环扫描,否则Toast不能在子线程中使用
try {
boolean flag = MySQLHelper.checkuser(userText.getText().toString());//判断输入框是否为数据库账号
if (flag) {
Toast.makeText(MainActivity.this, "账号已存在,请换一个!", Toast.LENGTH_LONG).show();
} else {
MySQLHelper.insertLogin(userText.getText().toString(), passwdText.getText().toString());
Toast.makeText(MainActivity.this, "注册成功", Toast.LENGTH_LONG).show();
}
} catch (Exception e) {
e.printStackTrace();
}
//Looper.loop();
}
}).start();
}
}
});

粘贴复制后,发现运行后程序直接死了是吧,那是因为Toast里面不允许在子线程里面使用,把//Looper.prepare();//Looper.loop();去掉注释即可.
然后我们来写登录,也是需要传参,但是我们应该写什么类型呢,我用的boolean,用输入框传参后是否跟数据库里面读取的数据一致

登录逻辑

public static boolean login(String username,String userpassword) throws SQLException {
connection = JdbcUtil.getConnection();
String sql = "select * from login where username=? and userpasswd=?";
PreparedStatement pst = connection.prepareStatement(sql);
pst.setString(1,username); //第二个字段
pst.setString(2,userpassword); //第三个字段
ResultSet rs = pst.executeQuery(); //将查询的结果返回
return rs.next(); //一条一条读,只要有记录就为true
}

然后去登录按钮里面事件代码

登录按钮事件

 loginBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final String user = userText.getText().toString();
final String password = passwdText.getText().toString();
if (user.isEmpty() || password.isEmpty()) {
Toast.makeText(MainActivity.this, "账号或者密码不能为空", Toast.LENGTH_LONG).show();
} else {
//开启线程
new Thread(new Runnable() {
@Override
public void run() {
Looper.prepare();//循环扫描,否则Toast不能在子线程中使用
try {
boolean flag = MySQLHelper.login(user, password);//判断输入框是否为数据库账号密码
if (flag) {
Toast.makeText(MainActivity.this, "登录成功!", Toast.LENGTH_LONG).show();
Intent intent = new Intent(MainActivity.this, LoginSuccess.class);
startActivity(intent);
} else {
Toast.makeText(MainActivity.this, "登录失败,请检查账号或者密码是否正确!", Toast.LENGTH_LONG).show();
}
} catch (SQLException e) {
e.printStackTrace();
}
Looper.loop();
}
}).start();
}
}
});

当然你看到我注册里面有个checkuser()函数,这个是检查账号是否存在的,写法跟登录查询差不多,我就不写了,当然我这里说的是Android通过jdbc连接MySQL,其他这个有点不太合理,应该app与web服务器交互,服务器访问数据库,所以应该是web端的java程序去访问数据库

blank