使用JDBC连接Android Studio-MySQL的问题(错误:java.sql.SQLNonTransientC



我想创建一个android studio和MySql之间的连接。

MySQL版本= MySQL Workbench 8.0 CE

MySQL connector版本= MySQL -connector-java-8.0.23.jar

数据库名= testname

我已经将连接器添加到我的项目

我得到错误:java.sql.SQLNonTransientConnectionException: Could not create connection to database server.

代码:

private Connection getConnection(){
Connection con;
try{
Class.forName("com.mysql.cj.jdbc.Driver").newInstance();
con = (Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/testandroid?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=CONVERT_TO_NULL&serverTimezone=GMT","root","");
return con;
}catch (Exception e){
System.out.println("Error ************************"+e);
return null;
}
}

private ArrayList<User> getUserList()
{
ArrayList<User> userList = new ArrayList<>();
Connection connection = getConnection();

String query = "Select pseudo FROM `users` where userID="+1;
Statement st;
ResultSet rs;
try{
st =  connection.createStatement();
rs = st.executeQuery(query);
User user ;
while (rs.next())
{
user = new User(rs.getString("pseudo"));
userList.add(user);
}
}catch (Exception e){
e.printStackTrace();
}
return userList;
}

private void showData(){
ArrayList<User> list = getUserList();
for (int i=0; i<list.size(); i++){
test.setText(list.get(i).getPseudo());
test.setText("fnpvrpogn");
}
}

误差

I/System.out: Error ************************java.sql.SQLNonTransientConnectionException: Could not create connection to database server.
W/System.err: java.lang.NullPointerException: Attempt to invoke interface method 'java.sql.Statement java.sql.Connection.createStatement()' on a null object reference
at com.example.testjdbc.MainActivity.getUserList(MainActivity.java:54)
W/System.err:     at com.example.testjdbc.MainActivity.showData(MainActivity.java:73)
W/System.err:     at com.example.testjdbc.MainActivity.onCreate(MainActivity.java:24)
at android.app.Activity.performCreate(Activity.java:7136)
W/System.err:     at android.app.Activity.performCreate(Activity.java:7127)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2893)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6669)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)

对于运行在Android设备或模拟器上的软件,localhost为Android设备或模拟器的。最有可能的是,您的MySQL实例没有在您的Android设备或模拟器上运行。

如果你在Android设备上运行应用程序,你需要使用运行MySQL的机器的IP地址或主机名。

如果你在模拟器上运行你的应用程序,MySQL和模拟器在同一台计算机上运行,使用10.0.2.2而不是localhost作为地址。


另外,请注意,从可靠性和安全性的角度来看,JDBC不是为移动设备设计的。请考虑做一些其他的事情,比如让你的应用程序与Web服务通信,而Web服务又与数据库通信。

相关内容

最新更新