java - 为什么我有这个错误?MySQLNonTransientConnectionException
问题描述
我有这个错误:>com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException:无法创建与数据库服务器的连接。
这是我的代码:
public class MainActivity extends AppCompatActivity {
private static int SIGN_IN_CODE = 1;
private RelativeLayout activity_main;
private FloatingActionButton sendBtn;
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == SIGN_IN_CODE) {
if (resultCode == RESULT_OK) {
Snackbar.make(activity_main, "Вы авторизованы!", Snackbar.LENGTH_LONG).show();
//displayAllMessages();
} else {
Snackbar.make(activity_main, "Вы не авторизованы!", Snackbar.LENGTH_LONG).show();
finish();
}
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
activity_main = findViewById(R.id.activity_main);
sendBtn = findViewById(R.id.btnSend);
sendBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
EditText textField = findViewById(R.id.messageField);
if (textField.getText().toString().equals(""))
return;
//SQL
//String connectionStr = "jdbc:mysql://109.95.210.183:3306/u86855_wp11";
String connectionStr = "jdbc:mysql://localhost:3306/app";
//String insert = "INSERT INTO u86855_wp11(nick, message) VALUES('lax','petro')";
String insert = "INSERT INTO users(nick, message) VALUES('lax','petro')";
try {
Object mysql = Class.forName("com.mysql.jdbc.Driver").newInstance();
//Connection dbConnection = DriverManager.getConnection(connectionStr,"u86855_wp11", "SchoolApp");
Connection dbConnection = DriverManager.getConnection(connectionStr, "SchoolApp", "SchoolApp");
Statement statement = dbConnection.createStatement();
ResultSet resultSet = statement.executeQuery(insert);
} catch (Exception e) {
textField.setText(e.toString());
Log.e("Ошибка", "database", e);
}
// textField.setText("");
}
});
if (FirebaseAuth.getInstance().getCurrentUser() == null)
startActivityForResult(AuthUI.getInstance().createSignInIntentBuilder().build(), SIGN_IN_CODE);
else {
Snackbar.make(activity_main, "Вы авторизованы!", Snackbar.LENGTH_LONG).show();
//displayAllMessages();
}
}
private void displayAllMessages() {
}
}
这是我的错误日志:
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server.
at java.lang.reflect.Constructor.newInstance0(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:334)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:403)
at com.mysql.jdbc.Util.getInstance(Util.java:386)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:919)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:898)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:887)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:861)
at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2266)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2015)
at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:768)
at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)
at java.lang.reflect.Constructor.newInstance0(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:334)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:403)
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:385)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:323)
at java.sql.DriverManager.getConnection(DriverManager.java:569)
at java.sql.DriverManager.getConnection(DriverManager.java:219)
at com.example.databasetest.MainActivity$1.onClick(MainActivity.java:81)
at android.view.View.performClick(View.java:6256)
at android.view.View$PerformClick.run(View.java:24701)
at android.os.Handler.handleCallback(Handler.java:789)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6541)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
Caused by: android.os.NetworkOnMainThreadException
at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1448)
at java.net.Inet6AddressImpl.lookupHostByName(Inet6AddressImpl.java:102)
at java.net.Inet6AddressImpl.lookupAllHostAddr(Inet6AddressImpl.java:90)
at java.net.InetAddress.getAllByName(InetAddress.java:787)
at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:188)
at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:299)
at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2187)
at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2220)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2015)
at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:768)
at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)
at java.lang.reflect.Constructor.newInstance0(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:334)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:403)
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:385)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:323)
at java.sql.DriverManager.getConnection(DriverManager.java:569)
at java.sql.DriverManager.getConnection(DriverManager.java:219)
at com.example.databasetest.MainActivity$1.onClick(MainActivity.java:81)
at android.view.View.performClick(View.java:6256)
at android.view.View$PerformClick.run(View.java:24701)
at android.os.Handler.handleCallback(Handler.java:789)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6541)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
解决方案
主要问题是在线
Caused by: android.os.NetworkOnMainThreadException
在您的错误日志中。
当您尝试在主线程上进行网络调用时会发生这种情况。您应该为此使用 Async 任务或 Rxjava 或任何其他方法。
另一种方法可以在 setcontent 视图之后将此代码粘贴到您的主要活动中。
if (android.os.Build.VERSION.SDK_INT > 9) {
StrictMode.ThreadPolicy policy = new
StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
}
并将其导入您的活动文件
import android.os.StrictMode;
推荐阅读
- c# - 在 datetime 中输入 null(C# 和 WPF)
- c# - InvalidOperationException:无法跟踪实体类型“Vessels”>的实例,因为另一个实例
- google-sheets - Data Studio 中一个单元格中的多个 URL 显示为一个组合 URL
- javascript - 使用 Chart.js 制作木偶
- forms - Symfony5 forms - render radio input inside label
- github - Remix IDE中文件资源管理器中浏览器下的随机“github”文件夹
- r - 在 R 中的数据框中包含 OR 的 IF 语句
- asp.net - 具有认知身份验证的 ASP.NET Core 混合 Razor 页面/React SPA 应用程序
- ios - 区分 SpriteKit 中的光源
- java - 从我的 android 应用程序打开特定的 whatsapp 联系人