Java JDBC在android emulator中工作,但在真实设备上不工作?

Java JDBC在android emulator中工作,但在真实设备上不工作?,java,android,jdbc,Java,Android,Jdbc,我正在使用Android Studio开发一个Android应用程序,它使用JDBC驱动程序连接到Oracle数据库 问题: public class LiveDB { String driver = "oracle.jdbc.driver.OracleDriver"; String serverName = "192.168.x.x"; String portNumber = "1521"; String db = "orcl"; String url = "jdbc:oracle:thin:

我正在使用Android Studio开发一个Android应用程序,它使用JDBC驱动程序连接到Oracle数据库

问题:

public class LiveDB {
String driver = "oracle.jdbc.driver.OracleDriver";
String serverName = "192.168.x.x";
String portNumber = "1521";
String db = "orcl";
String url = "jdbc:oracle:thin:@" + serverName + ":" + portNumber + ":" + db;
String user = "someuser";
String pwd = "somepass";
Connection con = null;

private void openConnection(){
    if(con != null) return;
    try {
        Class.forName(driver).newInstance();
        con = DriverManager.getConnection(url, user, pwd);
    } catch (Exception e) {
        e.printStackTrace();
        con = null;
    }
}

private void closeConnection(){
    if(con == null) return;
    try{
        con.close();
    }
    catch (Exception e){
        e.printStackTrace();
        con = null;
    }
}

public ArrayList<Student> searchStudents(String input){
    ArrayList<Student> students = new ArrayList<>();
    openConnection();
    try {
        String query = Student.getQuery(input);
        Statement statement = con.createStatement();
        ResultSet set = statement.executeQuery(query);
        while (set.next()) {
            //Getting data from set and show it.
        }
    }
    catch (Exception e){
        e.printStackTrace();
        con = null;
    }
    closeConnection();
    return students;
}
}
在Android Emulator(API 26)上编译和运行时工作正常。但当我试图在真实设备(API 19)上运行它时,它崩溃了

当调用
Class.forName(“oracle.jdbc.driver.OracleDriver”)
时,它会崩溃,从而导致
ClassNotFoundException

代码:

public class LiveDB {
String driver = "oracle.jdbc.driver.OracleDriver";
String serverName = "192.168.x.x";
String portNumber = "1521";
String db = "orcl";
String url = "jdbc:oracle:thin:@" + serverName + ":" + portNumber + ":" + db;
String user = "someuser";
String pwd = "somepass";
Connection con = null;

private void openConnection(){
    if(con != null) return;
    try {
        Class.forName(driver).newInstance();
        con = DriverManager.getConnection(url, user, pwd);
    } catch (Exception e) {
        e.printStackTrace();
        con = null;
    }
}

private void closeConnection(){
    if(con == null) return;
    try{
        con.close();
    }
    catch (Exception e){
        e.printStackTrace();
        con = null;
    }
}

public ArrayList<Student> searchStudents(String input){
    ArrayList<Student> students = new ArrayList<>();
    openConnection();
    try {
        String query = Student.getQuery(input);
        Statement statement = con.createStatement();
        ResultSet set = statement.executeQuery(query);
        while (set.next()) {
            //Getting data from set and show it.
        }
    }
    catch (Exception e){
        e.printStackTrace();
        con = null;
    }
    closeConnection();
    return students;
}
}
公共类LiveDB{
String driver=“oracle.jdbc.driver.OracleDriver”;
字符串serverName=“192.168.x.x”;
字符串portNumber=“1521”;
字符串db=“orcl”;
String url=“jdbc:oracle:thin:@”+serverName+:“+portNumber+”:“+db;
字符串user=“someuser”;
字符串pwd=“somepass”;
连接con=null;
私有void openConnection(){
如果(con!=null)返回;
试一试{
Class.forName(driver.newInstance();
con=DriverManager.getConnection(url、用户、pwd);
}捕获(例外e){
e、 printStackTrace();
con=null;
}
}
私有void closeConnection(){
如果(con==null)返回;
试一试{
con.close();
}
捕获(例外e){
e、 printStackTrace();
con=null;
}
}
公共ArrayList searchStudents(字符串输入){
ArrayList students=新ArrayList();
openConnection();
试一试{
字符串查询=Student.getQuery(输入);
语句Statement=con.createStatement();
ResultSet=statement.executeQuery(查询);
while(set.next()){
//从集合中获取数据并显示它。
}
}
捕获(例外e){
e、 printStackTrace();
con=null;
}
closeConnection();
留学生;
}
}

这可能是因为设备上没有所需的库,并且您的模拟器可以访问工作区中的库。不,我在真实设备(API 26)上尝试过,它也可以工作。我认为这与android版本有关。但我把JAR放在lib文件夹中,为什么它们不能在Android API 19上工作,但可以在Android API 26上工作。您不应该使用Android应用程序中的JDBC驱动程序。创建一个连接到数据库的web服务,让您的Android应用程序与web服务对话。我知道web服务,但这不是答案。我想用JDBC驱动程序来做,因为我的android应用程序不会要求太多的数据。还要考虑JDBC驱动程序在Android API 26上工作的奇怪问题,而不是API 19的问题。我不认为API版本与
Class.forName()
调用有任何关系,但它给出了ClassNotFoundException。我不认为这些驱动程序存在于API级别26之前,或者至少不存在于太远的地方。