当添加类时出现“类未找到异常”

3

我正在为Android进行SqlServer连接。

我正在包括所有必要的jar文件。

enter image description here

构建路径截图:

enter image description here

错误行:

Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();

ORDER & EXPORT:
订单和导出: enter image description here 编辑
package com.example.sqlservercall;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.TextView;


public class MainActivity extends Activity {


    String url="jdbc:sqlserver://10.0.2.2;instance=14GRAFICALI\\MSSQLSERVER2008;databaseName=AndroidDB;integrated security=true";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        TextView tvData=(TextView)findViewById(R.id.tvSelectedData);

        try {
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance();
            Connection conn =DriverManager.getConnection(url);                   

            System.out.println("connected");
            Statement statement=conn.createStatement();
            ResultSet resultSet=statement.executeQuery("select * from AndroidDB");
            while(resultSet.next()){
                tvData.setText(" Data1 : "+resultSet.getString(1)+"  Data 2 : "+resultSet.getNString(2));
            }

        } catch (Exception e) {
            e.printStackTrace();
            tvData.setText(e.getMessage());
        }



    }

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

}

异常细节:

enter image description here

在按顺序检查JAR文件并导出后出现了新错误:

Unable to execute dex: Multiple dex files define Lcom/microsoft/sqlserver/jdbc/ActivityCorrelator$1;
[2013-09-06 18:24:04 - SQLServerCall] Conversion to Dalvik format failed: Unable to execute dex: Multiple dex files define Lcom/microsoft/sqlserver/jdbc/ActivityCorrelator$1;
[2013-09-06 18:24:23 - Dex Loader] Unable to execute dex: Multiple dex files define Lcom/microsoft/sqlserver/jdbc/ActivityCorrelator$1;
[2013-09-06 18:24:23 - SQLServerCall] Conversion to Dalvik format failed: Unable to execute dex: Multiple dex files define Lcom/microsoft/sqlserver/jdbc/ActivityCorrelator$1;

它是否在“顺序和导出”选项卡下被勾选了?不确定它是否也需要在那里。另外,也许只需清理项目。 - Scott Helme
尝试执行项目 -> 清理一次。Eclipse有时会表现出奇怪的行为。 - Jatin
不清理项目也无济于事。 - C Sharper
1
你不应该从Android连接到SQLServer... 你为什么想这样做呢? - Ovidiu Latcu
2
你可能只需要使用这两个库中的一个。 - njzk2
显示剩余11条评论
3个回答

1
根据您提供的截图,我可以看出您需要替换 :。
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver")

使用“with”关键字:
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver")

我按照你指出的修改了它,但不幸的是仍然出现相同的错误。 - C Sharper

1
确保库在“Android私有库”中,并在“Order and Export”选项卡中添加“Android私有库”。将库放在“libs”目录中就足够了,不需要将它们添加到构建路径中,因为“libs”目录中的所有文件都会自动添加到构建路径中(通过“Android私有库”)。我还相信您正在尝试实例化错误的类,请使用类名com.microsoft.sqlserver.jdbc.SQLServerDriver(我注意到您的屏幕截图中真正的包名是com.microsoft.sqlserver.jdbc而不是com.microsoft.jdbc.sqlserver)。编辑:(根据您的更新后更新答案)我假设sqljdbc.jar和sqljdbc4.jar都包含相同的类,如果是这种情况,您只能在项目中包含其中一个。

@ShrimantBajiraoPeshawe-我看到了更新的答案,我相信你正在尝试使用错误的类名。通过你的截图,我可以看到真正的包名是com.microsoft.sqlserver.jdbc,但你在代码中交换了sqlserverjdbc - Simon Forsberg
是的,确实写错了,我按照你指出的修改了它,但不幸的是还是出现了同样的错误。 - C Sharper
@ShrimantBajiraoPeshawe-I,请更新您的问题,并添加更多代码以及您收到的详细异常信息。 - Simon Forsberg
@ShrimantBajiraoPeshawe-I 谢谢称呼我先生 :) 我已经更新了我的答案。 - Simon Forsberg
先生,我已经成功地建立了连接,并在我提供的链接中提到了步骤 :) 感谢您的支持 :) - C Sharper

1
该错误是“Multiple Dex File”错误,因此您可能已经多次添加了相同的jar文件,如您的屏幕截图所示,请查看“Buildpath Snap:”中的两个“sqljdbc.ja**r”,只保留一个(保留最新版本,删除其他版本),然后移动到“ORDER & EXPORT:”并选择大多数复选框。例如 Android support version 4。这将解决您的问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接