Android SQLite/从column=ANYTHING的表中选择行

Android SQLite/从column=ANYTHING的表中选择行,android,sql,sqlite,select,android-sqlite,Android,Sql,Sqlite,Select,Android Sqlite,在Android SQLite中,我有一个表:table\u VALUES\u ALL Loan_No text primary key, agreement_date date, branch_name text, loan_status text, address1 text, address2 text, status_type integer, user_id integer 并考虑以下SQLite查询: "SELECT COUNT(Loan_No) FROM " + TABLE_AG

在Android SQLite中,我有一个表:
table\u VALUES\u ALL

Loan_No text primary key,
agreement_date date,
branch_name text,
loan_status text,
address1 text,
address2 text,
status_type integer,
user_id integer

并考虑以下SQLite查询:

"SELECT COUNT(Loan_No) FROM " + TABLE_AGEING_VALUES_ALL + " WHERE user_id = \"" + user_id + "\" AND Loan_No = \"" + Loan_No + "\" AND status_type = " + status_type
当我想要
status\u type
variable=ANYTHING时,我可以简单地调用:

"SELECT COUNT(Loan_No) FROM " + TABLE_AGEING_VALUES_ALL + " WHERE user_id = \"" + user_id + "\" AND Loan_No = \"" + Loan_No + "\""
但是,由于我将值从Java函数调用传递给
status\u type
变量,所以我不能像那样简单地删除该列

那么,当我想要
status\u type
variable=any时,从Java函数调用向
status\u type
变量传递值的最有效方法是什么

比如说,

"SELECT COUNT(Loan_No) FROM " + TABLE_AGEING_VALUES_ALL + " WHERE user_id = \"" + user_id + "\" AND Loan_No = \"" + Loan_No + "\" AND status_type = *"
根本不行

我已经在Stack Overflow中找到了最相关、最恰当的解决方案:

我得到了这样的东西,比如:

"SELECT COUNT(Loan_No) FROM " + TABLE_AGEING_VALUES_ALL + " WHERE user_id = \"" + user_id + "\" AND Loan_No = \"" + Loan_No + "\" AND status_type = status_type"
但是,为了解决这个问题,有没有足够具体的解决方案


我同意
“status\u type=status\u type”
将始终返回
1
,只要它是任何给定的变量,但当它们已经是同一列的任意给定两个足够不同的值时,它也会这样做吗?

如果您想要获取所有status\u type,则无需在查询中指定它

查询将被删除


< P> >从“+TabLEAGEAGIN值VALU+”中选择计数(LooNoNO),其中USER ID=\“+ + UrthId+ +”和“LooIn NO=”\“+ LoangIn NO./P>< P>。
public String buildGetLoadCountSQL(Integer userid, String loan_no, Integer status_type) {

    String whereclause = "";
    if(userid != null) {
        whereclause = whereclause + " user_id=" + String.valueOf(userid);
    }
    if (loan_no != null && loan_no.length() > 0) {
        if (whereclause.length() > 0) {
            whereclause = whereclause + " AND ";
        }
        whereclause = whereclause + " Loan_No=?'" + loan_no + "' ";
    }
    if (status_type != null) {
        if (whereclause.length() > 0) {
            whereclause = whereclause + " AND ";
        }
        whereclause = whereclause + " status_type=" + String.valueOf(status_type);
    }
    if (whereclause.length() > 1) {
        whereclause = " WHERE " + whereclause;
    }
    return "SELECT COUNT(Loan_No) FROM " + TABLE_AGEING_VALUES_ALL + whereclause;
}
这样,您可以通过在其位置指定null来忽略任何值

比如说

    buildGetLoadCountSQL(null,null,null);
返回(所有行):-

返回(最具选择性):-

返回(您想从问题中得到什么):-

  • 注意这是原则性代码,尚未测试,因此可能包含小错误

如果您正在寻找使用相同SQL命令文本执行两种类型查询的方法,则可以使用如下查询:

stringsql=
“从表_账龄_值_全部中选择计数(贷款_编号)”
+“其中用户_id=?”?"
+“和(1=?或状态类型=?)”;
PreparedStatement ps=conn.prepareStatement(sql);
然后,为了匹配特定的状态类型,您可以使用

//查询用户\u id=1和特定状态\u类型
ps.setInt(1,1);//user_id=1
ps.setInt(2,0);//0表示“特定状态类型”
ps.setInt(3,2);//status_type=2
结果集rs=ps.executeQuery();
对于匹配任何status_类型值的查询,您可以使用

//查询用户\u id=1和任何状态\u类型
ps.setInt(1,1);//user_id=1
ps.setInt(2,1);//1表示“任何状态类型”
ps.setInt(3,0);/(忽略此参数)
结果集rs=ps.executeQuery();

您想选择状态类型不为空的位置,对吗?是的,只要
状态类型
变量也不为空,您就可以回答如何选择。在我的实际情况中,
状态类型
变量可以从3个不同值中的1个取值,-1个为挂起片段,1个为计划片段,3个为完成片段。对于所有片段,状态类型可以是我上面提到的3个不同值中的任意值。我可以从“+表\u老化\u值\u All+”中选择计数(贷款编号),其中用户id=\”“+用户id+”\“和贷款编号=\”“+贷款编号+”\”和(状态类型=-1或状态类型=1或状态类型=3)“也是。但是,无论什么情况,只要对
status\u type
的所有可能值有很多不同的选择,或者有无限多的值,您都可以检查
和status\u type NOT NULL
我已经提到,我正在从Java将值传递给
status\u type
变量函数,所以这个解决方案根本不起作用。通过使用不同的工具和技术。或者-或者通过使用相同的或者-或者-然后不同的方式和方法-技术与工具。或者给玩家的适当信息必须然后应该发布在适当的游戏中-只玩游戏的移动-或者每个然后每个-只有to-enough-只有to-enough-只有to-enough。或者然后通过使用相同的然后不同的或者方式然后方法-或者工具然后技术,或者…或者给玩家的适当信息必须然后应该只发布在适当的游戏上-玩游戏的动作-或者每一个然后每一个-只有to-enough-只有to-enough。确实,如果
“status\u type=status\u type”
由于某种原因根本不起作用,而不像
“1=1”
,那么使用
“1=”或status\u type=?“
这样做是一个好主意,类似于SQLite代码注入。它需要2个参数,而不是1个参数,但是只要我们想要
status\u type
variable=某个特定值,我们就可以像这样传递,比如:
“1=0或status\u type=?”
,对于
状态类型
变量:?,有一些特定的给定值。另一方面,只要我们想要
状态类型
变量=任何东西,我们就可以像这样传递,比如:
“1=1或状态类型=?”
,对于
status\u type
变量的任何给定值:?。顺便说一句,我不是为了使用
ps.setInt(1,1);//user_id=1
ps.setInt(2,0);//0表示“特定状态类型”
ps.setInt(3,2);//状态类型=2
。或
ps.setInt(1,1);//user_id=1
ps.setInt(2,1);//1表示“任何状态类型”
ps.setInt(3,0);//(忽略此参数)
。我正在将值传递给可能的Java函数中提供的不同变量
    SELECT COUNT(Loan_No) FROM your_table
    buildGetLoadCountSQL(10,"0123456789",10);
    SELECT COUNT(Loan_No) FROM your_table WHERE userid=10 AND Loan_No= '0123456789' AND status_type=10
    buildGetLoadCountSQL(10,"0123456789",null);
    SELECT COUNT(Loan_No) FROM your_table WHERE userid=10 AND Loan_No= '0123456789'