2012-12-10 125 views
2

我得到了一个sqlite数据库,我想要检索特定数据列并将其存储到字符串数组中。数据库内有两列。将有多行数据具有相同的用户名,我想要检索用户的“ContentPath”并将其存储到字符串数组中。但我不知道如何检索特定的列数据...检索数据的特定列并将其存储在字符串数组中

public String[] get_contentByEmailID(String emailid){ 
    String[] returnMsg = null; 
    helper = this.getReadableDatabase(); 

    Cursor c = helper.rawQuery("SELECT tableid, emailid, contentpath" + 
      " from w_content where emailid='"+emailid"' ", null); 



    int contentpathColumn = c.getColumnIndex("contentpath"); 


    if (c.moveToFirst()) { 
     do { 
      returnMsg = new String[2]; 

      String contentpath = c.getString(contentpathColumn); 

      returnMsg[0] = emailid_sync; 

      returnMsg[1] = contentpath; 


     } while (c.moveToNext()); 
    } 
    if (c != null && !c.isClosed()) { 
     c.close(); 
    } 
    if (helper!=null){ 
     helper.close(); 
    }; 
    return returnMsg; 
} 

当我调用这个函数来检索数据。它带有emailid和contentpath。

String values[] = helper.get_contentByEmailID(SettingConstant.EMAIL); 

任何意见将不胜感激。

回答

1

您将数组填入emailid和contentpath的原因是,因为您总是在每一行上重置returnMsg并将其填入此值。由于会有不同的行数,因此通常建议您使用ArrayList,而不是构建静态长度数组。

为了解决这个问题,更改:

String[] returnMsg = null; 

到:

ArrayList<String> returnMsg = new ArrayList<String>(); 

,然后在你的do{},做这样的事情:

do { 
    String contentpath = c.getString(contentpathColumn); 
    returnMsg.add(contentpath); 
} while (c.moveToNext()); 

最后,改变你的回报声明:

return returnMsg.toArray(); 
+0

谢谢!有效。这是一个很好的解决方案。 –

+0

我还有一个问题。最后,我的函数变成了public Object [] get_content(String emailid)。 Object []与普通数组有什么不同? –

+0

'Object []'表示它是一个Object数组。 '[]'意味着数组。所以,String []表示一个String数组等等。请阅读此处了解更多信息:http://docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html | Object是Java中所有对象的父代。 – ariefbayu

相关问题