1. 加入依赖
在bulid.gradle中的 dependencies项 加入
implementation 'mysql:mysql-connector-java:5.1.49'
2.开启联网权限
在 manifests/AndroidManifest.xml 文件中 加入
<uses-permission android:name="android.permission.INTERNET"/>
3. JdbcUtil.java 工具类编写
public class JdbcUtils {
private static JdbcUtils instance;
public static JdbcUtils getInstance() {
if(instance == null){
instance = new JdbcUtils();
}
return instance;
}
public static Connection getConnection(){
try{
Class.forName("com.mysql.jdbc.Driver");
return DriverManager.getConnection("jdbc:mysql://10.0.2.2:3306/数据库名?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false&allowPublicKeyRetrieval=true",
"root",
"12345678");
}catch(Exception e){
e.printStackTrace();
}
return null;
}
public static void close(Connection conn){
try{
conn.close();
}catch(SQLException throwables){
throwables.printStackTrace();
}
}
}
注意:
1. url部分不能使用localhost或者127.0.0.1,安卓模拟器会把其当作手机本身的地址,应该为手机wifi网关地址10.0.2.2或者电脑局域网地址。
2.由于使用的5.1.49版本连接器 所以需要使用以下语句。
Class.forName("com.mysql.jdbc.Driver");
4. UserDao.java
public class UserDao {
JdbcUtils jdbcUtil = JdbcUtils.getInstance();
Connection conn = JdbcUtils.getConnection();
public boolean login(String username, String password) throws SQLException{
String sql = "SELECT * from userInfo where username= ? and password= ?";
if(conn == null){
Log.i("error", "无数据链接");
return false;
}else {
try {
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1, username);
ps.setString(2, password);
ResultSet rs = ps.executeQuery();
Log.i("rs", "result:"+rs.toString());
return rs.next();
} catch (SQLException e) {
e.printStackTrace();
return false;
}
}
}
}
其中sql语句 请根据你的实际情况编写。
5.User.java
public class User {
private String username;
private String password;
public User(String username, String password) {
this.username = username;
this.password = password;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
实体类 请根据自身数据库设置编写
6. 在MainActivity中调用
public void onClick(View v) {
new Thread(new Runnable() {
@Override
public void run() {
String id = et_id.getText().toString().trim();
String pwd = et_pwd.getText().toString().trim();
if (id.equals("") || pwd.equals("")) {
Looper.prepare();
Toast toast = Toast.makeText(MainActivity.this, "输入不能为空!", Toast.LENGTH_SHORT);
toast.show();
Looper.loop();
}
UserDao ud = new UserDao();
Boolean result;
try {
result = ud.login(id, pwd);
} catch (SQLException e) {
throw new RuntimeException(e);
}
Looper.prepare();
Toast toast;
if (!result) {
toast = Toast.makeText(MainActivity.this, "用户名不存在或密码错误!", Toast.LENGTH_SHORT);
} else {
toast = Toast.makeText(MainActivity.this, "登录成功", Toast.LENGTH_SHORT);
}
toast.show();
Looper.loop();
}
}).start();
}
注意:需要新开一个线程访问数据库,否则可能主线程超时杀死连接导致 conn = null
其他布局文件 或者 变量名请根据实际情况更改。
可能出现的问题:
/**
* @author Kevin Wang
* 使用5.1.49版本连接器,用com.mysql.jdbc.Driver作为ClassName
* MySQL Server : 8.0.30
* 一直出现conn null 的原因是:
* 1. 连接器版本问题 -> 在build.gradle中加入
* implementation 'mysql:mysql-connector-java:5.1.49' 依赖项
* 2. 数据库访问需要新开一个线程使用否则会网络超时,主线程杀死连接,返回null
* 3. 联网权限未开启 -> 需要在manifests/AndroidManifest.xml加入
* <uses-permission android:name="android.permission.INTERNET"/>
* 4. 数据库url问题,如果使用localhost或者127.0.01 安卓模拟器会默认把手机地址当作前面两个地址
* -> 将ip改为模拟器连接wifi的网关10.0.2.2 或者 局域网中电脑的ip地址即可
*
* */
文章为作者本人学习过程中总结的内容,内容或逻辑质量不高。 若有问题,还请各位读者斧正。