找不到类,虽然特定的jar在项目中加入(机器人到SQLSERVER没有web服务)找不到、人到、机器、项目

2023-09-12 06:44:13 作者:顾温存

我直接连接的android到SQLServer的 (我知道它不推荐)

以下code我写了:

 公共类MainActivity延伸活动{


     字符串DBNAME =AndroidDB;
     字符串SERVERIP =10.0.2.2;
     字符串serverport =1433;
     //字符串URL =的jdbc:SQLSERVER:// 14GRAFICALI \\ MSSQLSERVER2008; DATABASENAME =+数据库名+;
     //字符串URL =的jdbc:SQLSERVER:// 14GRAFICALI \\ MSSQLSERVER2008; DATABASENAME = AndroidDB; integratedSecurity =真;
     字符串URL ="jdbc:sqlserver://14GRAFICALI;instanceName=\\MSSQLSERVER2008;DatabaseName=AndroidDB;integratedSecurity=true";
    @覆盖
    保护无效的onCreate(包savedInstanceState){
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.activity_main);


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

        尝试 {
            的Class.forName(com.microsoft.sqlserver.jdbc.SQLServerDriver)的newInstance()。
            的Class.forName(javax.sql.XAConnection)的newInstance()。
            数Connection conn = DriverManager.getConnection就(URL);

            语句语句= conn.createStatement();
            结果集的ResultSet = Statement.executeQuery的(从UserMaster选择*);
            而(ResultSet.next时()){
                tvData.setText(数据1:+ resultSet.getString(1)+数据2:+ resultSet.getNString(2));
            }

        }赶上(例外五){
            e.printStackTrace();
            tvData.setText(e.getMessage());
        }



    }
 

在,我是不是有这样一行:

 的Class.forName(javax.sql.XAConnection)的newInstance()。
 

但它给我的异常就可以了:

  09-07 15:12:20.911:E / dalvikvm(1293):找不到类的javax.sql.XAConnection,从法com.microsoft.sqlserver.jdbc引用.SQLServerConnection.poolCloseEventNotify
 
怎么用java代码把已编辑好定制格式的Excel文档批量导入到sql server数据库中

因此​​,我导入包含该文件的JAR,并把它添加到库:

(jboss.jar)

导出:

这也是我收到错误后:

 抛出java.lang.ClassNotFoundException:javax.sql.XAConnection
 

我有这个类:

我不理解为什么这个错误是正在添加。请帮我。

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):在java.lang.Class.classForName(本机方法)
09-07 15:52:52.641:W / System.err的(330):在java.lang.Class.forName(Class.java:234)
09-07 15:52:52.641:W / System.err的(330):在java.lang.Class.forName(Class.java:181)
09-07 15:52:52.641:W / System.err的(330):在com.example.sqlservercall.MainActivity.onCreate(MainActivity.java:33)
09-07 15:52:52.641:W / System.err的(330):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
09-07 15:52:52.651:W / System.err的(330):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
09-07 15:52:52.651:W / System.err的(330):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
09-07 15:52:52.651:W / System.err的(330):在android.app.ActivityThread.access $ 1500(ActivityThread.java:117)
09-07 15:52:52.651:W / System.err的(330):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:931)
09-07 15:52:52.651:W / System.err的(330):在android.os.Handler.dispatchMessage(Handler.java:99)
09-07 15:52:52.651:W / System.err的(330):在android.os.Looper.loop(Looper.java:123)
09-07 15:52:52.651:W / System.err的(330):在android.app.ActivityThread.main(ActivityThread.java:3683)
09-07 15:52:52.651:W / System.err的(330):在java.lang.reflect.Method.invokeNative(本机方法)
09-07 15:52:52.651:W / System.err的(330):在java.lang.reflect.Method.invoke(Method.java:507)
09-07 15:52:52.651:W / System.err的(330):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:839)
09-07 15:52:52.651:W / System.err的(330):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
09-07 15:52:52.651:W / System.err的(330):在dalvik.system.NativeStart.main(本机方法)
09-07 15:52:52.651:W / System.err的(330):java.lang.NoClassDefFoundError的:产生的原因javax.sql.XAConnection
09-07 15:52:52.661:W / System.err的(330):17 ...更多
09-07 15:52:52.661:W / System.err的(330):抛出java.lang.ClassNotFoundException:产生的原因javax.sql.XAConnection装载机dalvik.system.PathClassLoader [/data/app/com.example.sqlservercall -2.apk]
09-07 15:52:52.661:W / System.err的(330):在dalvik.system.PathClassLoader.findClass(PathClassLoader.java:240)
09-07 15:52:52.661:W / System.err的(330):在java.lang.ClassLoader.loadClass(ClassLoader.java:551)
09-07 15:52:52.671:W / System.err的(330):在java.lang.ClassLoader.loadClass(ClassLoader.java:511)
09-07 15:52:52.671:W / System.err的(330):17 ...更多
09-07 15:52:52.861:I / ActivityManager(61):显示com.example.sqlservercall / .MainActivity:+ 1s503ms
09-07 15:53:00.081:W / ActivityManager(61):finishReceiver调用,但没有挂起广播
 

