2015-05-19 86 views
0

我必须在我的android项目中上课,第一类是Main Activity,它是extend Activity,另一个类是MSSQLConnect,它是一个简单的类,用于从数据库获取数据并返回它作为数组列表如何从非活动接收信息到活动类

我用这个方法调用MSSQLConnect类,但它不工作:

MainActivity类别

public class MainActivity extends Activity { 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 


MSSQLConnect cdb = new MSSQLConnect("id", "mytable", "", ""); 
Toast.makeText(this, cdb.getdata("getApplicationContext()"), Toast.LENGTH_SHORT).show(); }} 

MSSQLConnect类:

public class MSSQLConnect extends ContextWrapper { 


private final String table; 
private final String columns; 
private final String whereColumn; 
private final String equalsEntry; 


public MSSQLConnect (Context context, String columns, String table, String whereColumn, String equalsEntry) { 
    super(context); 
    this.table = table; 
    this.columns = columns; 
    this.whereColumn = whereColumn; 
    this.equalsEntry = equalsEntry; 

} 

static String JDBC_DRIVER = "net.sourceforge.jtds.jdbc.Driver"; 
static String DB_URL ="jdbc:jtds:sqlserver://xxx.xxx.x.x:xxx;DatabaseName=xxxx"; 

// Database credentials 
static String USER = "xxxxx"; 
static String PASS = "xxxxx"; 

public ArrayList<ArrayList<String>> ourQuerryMethod() { 
    Connection conn = null; 
    Statement stmt = null; 

    String data[][] = null; 
    ArrayList<ArrayList<String>> setData = new ArrayList<ArrayList<String>>(); 
    try { 
     Class.forName(getJDBC_DRIVER()); 
     conn = DriverManager.getConnection(getDB_URL(), getUSER(), getPASS()); 
     stmt = conn.createStatement(); 
     String sql; 
     if(whereColumn.equals("") && equalsEntry.equals("")) 
     { 
      sql = "SELECT " + (columns) + " FROM " + (table); 
     } 
     else 
      sql = "SELECT " + (columns) + " FROM " + (table) + " WHERE "+ (whereColumn) +" = "+ (equalsEntry) +""; 

     ResultSet rs; 
     rs = stmt.executeQuery(sql); 

      int nc = 1; 
      ArrayList<String> columns = new ArrayList<String>(); 
      int rowCount =0; 
      while(rs.next()) // loop rows 
      { 

       rowCount++; 
       if(rowCount == 1) 
       { 
        while(true){ //loop columns 
         try { 
          columns.add(rs.getString(nc)); 
         } catch (Exception e) { 
          // TODO: handle exception 

          break; 
         } 
         nc++; 
        } 
       } 

       int rrowrr = 0; 
       for(int i=1;i<nc;i++) 
       { 
        rrowrr++; 
        if(rrowrr == 1) 
        { 
         setData.add(new ArrayList<String>()); 
        } 
        setData.get(rs.getRow()-1).add(rs.getString(i)); 
       } 

      } 
     rs.close(); 
    }catch (SQLException se) { 
     // Handle errors for JDBC 
     se.printStackTrace(); 
     Log.d("DBError1", se.getMessage()); 
    } catch (Exception e) { 
     // Handle errors for Class.forName 
     e.printStackTrace(); 
     Log.d("DBError2", e.getMessage()); 

    } finally { 
     // finally block used to close resources 
     try { 
      if (stmt != null) 
       conn.close(); 
     } catch (SQLException se) { 
      Log.d("DBError3", se.getMessage()); 

     } 
     try { 
      if (conn != null) 
       conn.close(); 
     } catch (SQLException se) { 
      se.printStackTrace(); 
      Log.d("DBError4", se.getMessage()); 

     } // end finally try 
    } // end try 
    return setData; 
} // end main 

public static String getJDBC_DRIVER() { 
    return JDBC_DRIVER; 
} 
public static void setJDBC_DRIVER(String aJDBC_DRIVER) { 
    JDBC_DRIVER = aJDBC_DRIVER; 
} 

public static String getDB_URL() { 
    return DB_URL; 
} 


public static void setDB_URL(String aDB_URL) { 
    DB_URL = aDB_URL; 
} 


public static String getUSER() { 
    return USER; 
} 

public static void setUSER(String aUSER) { 
    USER = aUSER; 
} 
public static String getPASS() { 
    return PASS; 
} 

public static void setPASS(String aPASS) { 
    PASS = aPASS; 
}} 

回答

0

使用此

public class MainActivity extends Activity { 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
MSSQLConnect connect=new MSSQLConnect(); 
ArrayList<String> list = new ArrayList<String>(); 
list=connect.ourQuerryMethod(); 

ConnectDB cdb = new ConnectDB("id", "mytable", "", ""); 
Toast.makeText(this, cdb.getdata("getApplicationContext()"), Toast.LENGTH_SHORT).show(); }} 
+0

MSSQLConnect类和ConnectDB类是相同的。 – user1139589

+0

然后使用上面的方法 –

+0

复制此代码并运行此 –

0

JDBC为Android ???你疯了吗?我建议你使用php页面进行sql查询并使用asynctask在json中解析它,但是如果你喜欢JDBC,我会问你几个问题,为什么MSSQLConnect类会重命名为ConnectDB?和MSSQLConnect生成器有5个参数,但你有4个参数创建对象?

+0

其实我试了很多使用c#但它不适合我,当我在java项目中使用JDBC它工作正常。 – user1139589

+0

好,但构造函数ispublic MSSQLConnect(上下文上下文,字符串列,字符串表,字符串whereColumn,字符串equalsEntry),并且您创建了具有4个元素的MSSQL对象...检查它并尝试 –