当前位置: 首页 > 知识库问答 >
问题:

使用JDBC将Android应用程序连接到Bluemix db2数据库(noClassDefFounderRor:)

李谦
2023-03-14

代码:

import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import java.sql.*;
public class MainActivity extends AppCompatActivity {

static Connection       con;
static Statement        stmt;
static Statement        stmt1;
static DatabaseMetaData dmd;


private static String user = "user*****";
private static String password = "L***********";
private static String url = "jdbc:db2://*.**.*****:50001/SQLDB";


public void connect(){
    java.util.Properties properties = new java.util.Properties();

    properties.put("user", user);
    properties.put("password", password);
    properties.put("sslConnection", "true");

    try {
        Class.forName("com.ibm.db2.jcc.DB2Driver");
    con = DriverManager.getConnection(url, properties);
    stmt = con.createStatement();

    } catch (ClassNotFoundException e) {
       // e.printStackTrace();
    } catch (SQLException e) {
      //  e.printStackTrace();
    }
}
public void close() throws SQLException, ClassNotFoundException{
    stmt.close();
    con.close();
}

public static void addSomethingToMyToDoList(int ID, String something) throws SQLException{
    if(con != null)
        stmt.executeUpdate("INSERT INTO TODOLIST VALUES (" + ID + " , '" + something +"')");
    con.commit();
}

public void addSomethingToDatabase(View v){
    connect();
    int sampleID = 1233;
    try {
        addSomethingToMyToDoList(sampleID, "testTest");
         close();
    } catch (SQLException e) {
        e.printStackTrace();
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                    .setAction("Action", null).show();
        }
    });
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
        return true;
    }

    return super.onOptionsItemSelected(item);
}
}

我将db2jcc.jar拖放到/app/libs文件夹中,并右键单击+Add as library

我使用Android Studio

我读到db2jcc.jar不能与jdk 1.8一起工作,这就是我安装jdk 1.7的原因(Did file->project structure->SDK Location->将jdk Location更改为我的JDK1.7.0目录)

build.gradle文件包含:

defaultConfig {
    [...]
    multiDexEnabled true
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
compile files('libs/db2jcc.jar')
testCompile 'junit:junit:4.12'
compile 'com.android.support:design:23.1.1'
compile 'com.android.support:multidex:1.0.1'
compile 'com.android.support:appcompat-v7:23.1.1'
}

当我运行我的应用程序(在AVD上)并点击按钮时,我的应用程序会显示一条消息:

Caused by: java.lang.NoClassDefFoundError: com.ibm.db2.jcc.DB2SimpleDataSource

完整错误日志:

Class.forName("com.ibm.db2.jcc.DB2Driver").newInstance();
Class.forName("com.ibm.db2.jcc.DB2Driver");

谢谢。

共有1个答案

曹均
2023-03-14

错误很明显,您的应用程序找不到db2模块。检查是否正确地将这些模块导入到应用程序库中,并且添加到lib中的驱动程序是否提供了用于DataSource的类。

无论如何,我会避免让您的应用程序直接连接到外部数据库,原因有几个:

  • db连接通常是有限的,将它们用于每个应用程序实例将使db实例很快失去可用连接,特别是如果db交互不是很短,而且连接没有正确释放
  • 便携式设备的网络连接不稳定,在运行数据库操作时可能会失去连接
 类似资料:
  • 我想用“OpenOrCreateDatabase”创建一个SQLLite数据库。问题是,我在创建一个新表时出现了一个错误。 这是我的代码: 怎么了? 多谢!

  • 问题内容: 我正在研究将由学校使用的应用程序。每所学校将建立自己的数据库。每个学校都会为应用程序提供自己的“设置”文件。设置文件将包含创建设置文件的特定学校的数据库URL。这样一来,使用该应用程序的学生如果想连接到其他数据库,就只能加载其他设置文件。 我的问题是,如何保护用于连接数据库的用户名和密码?因此,只有应用程序具有对数据库的读写访问权限。应用程序仅具有该特定学校的读写权限吗? 如果您需要更

  • 本文向大家介绍如何使用JDBC程序连接到PostgreSQL数据库?,包括了如何使用JDBC程序连接到PostgreSQL数据库?的使用技巧和注意事项,需要的朋友参考一下 PostgreSQL是一个由全球志愿者团队开发的开源关系数据库管理系统(DBMS)。PostgreSQL不受任何公司或其他私人实体的控制,并且源代码是免费提供的。 PostgreSQL可在所有主要操作系统上运行,包括Linux,

  • 本文向大家介绍如何使用JDBC程序连接到SQLite数据库?,包括了如何使用JDBC程序连接到SQLite数据库?的使用技巧和注意事项,需要的朋友参考一下 答:SQLite是一个进程内库,可实现自包含的,无服务器的,零配置的事务型SQL数据库引擎。它是一个零配置的数据库,这意味着像其他数据库一样,您无需在系统中对其进行配置。 SQLite引擎不是一个独立于其他数据库的独立进程,您可以根据需要将其静

  • 问题内容: 我正在为我的三年级项目编写应用程序。该应用程序将需要与外部mySQL数据库进行交互。该应用程序将从数据库中检索数据,并在ListView中将其显示给用户。 我对应用程序将要具有的功能有很好的了解。我也花了很多时间使用ListViews和本地SQLite数据库。我还对HttpUrlConnection类做了一些重新研究。 我只是想知道有人能为我提供更多有关如何访问此外部数据库的指导吗?

  • 我正在尝试在android应用程序中使用JDBC连接到SQL Server。我导入了sqljdbc4。jar进入我的应用程序,但当我 conn=驾驶员管理器。getConnection(连接字符串); 我得到下面的错误:连接字符串是 jdbc:sqlserver://xxx.xxx.xxx.xxx:1433;加密=快速;用户=用户名;密码=密码; 谁能告诉我出了什么问题吗?如果我将相同的代码放入常