解决方案

我已经成功地完成了连接与JTDC的Andr​​oid到SQLServer的。

谁想建立的连接直接向SQLServer的与Android首先应该记住,这是不是在所有的安全方式。

我跟着

的步骤:

记住,JDBC创建SSL的问题,JTDC驱动程序都是开源的,安全的。因此,使用JTDC驱动程序。

在使用JTDC驱动程序,确保您正在使用它正确的版本。即JTDC驱动程序版本应该匹配或者confirtable与Java版本。我用 JTDS-1.2.5-DIST 你可以从净任何地方得到它。

粘贴Jar文件到libs文件夹。

转到Java构建路径(右键点击项目>属性)在库>添加Externl罐子。导入JAR文件。

为了和导出>检查JTDS罐子如下:

(你正在看的PIC其他罐子是没有用的)

6,您必须设置SQLServer的登录身份验证(Windows身份验证的SQLServer)截图如下:

7配置您的SQLServer如下:

请TCP / IP和VIA启用连接。

在TCP / IP属性中更改端口1433

8。然后,你将不得不作出的连接网址为:

  

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

9从这里可以简单地按照$ C $词给你:

 公共类gaConnection
{
字符串URL =;
数Connection conn = NULL;
语句语句= NULL;
结果集的ResultSet = NULL;
    公共无效setConnection(字符串数据库名,用户名字符串,字符串密码)
    {
        尝试 {
            的Class.forName(net.sourceforge.jtds.jdbc.Driver)的newInstance()。
            网址="jdbc:jtds:sqlserver://10.0.2.2:1433;instanceName=14GRAFICALI\\MSSQLSERVER2008;DatabaseName="+DBName+";integratedSecurity=true;user="+UserName+";password="+Password;
            康恩=的DriverManager.getConnection(URL);
            }赶上(例外五){
            e.printStackTrace();
            }
    }
    公共字符串showResult()
    {
        字符串strResult =;
        尝试
        {
            声明= conn.createStatement();
            结果集= Statement.executeQuery的(从UserMaster选择*);
            而(ResultSet.next时()){
               strResult = strResult +名称:+ resultSet.getString(1)+SirName:+ resultSet.getString(2)+\ N的;
            }
        }
        赶上(例外五){
            e.printStackTrace();
        }
        返回strResult;
    }

}
 

10我做了类连接和实例化,如下所示:

 公共类MainActivity延伸活动{

        @覆盖
        保护无效的onCreate(包savedInstanceState){
            super.onCreate(savedInstanceState);
            的setContentView(R.layout.activity_main);

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

            字符串数据库名=AndroidDB;
            字符串username =SA;
            字符串密码=确定;

            尝试{gaConnection CON =新gaConnection();
                con.setConnection(数据库名,用户名,密码);
                tvData.setText(con.showResult());
            }赶上(例外五){
                e.printStackTrace();
                tvData.setText(e.getMessage());
            }

        }

        @覆盖
        公共布尔onCreateOptionsMenu(功能菜单){
            //充气菜单;这增加了项目操作栏,如果它是present。
            。getMenuInflater()膨胀(R.menu.main,菜单);
            返回true;
        }

    }
 

I am connecting android to SQLServer directly (I know its not recomended)

I have written following code:

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



    }

Before that i was not having this line:

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

But it given me exception on it:

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

Hence i imported a jar containing this file and added it to libraries:

(jboss.jar)

Export:

After this also i am getting error:

java.lang.ClassNotFoundException: javax.sql.XAConnection

I have this class :

I am not understanding why this error is comming. Please help me.

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

解决方案

I have Sucessfully done the Connection with JTDC Android to SQLServer.

Whoever wants to make connection Direct to SQLServer with android should first remember that "This is not at all the secure way".

Steps I followed:

Remember, JDBC creates SSL problems, JTDC drivers are open source and secure. So use JTDC Drivers.

While using JTDC driver make sure that you are using it with proper version. i.e. JTDC drivers version should match or be confirtable with java version. I used jtds-1.2.5-dist you can get it from anywhere on net.

Paste Jar file to libs folder.

Go to Java Build Path (Right Click on project > Properties) In libraries > Add Externl jars. Import Jar file.

In Order And Export > Check on jtds jar as follows:

(other jars you are watching in pic are not useful)

6 You will have to set SQLServer Login Authentication (Windows Authentication for SQLServer) Screenshot as follows:

7 Configure your SQLServer as follows:

Make TCP/IP and VIA connection enabled.

In TCP/IP Properties Change The port to 1433

8 Then you will have to make Connection URL as:

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

9 From Here you can simply follow the code i give you:

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 I have made Class For Connection and instantiated it as follows:

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

    }