好的,我只是按照一条指令,我应该这样做从数据库中检索sql数据,但它只是切到那里,到目前为止我在databasehelper类中有这个。
public void getIconResource(String tblName)
{
SQLiteDatabase db = this.getReadableDatabase();
String getresource = "Select * from " + tblName;
Cursor cursor = db.rawQuery(getresource,null); //null for conditions
if(cursor.moveToFirst())
{
do
{
int resource = cursor.getInt(3);
}
while (cursor.moveToNext());
}
db.close();
}
所以不知何故,这样做是否得到了我的表第4列的所有值,其中包含一个int ...如何检索MainActivity中的值并将其保存在整数数组中?
答案 0 :(得分:0)
好吧,就像你拥有它一样,变量resource
仅限于while
循环。即使它不会在每次循环迭代中不断被覆盖。
相反,您应该在Add
循环期间向其中声明一个更高的集合并while
每个值。如果是整数,您还可以重新定义函数以返回集合。
public List<int> getIconResource(String tblName)
{
SQLiteDatabase db = this.getReadableDatabase();
List<int> myVals = new List<int>();
String getresource = "Select * from " + tblName;
Cursor cursor = db.rawQuery(getresource, null); //null for conditions
if (cursor.moveToFirst())
{
do
{
myVals.Add(cursor.getInt(3));
}
while (cursor.moveToNext());
}
db.close();
return myVals;
}
另外,作为注释... SQL查询的字符串连接是一个灾难的处方。查找SQL注入和最佳实践,以便在继续之前避免它。值得花时间在早期养成良好的习惯。
编辑/附录
除非您还限制从表查询返回的结果集,否则您将获得每条记录。你在这里的功能确实没有实际用途,可能会产生比它可能带来的任何好处更多的问题。我建议,作为更有用的函数的示例,它基于IconResource
返回特定的IconId
:
public int getIconResource(int iconId)
{
SQLiteDatabase db = this.getReadableDatabase();
String getresource = "select IconResource from IconTable where IconId = ?";
PreparedStatement pstmnt = db.prepareStatement(getresource);
pstrmnt.setString(1, iconId);
ResultSet rset = db.executeQuery();
int iconResource;
if (rset.next())
iconResource = rset.getInt("IconResource");
db.close();
return iconResource;
}
当然,以上是对表结构的假设。
使用上面的代码,在其他地方的代码中,您只需使用IconId
调用此函数并使用所需的输出:
int iconResource = getIconResource(5); // returns the IconResource for IconId = 5
上面通过使用参数化查询并避免使用发送到SQL服务器的动态连接字符串来防止任何可能的SQL注入攻击。
答案 1 :(得分:0)
您可以尝试以下代码:
public List<Integer> getIconResource(String tblName)
{
List<Integer> list = new ArrayList<Integer>();
list.clear();
SQLiteDatabase db = this.getReadableDatabase();
String getresource = "Select * from " + tblName;
Cursor cursor = db.rawQuery(getresource,null); //null for conditions
if(cursor.moveToFirst())
{
do
{
int resource = cursor.getInt(3);
list.add(resource);
}
while (cursor.moveToNext());
}
db.close();
return list;
}
然后在MainActivity中调用此方法并将List存储在另一个Integer类型列表中。
databasehelper dbhelper;
List<Integer> newList = dbhelper.getIconResource("Your tablename");
fot(int i = 0 ; i< newList.size() ; i++){
int yourValue = newList(i);
}
答案 2 :(得分:0)
只需在ArrayList中添加所有内容并返回arraylist
只需在主要活动中调用该方法
public ArrayList<Integer> getIconResource(String tblName)
{
SQLiteDatabase db = this.getReadableDatabase();
String getresource = "Select * from " + tblName;
Cursor cursor = db.rawQuery(getresource,null); //null for conditions
ArrayList data = new ArrayList&lt;&gt;();
if(cursor.moveToFirst())
{
do
{
int resource = cursor.getInt(3);
data.add(resource);
}
while (cursor.moveToNext());
}
db.close();
}
返回数据; }