问题描述
在使用当前使用 MAMP 的本地服务器测试我的登录表单时,当我尝试进行登录测试时,总是遇到以下错误:
W/System.err: java.sql.sqlException: No suitable driver found for jbdc:MysqL://localhost/PHPMyAdmin/diplomanya
W/System.err: at java.sql.DriverManager.getConnection(DriverManager.java:605)
W/System.err: at java.sql.DriverManager.getConnection(DriverManager.java:218)
at fr.ibra_yous.diplomany_v00001.ConnectBdd.ConnexionsqlBdd(ConnectBdd.java:20)
at fr.ibra_yous.diplomany_v00001.Log_in.Connect(Log_in.java:57)
at fr.ibra_yous.diplomany_v00001.Log_in.access$000(Log_in.java:15)
at fr.ibra_yous.diplomany_v00001.Log_in$1.onClick(Log_in.java:34)
at android.view.View.performClick(View.java:7448)
at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:1119)
at android.view.View.performClickInternal(View.java:7425)
at android.view.View.access$3600(View.java:810)
at android.view.View$PerformClick.run(View.java:28305)
W/System.err: at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7656)
at java.lang.reflect.Method.invoke(Native Method)
W/System.err: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
W/System.err: java.lang.NullPointerException: Attempt to invoke interface method 'java.sql.ResultSet java.sql.Statement.executeQuery(java.lang.String)' on a null object reference
W/System.err: at fr.ibra_yous.diplomany_v00001.Log_in.Connect(Log_in.java:61)
at fr.ibra_yous.diplomany_v00001.Log_in.access$000(Log_in.java:15)
at fr.ibra_yous.diplomany_v00001.Log_in$1.onClick(Log_in.java:34)
at android.view.View.performClick(View.java:7448)
at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:1119)
at android.view.View.performClickInternal(View.java:7425)
at android.view.View.access$3600(View.java:810)
W/System.err: at android.view.View$PerformClick.run(View.java:28305)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7656)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
我是 Android Studio 和 Java 的新手,因此我对它们的含义一无所知,所以我想请求一些帮助,以便我能够理解而不是重新犯导致我犯这些错误的错误错误,因为我必须制作一个注册表。
我不知道我是否应该联合所有相关代码,这些代码是包含我的登录表单的 log_inactivity,我添加了这一行的清单文件:
`<uses-permission android:name="android.permission.INTERNET" />`
这里是允许连接到 dbb 的类代码:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.sqlException;
import java.sql.Statement;
public class ConnectBdd {
public static String Driverjbdc = "com.MysqL.cj.jdbc.Driver";
public static String url = "jbdc:MysqL://localhost/PHPMyAdmin/diplomanya";
public static String password = "root";
public static String user = "root";
public static Statement ConnexionsqlBdd() {
try {
Class.forName(Driverjbdc);
Connection conn = DriverManager.getConnection(url,user,password);
Statement stmt = conn.createStatement();
return stmt;
} catch(sqlException e){
e.printstacktrace();
return null;
} catch(Exception e){
e.printstacktrace();
return null;
}
}
}
```
The log in code :
```
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.os.StrictMode;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import java.sql.ResultSet;
import java.sql.Statement;
public class Log_in extends AppCompatActivity {
private EditText inIdInput,inPasswordInput;
private Button logButton,singInBtn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_log_in);
inIdInput = this.findViewById(R.id.id_champ);
inPasswordInput = this.findViewById(R.id.id_pass_champ);
logButton = this.findViewById(R.id.id_log_button);
singInBtn = this.findViewById(R.id.id_singIn_button);
logButton.setonClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
Connect();
}
});
singInBtn.setonClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent singInActivityIntent = new Intent(Log_in.this,Sing_in.class );
startActivity(singInActivityIntent);
}
});
if (android.os.Build.VERSION.SDK_INT > 9 ){
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
}
}
private void Connect() {
try{
ConnectBdd connBdd = new ConnectBdd();
Statement stmt = connBdd.ConnexionsqlBdd();
String Request = "SELECT password_user FROM users WHERE mail_user = "+inIdInput.getText().toString()+"";
final ResultSet rs = stmt.executeQuery(Request);
if (rs.getString(1).equals(inPasswordInput.getText().toString())){
NextActivity();
}
}catch(Exception e){
e.printstacktrace();
}
}
private void NextActivity() {
Intent redirect = new Intent(Log_in.this,MainActivity.class);
startActivity(redirect);
finish();
}
}
```
I really need help. Thank you.
解决方法
您得到 SQLException
的原因是 JDBC 不是为与移动设备一起使用而开发和设计的。不幸的是,Android
甚至没有 MYSQL JDBC driver
。