gpt4 book ai didi

Java 数据库连接类一直将连接返回为 Null

转载 作者:行者123 更新时间:2023-11-29 02:17:39 24 4
gpt4 key购买 nike

我已经为我的数据库连接创建了一个公共(public)类,因为我在整个应用程序中运行各种数据库查询

每次我调用类 con 总是返回 Null但是,如果我在类之外使用它,并直接在 Activity 中使用它,那么它会连接并运行。我不知道为什么,非常感谢任何正确方向的指示。

这是我的 ConnectionManager 类:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;


public class ConnectionManager {
static String serverName ="192.168.1.5";
static String serverPort ="1433";
static String databaseName ="DBNAME";
static String db = String.format("jdbc:jtds:sqlserver://%s:%s/%s", serverName, serverPort, databaseName);
static String un = "sa";
static String pass = "";
static Connection con;


public static Connection getConnection() {
try {
try {
Class.forName("net.sourceforge.jtds.jdbc.Driver");
con = DriverManager.getConnection(db, un, pass);
} catch (SQLException ex) {
// log an exception. fro example:
System.out.println("Failed to create the database connection.");
}
} catch (ClassNotFoundException ex) {
// log an exception. for example:
System.out.println("Driver not found.");
}
return con;
}
}

在我的 Activity 中,我这样调用它:

  try {

con = ConnectionManager.getConnection();
if (con == null) {
z = "Check Your Internet Access!";
Toast.makeText(StockEnquiry.this, z, Toast.LENGTH_LONG).show();
} else {
stmt = con.createStatement();
String query = "select * from Details where ID= '1111' ";
rs = stmt.executeQuery(query);
if (rs.next()) {
String sCode = rs.getString("Short_Code");
String sDesc = rs.getString("Short_Desc");
Toast.makeText(StockEnquiry.this, (sCode + " " + sDesc), Toast.LENGTH_LONG).show();
con.close();
} else {
Toast.makeText(StockEnquiry.this,"Invalid Code!", Toast.LENGTH_LONG).show();
}

Toast.makeText(StockEnquiry.this, "Message1", Toast.LENGTH_LONG).show();
}
} catch (Exception ex) {
isSuccess = false;
z = ex.getMessage();
Toast.makeText(StockEnquiry.this, "Appears to have failed in catch", Toast.LENGTH_LONG).show();
}
}
}

最佳答案

所以我得到的消息是:android.os.NetworkOnMainThreadException'经过一番挖掘后,我相信我正面临这个问题,因为我没有将它作为异步任务运行。

可以取消这个限制

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();

StrictMode.setThreadPolicy(policy);

因此连接类如下所示。

import android.os.StrictMode;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;


public class ConnectionManager {
static StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
static String serverName ="192.168.1.1";
static String serverPort ="1433";
static String databaseName ="DatabaseName";
static String db = String.format("jdbc:jtds:sqlserver://%s:%s/%s", serverName, serverPort, databaseName);
static String un = "Username";
static String pass = "Password";
static Connection con;


public static Connection getConnection() {
try {
try {
StrictMode.setThreadPolicy(policy);
Class.forName("net.sourceforge.jtds.jdbc.Driver");
con = DriverManager.getConnection(db, un, pass);
} catch (SQLException ex) {
// log an exception. fro example:
System.out.println("Failed to create the database connection.");
}
} catch (ClassNotFoundException ex) {
// log an exception. for example:
System.out.println("Driver not found.");
}
return con;
}
}

从 Activity 中调用代码与原始帖子保持不变。

作为由此产生的链式 react ,您可能会遇到应用程序崩溃/锁定或因网络连接/覆盖不佳而运行缓慢。所以它有点牺牲,但可以通过其他方式处理。

关于Java 数据库连接类一直将连接返回为 Null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59323200/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com