3

我在 Android 中进行 SqlServer 连接。

我包含了所有必要的 jar 文件。

在此处输入图像描述

构建路径快照:

在此处输入图像描述

错误行:

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

订购和出口:

在此处输入图像描述

编辑

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;
    }

}

异常详细:

在此处输入图像描述

按顺序检查罐子并导出后的新错误:

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;
4

3 回答 3

1

从我从您的屏幕截图中可以看到,您应该替换:

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

和 :

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver")
于 2013-09-06T12:25:17.813 回答
1

确保这些库位于“Android Private Libraries”中,并在Order and Export选项卡中添加“Android Private Libraries”。

将库放在libs目录中就足够了,您不需要将它们添加到构建路径,因为libs目录中的所有文件都会自动添加到构建路径(通过“Android Private Libraries”)。

我也相信您正在尝试实例化错误的类,请尝试使用类名com.microsoft.sqlserver.jdbc.SQLServerDriver(我在您的屏幕截图中注意到真正的包名是com.microsoft.sqlserver.jdbc不是 com.microsoft.jdbc.sqlserver

编辑:(更新后的更新答案)

我假设 sqljdbc.jar 和 sqljdbc4.jar 都包含相同的类,如果是这种情况,您只能在项目中包含其中一个。

于 2013-09-06T12:13:11.963 回答
1

错误是“多个 Dex 文件”,因此您必须根据屏幕截图多次添加相同的 jar,请参阅Buildpath Snap: 有两个sqljdbc.ja**r。只保留一个(保留最新的,删除其他的)然后移动到 **ORDER & EXPORT:并选择几乎所有复选框。像 Android 也支持第 4 版。它会解决你的问题..

于 2013-09-06T13:01:01.533 回答