2016-04-27 50 views
0

嗨,大家好,我已经尝试了一些代码,但没有工作,我希望如果有人能帮助我。贝娄,我要把我的代码如何填充Android连接到SQL服务器的列表视图

AndroidManisfest:

<?xml version="1.0" encoding="utf-8"? 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.andre.marques.moldartsqlserver"> 
<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme"> 
    <activity android:name=".InicioActivity"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity android:name=".OrdemFabricoActivity"></activity> 
</application> 
</manifest> 

activity_ordemfabrico.xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:orientation="vertical" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 
<ListView 
    android:id="@+id/EnterPays_atomPaysList" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    tools:listitem="@layout/ofselect" 
    android:layout_below="@+id/layout_inf" > 
</ListView> 
</LinearLayout> 

ofselect.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="?android:listPreferredItemHeightSmall" 
android:orientation="horizontal" 
android:showDividers="middle" 
android:divider="?android:dividerVertical" 
android:dividerPadding="8dp" 
android:gravity="center"> 


<TextView android:id="@+id/Codart" 
    style="?android:textAppearanceMedium" 
    android:layout_width="0dp" 
    android:layout_weight="1" 
    android:layout_height="wrap_content" 
    android:paddingLeft="?android:listPreferredItemPaddingLeft" /> 

<TextView android:id="@+id/quantidade" 
    style="?android:textAppearanceMedium" 
    android:layout_width="0dp" 
    android:layout_weight="1" 
    android:layout_height="wrap_content" /> 
</LinearLayout> 

ConnectionClass:

public class ConnectionClass { 
String ip; 
String classs; 
String db; 
String un; 
String password; 
public ConnectionClass() { 
    classs = "net.sourceforge.jtds.jdbc.Driver"; 
    db = "DatabaseName"; 
    un = "user"; 
    password = "XXXXXXXX"; 
    ip = "192.xxx.x.xxx"; 
} 
public ConnectionClass(String Ip, String Classs, String Db, String Un, String Password) { 
    ip = Ip; 
    classs = Classs; 
    db = Db; 
    un = Un; 
    password = Password; 
} 
public String getip() { 
    return ip; 
} 
public String getclasss() { 
    return classs; 
} 
public String getdb() { 
    return db; 
} 
public String getun() { 
    return un; 
} 
public String getpassword() { 
    return password; 
} 
public void setip(String Ip) { 
    ip = Ip; 
} 
public void setdb(String Db) { 
    db = Db; 
} 
public void setclasss(String Classs) { 
    classs = Classs; 
} 
public void setun(String Un) { 
    un = Un; 
} 
public void setpassword(String Password) { 
    password = Password; 
} 
} 

OrdemFabricoActivity:

public class OrdemFabricoActivity extends Activity { 
ConnectionClass connectionclass; 
ListView lst; 
SimpleAdapter ADAhere; 
String usernameS; 
String datets; 
String call, db, un, passwords; 
Connection connect; 
ResultSet rs; 
@SuppressLint("NewApi") 
private Connection CONN(String _user, String _pass, String _DB, String _server) { 
    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
    StrictMode.setThreadPolicy(policy); 
    Connection conn = null; 
    String ConnURL = null; 
    try { 
     Class.forName("net.sourceforge.jtds.jdbc.Driver"); 
     ConnURL = "jdbc:jtds:sqlserver://" + _server + ";" + "databaseName=" + _DB + ";user=" + _user + ";password=" + _pass + ";"; 
     conn = DriverManager.getConnection(ConnURL); 
    } catch (SQLException se) { 
     Log.e("ERRO", se.getMessage()); 
    } catch (ClassNotFoundException e) { 
     Log.e("ERRO", e.getMessage()); 
    } catch (Exception e) { 
     Log.e("ERRO", e.getMessage()); 
    } 
    return conn; 
} 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_ordemfabrico); 
    lst = (ListView) findViewById(R.id.EnterPays_atomPaysList); 
    /************* CONNECTION DATABASE VARIABLES ***************/ 
    connectionclass = new ConnectionClass(); 
    call = connectionclass.getip(); 
    un = connectionclass.getun(); 
    passwords = connectionclass.getpassword(); 
    db = connectionclass.getdb(); 
    connect = CONN(un, passwords, db, call); 

    String querycmd = "select NUMOF, COD_ART, DESC_ART, OBSERVACOES, QUANT from tabof where tabof.ID_TO <> 5"; 
    try { 
     Statement statement = connect.createStatement(); 
     rs = statement.executeQuery(querycmd); 
     List<Map<String, String>> data = null; 
     data = new ArrayList<Map<String, String>>(); 
     while (rs.next()) { 
      Map<String, String> datanum = new HashMap<String, String>(); 
      datanum.put("A", rs.getString("COD_ART")); 
      //datanum.put("B", rs.getString("QUANT")); 
      data.add(datanum); 
     } 
     String[] fromwhere = { "A" }; 
     int[] viewswhere = { R.id.Codart }; 
     ADAhere = new SimpleAdapter(OrdemFabricoActivity.this, data, R.layout.ofselect, fromwhere, viewswhere); 
     lst.setAdapter(ADAhere); 
    } catch (SQLException e) { 
     Toast.makeText(OrdemFabricoActivity.this, e.getMessage().toString(), Toast.LENGTH_LONG).show(); 
    } 
} 
} 

这是我的代码,结果我这个代码把它当我去这个活动我的手机屏幕是黑色,并且没有发生。如果有人知道如何做到这一点,请帮助我,我想把Codart标签放入数据库的一些阵营的价值。

+0

你有网络电话吗? – Haroon

回答

0

我从您的代码中观察到,您尝试使用JDBC驱动程序连接数据库。 Android不支持JDBC。

但Oracle提供了用于android的JDBC驱动程序。

https://docs.oracle.com/cd/E17076_04/html/installation/build_android_jdbc.html

据甲骨文的文档,你必须有NDK的知识,建立和配置JDBC。我认为它的配置过程非常复杂。与SQLITE相比,JDBC非常慢,因为从sqlite数据库访问数据时不需要额外的服务器配置。

如果您的目的是将数据存储在本地数据库中,您必须首选SQLite3,它嵌入了android,快速访问并由Google推荐。它太容易使用。

您无法直接与sql server和android建立连接。如果你想在本地数据库中存储数据,然后想在listview中显示记录,可以使用sqlite。你可以使用下面的教程。

HOMEDATABASEAndroid SQLite Database Tutorial Android SQLite Database Tutorial

如果你真的要存储在SQL服务器数据,则必须使用客户端 - 服务器连接。创建Web服务以访问服务器中的数据,并在Android中使用它并填充列表视图。例如,PHP和MySQL。 Refer this tutorial

我认为它可以帮助你。

+0

但我在android中看到了几个关于JDBC的教程,我已经下载了这些lib,就像他们说我真的想像做他们一样使用JDBC –

+0

是的,您可能可以配置JDBC连接。它不被推荐。检查这个答案http://stackoverflow.com/questions/12233145/connecting-to-mysql-from-android-with-jdbc – USKMobility