android jdbc连接 sqlserver 不通过 webservice

2015-1-19 9:35:15     人阅读    

我现在想直接通过android连接 SQLServer
于是我写了下面的代码

public class MainActivity extends Activity {




     String dbName = "AndroidDB";
 
     String serverip="10.0.2.2";
 
     String serverport="1433";
 
     //String url = "jdbc:sqlserver://14GRAFICALI\\MSSQLSERVER2008;databaseName="+dbName+"";
 
     //String url ="jdbc:sqlserver://14GRAFICALI\\MSSQLSERVER2008;databaseName=AndroidDB;integratedSecurity=true";
 
     String url ="jdbc:sqlserver://14GRAFICALI;instanceName=\\MSSQLSERVER2008;DatabaseName=AndroidDB;integratedSecurity=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();
 
            Class.forName("javax.sql.XAConnection").newInstance();
 
            Connection conn =DriverManager.getConnection(url);                   



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



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





    }


在此之前我没写下面的代码

Class.forName("javax.sql.XAConnection").newInstance();


运行报错如下异常

09-07 15:12:20.911: E/dalvikvm(1293): Could not find class 'javax.sql.XAConnection', referenced from method com.microsoft.sqlserver.jdbc.SQLServerConnection.poolCloseEventNotify

 

然后叫我导入了jar,并加入到了 libraries

(jboss.jar)
Export:

配置了上面的jar后在运行还是报错
java.lang.ClassNotFoundException: javax.sql.XAConnection


我的项目中有这个jar和class

我现在不知道是什么原因?
LogCat:

09-07 15:52:52.641: W/System.err(330): java.lang.ClassNotFoundException: javax.sql.XAConnection
09-07 15:52:52.641: W/System.err(330):  at java.lang.Class.classForName(Native Method)
09-07 15:52:52.641: W/System.err(330):  at java.lang.Class.forName(Class.java:234)
09-07 15:52:52.641: W/System.err(330):  at java.lang.Class.forName(Class.java:181)
09-07 15:52:52.641: W/System.err(330):  at com.example.sqlservercall.MainActivity.onCreate(MainActivity.java:33)
09-07 15:52:52.641: W/System.err(330):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
09-07 15:52:52.651: W/System.err(330):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
09-07 15:52:52.651: W/System.err(330):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
09-07 15:52:52.651: W/System.err(330):  at android.app.ActivityThread.access$1500(ActivityThread.java:117)
09-07 15:52:52.651: W/System.err(330):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
09-07 15:52:52.651: W/System.err(330):  at android.os.Handler.dispatchMessage(Handler.java:99)
09-07 15:52:52.651: W/System.err(330):  at android.os.Looper.loop(Looper.java:123)
09-07 15:52:52.651: W/System.err(330):  at android.app.ActivityThread.main(ActivityThread.java:3683)
09-07 15:52:52.651: W/System.err(330):  at java.lang.reflect.Method.invokeNative(Native Method)
09-07 15:52:52.651: W/System.err(330):  at java.lang.reflect.Method.invoke(Method.java:507)
09-07 15:52:52.651: W/System.err(330):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
09-07 15:52:52.651: W/System.err(330):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
09-07 15:52:52.651: W/System.err(330):  at dalvik.system.NativeStart.main(Native Method)
09-07 15:52:52.651: W/System.err(330): Caused by: java.lang.NoClassDefFoundError: javax.sql.XAConnection
09-07 15:52:52.661: W/System.err(330):  ... 17 more
09-07 15:52:52.661: W/System.err(330): Caused by: java.lang.ClassNotFoundException: javax.sql.XAConnection in loader dalvik.system.PathClassLoader[/data/app/com.example.sqlservercall-2.apk]
09-07 15:52:52.661: W/System.err(330):  at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:240)
09-07 15:52:52.661: W/System.err(330):  at java.lang.ClassLoader.loadClass(ClassLoader.java:551)
09-07 15:52:52.671: W/System.err(330):  at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
09-07 15:52:52.671: W/System.err(330):  ... 17 more
09-07 15:52:52.861: I/ActivityManager(61): Displayed com.example.sqlservercall/.MainActivity: +1s503ms
09-07 15:53:00.081: W/ActivityManager(61): finishReceiver called but no pending broadcasts

处理方法

我已经在android中成功的直接连接到 SQLServer.


需要通过如下几个步骤 连接到SQLServer
Steps I followed:


JDBC创建SSL问题,JTDC驱动是开源和安全的,所以要是用JTDC 驱动


确保是用了正确的JTDC驱动版本,我使用的是 jtds-1.2.5-dist

把相应的jar粘贴到项目lib木块

把jar包加入到classpath中

在In Order And Export > 检查jtds jar


6 设置 SQLServer Login Authentication (Windows Authentication for SQLServer)

7 通过如下的方式配置 SQLServer、
Make TCP/IP and VIA connection enabled.

In TCP/IP Properties Change The port to 1433

8 通过如下代码进行连接
url="jdbc:jtds:sqlserver://10.0.2.2:1433;instanceName=14GRAFICALI\MSSQLSERVER2008;DatabaseName="+DBName+";integratedSecurity=true;user="+UserName+";password="+Password;
9 下面是链接的完整代码

public class gaConnection 
{
{

String url ="";

Connection conn=null;

Statement statement=null;

ResultSet resultSet=null;

public void setConnection(String DBName,String UserName,String Password)

{

try {

Class.forName("net.sourceforge.jtds.jdbc.Driver").newInstance();

url ="jdbc:jtds:sqlserver://10.0.2.2:1433;instanceName=14GRAFICALI\\MSSQLSERVER2008;DatabaseName="+DBName+";integratedSecurity=true;user="+UserName+";password="+Password;

conn =DriverManager.getConnection(url);

} catch (Exception e) {

e.printStackTrace();

}

}

public String showResult()

{

String strResult="";

try

{

statement=conn.createStatement();

resultSet=statement.executeQuery("select * from UserMaster");

while(resultSet.next()){

strResult = strResult + " Name : "+resultSet.getString(1)+" SirName : "+resultSet.getString(2) + "\n";

}

}

catch (Exception e) {

e.printStackTrace();

}

return strResult;

}


}
}


10 最后是完整的界面MainActivity

public class MainActivity extends Activity {


@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);


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


String DBName="AndroidDB";

String UserName="sa";

String Password="ok";


try {gaConnection con=new gaConnection();

con.setConnection(DBName,UserName,Password);

tvData.setText(con.showResult());

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

}


}


原文地址:http://www.itmmd.com/201501/516.html
该文章由 萌萌的IT人 整理发布,转载须标明出处。

android : java.lang.NoClassDefFoundError: com.google.android.gms.R$styleable   上一篇
下一篇  Google Geocoder service无效-google Geocoder 无法获得地址.
精彩回复
我要追加问题,请求站长解决!
姓名:       

《程序员app》专门为程序员量身定做!