2015-08-20 52 views
1

我試圖通過JDBC將數據從Android手機插入到SAP HANA實例(沒有HCP,它是物理的)。我正在通過AndroidStudio開發Android應用程序。我對Android應用程序開發和SAP HANA完全陌生。在Android上通過JDBC插入數據到SAP HANA

我發現我需要將ngdbc.jar驅動程序以某種方式導入到我的項目中。我通過將.jar模塊添加到我的項目中,將我的HANA工作室中的文件導入到我的AndroidStudio項目中。

當我嘗試運行應用程序,我得到以下錯誤消息:

08-20 15:34:17.306 21714-22168/com.iot.fb.sensor W/System.err﹕ java.lang.ClassNotFoundException: com.sap.db.jdbc.Driver 
08-20 15:34:17.329 21714-22168/com.iot.fb.sensor W/System.err﹕ at java.lang.Class.classForName(Native Method) 
08-20 15:34:17.329 21714-22168/com.iot.fb.sensor W/System.err﹕ at java.lang.Class.forName(Class.java:308) 
08-20 15:34:17.329 21714-22168/com.iot.fb.sensor W/System.err﹕ at java.lang.Class.forName(Class.java:272) 
08-20 15:34:17.329 21714-22168/com.iot.fb.sensor W/System.err﹕ at com.iot.fb.sensor.MainActivity.insert(MainActivity.java:84) 
08-20 15:34:17.329 21714-22168/com.iot.fb.sensor W/System.err﹕ at com.iot.fb.sensor.MainActivity$1.run(MainActivity.java:68) 
08-20 15:34:17.329 21714-22168/com.iot.fb.sensor W/System.err﹕ at java.lang.Thread.run(Thread.java:818) 
08-20 15:34:17.329 21714-22168/com.iot.fb.sensor W/System.err﹕ Caused by: java.lang.ClassNotFoundException: Didn't find class "com.sap.db.jdbc.Driver" on path: DexPathList[[zip file "/data/app/com.iot.fb.sensor-1/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]] 
08-20 15:34:17.329 21714-22168/com.iot.fb.sensor W/System.err﹕ at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56) 
08-20 15:34:17.330 21714-22168/com.iot.fb.sensor W/System.err﹕ at java.lang.ClassLoader.loadClass(ClassLoader.java:511) 
08-20 15:34:17.330 21714-22168/com.iot.fb.sensor W/System.err﹕ at java.lang.ClassLoader.loadClass(ClassLoader.java:469) 
08-20 15:34:17.330 21714-22168/com.iot.fb.sensor W/System.err﹕ ... 6 more 
08-20 15:34:17.330 21714-22168/com.iot.fb.sensor W/System.err﹕ Suppressed: java.lang.ClassNotFoundException: com.sap.db.jdbc.Driver 
08-20 15:34:17.330 21714-22168/com.iot.fb.sensor W/System.err﹕ at java.lang.Class.classForName(Native Method) 
08-20 15:34:17.330 21714-22168/com.iot.fb.sensor W/System.err﹕ at java.lang.BootClassLoader.findClass(ClassLoader.java:781) 
08-20 15:34:17.330 21714-22168/com.iot.fb.sensor W/System.err﹕ at java.lang.BootClassLoader.loadClass(ClassLoader.java:841) 
08-20 15:34:17.330 21714-22168/com.iot.fb.sensor W/System.err﹕ at java.lang.ClassLoader.loadClass(ClassLoader.java:504) 
08-20 15:34:17.330 21714-22168/com.iot.fb.sensor W/System.err﹕ ... 7 more 
08-20 15:34:17.330 21714-22168/com.iot.fb.sensor W/System.err﹕ Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available 
08-20 15:34:30.762 21714-21727/com.iot.fb.sensor W/art﹕ Suspending all threads took: 21.900ms 

我分配了一個按鈕startConnect()方法來創建運行insert()方法的線程。

public void startConnect(View v) { 
     new Thread(new Runnable() { 
      @Override 
      public void run() { 
       insert(); 
      } 
     }).start(); 
    } 

insert()方法,我在加載驅動程序,建立連接並插入我的數據:

protected void insert(){ 
     try{ 
      Class.forName("com.sap.db.jdbc.Driver"); 
      java.sql.Connection c = java.sql.DriverManager.getConnection("jdbc:sap://xxx.com:3xx15/HDB", "myUser", "myPassword"); 
      PreparedStatement st = c.prepareStatement("insert into \"MY_SCHEMA\".\"MY_TABLE\" values (?,?,?)"); 
      int time = (int) (System.currentTimeMillis()); 
      Timestamp tsTemp = new Timestamp(time); 
      st.setTimestamp(1, tsTemp);//TIMESTAMP YYYY-MM-DD HH:SS.FF3 
      st.setFloat(2, 33);//VALUE_A 
      st.setInt(3, 99);//VALUE_B 
      st.executeUpdate(); 
      st.close(); 
      c.close(); 


     } 
     catch (java.lang.ClassNotFoundException | SQLException | java.lang.ExceptionInInitializerError e){ 
      e.printStackTrace(); 
     } 
    } 

我想知道的是:

  • 我怎樣才能解決司機的問題?
  • 除了驅動程序問題,我的代碼是否正確關於** port **,my ** insert **到模式和表格語法中,並且以** HDB **結尾的URL(我偶然發現它)

預先感謝您

回答

0

該URL是不正確的,沒有。 請檢查HANA JDBC docu這樣的問題。

錯誤消息

Caused by: java.lang.ClassNotFoundException: Didn't find class com.sap.db.jdbc.Driver" on path: DexPathList[[zip file "/data/app/com.iot.fb.sensor-1/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]] 

似乎表明,JDBC驅動程序.jar甚至沒有看的JDBC驅動程序類搜索時。你確定你正確地導入它並將它包含到類路徑中嗎?

+0

謝謝拉爾斯的回覆。我不確定我是否正確導入了驅動程序。我嘗試了兩件事。我首先將ngdbc.jar添加到項目的libs文件夾中,並單擊「添加到庫」。這並沒有解決問題。然後,我將ngdbc.jar作爲一個.jar模塊導入。我還檢查了模塊設置 - >模塊「應用程序」 - >依賴項下是否存在該模塊的依賴關係。我確實存在。這是我對「2.將ngdbc.jar添加到你的類路徑」的理解。也許我錯了。我如何正確地將這個ngdbc.jar添加到我的類路徑中? – Incanus

+0

對不起,沒有關於Android開發的想法。我甚至不知道JDK是否完全符合標準。也許API的某些部分尚未被移植? - 對不起,這都是猜測! –

+0

我不確定有關android的問題,但我也在我的web應用程序中遇到了這個問題,當我添加一個jar時,我必須將JAR安裝到我的本地Maven存儲庫中並工作。是否有類似於android的此類內容? –