Android 如何在sqlite的原始查询中使用交叉连接

Android 如何在sqlite的原始查询中使用交叉连接,android,sqlite,Android,Sqlite,我在谷歌上搜索过,发现我也可以在SQlite Android中进行交叉连接,我尝试过,但结果是空的。我的程序有问题吗?或者实际上不能在原始查询中应用交叉联接?谢谢你的帮助 注意:在使用交叉联接之前,我尝试发送一个表(以JSONArray形式),并且它正在工作,所以我假设在代码中使用交叉联接时会发生这种情况 以下是我的节目: private JSONArray getResults() { Context context = this; String myPath = Strin

我在谷歌上搜索过,发现我也可以在SQlite Android中进行交叉连接,我尝试过,但结果是空的。我的程序有问题吗?或者实际上不能在原始查询中应用交叉联接?谢谢你的帮助

注意:在使用交叉联接之前,我尝试发送一个表(以JSONArray形式),并且它正在工作,所以我假设在代码中使用交叉联接时会发生这种情况

以下是我的节目:

private JSONArray getResults()
{
    Context context = this;

    String myPath = String.valueOf(context.getDatabasePath("ekantin1.db"));// Set path to your database

    //String myTable = DatabaseHelper.ORDER_TABLE_NAME;//Set name of your table

    SQLiteDatabase myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
    //String searchQuery = "SELECT  * FROM " + myTable;
    Cursor cursor = myDataBase.rawQuery(" SELECT * FROM " + DatabaseHelper.ORDER_TABLE_NAME + " CROSS JOIN " + DatabaseHelper.LINEITEMS_TABLE_NAME, null );

    JSONArray resultSet     = new JSONArray();

    cursor.moveToFirst();
    while (cursor.isAfterLast() == false) {

        int totalColumn = cursor.getColumnCount();
        JSONObject rowObject = new JSONObject();

        for( int i=0 ;  i< totalColumn ; i++ )
        {
            if( cursor.getColumnName(i) != null )
            {
                try
                {
                    if( cursor.getString(i) != null )
                    {
                        Log.d("TAG_NAME", cursor.getString(i) );
                        rowObject.put(cursor.getColumnName(i) ,  cursor.getString(i) );
                    }
                    else
                    {
                        rowObject.put( cursor.getColumnName(i) ,  "" );
                    }
                }
                catch( Exception e )
                {
                    Log.d("TAG_NAME", e.getMessage()  );
                }
            }
        }
        resultSet.put(rowObject);
        cursor.moveToNext();
    }
    cursor.close();
    Log.d("TAG_NAME", resultSet.toString() );


    Intent pass_data = new Intent(this,BluetoothOut.class);

    pass_data.putExtra("pindah",resultSet.toString());
    startActivity(pass_data);

    return resultSet;
}
}
我的程序有问题吗

仅仅看一眼就看不出来

或者实际上不能在原始查询中应用交叉联接

我认为没有这样的限制

我认为问题在于tb\u lineitems表中没有行。因此,
SELECT*FROM tb_order
将返回行。但是,当您加入tb_lineitems表时,不会返回任何已加入的行

例如,使用(注意注释SQL时如何不插入任何行项目):-

结果如下3个输出:-

从3个tb_行项目的插入中删除注释,结果如下:-

  • 请注意,交叉联接的结果与联接的结果没有什么不同,如下所示:-

  • 如果联接运算符为“交叉联接”、“内部联接”、“联接”或逗号 (“,”)并且没有ON或USING子句,则连接的结果 只是左右手数据集的笛卡尔乘积

再次评论:-
我已经检查了数据库,tb_行项目和tb_顺序不正确 空的

您检查了哪个数据库?根据对代码的仔细检查,您正在尝试使用2。

在数据库帮助程序中,您已将数据库定义为ekantins.db。但是,您可以在
getResults
方法中打开名为ekanti1.db的数据库

在下文中,请注意以下代码:-

    //String myPath = String.valueOf(context.getDatabasePath("ekantin1.db"));// Set path to your database
    String myPath = String.valueOf(context.getDatabasePath("ekantins.db"));// Set path to your database
运行对代码的轻微修改,并且仅使用1个数据库

  • 添加到数据库帮助器的两个方法,用于添加订单和行项目(不包括)
  • 以下代码被用作活动(即您的代码+多一点)
    • 尝试启动另一个活动已被注释掉
    • getResults
      方法被调用两次,即在有任何数据之前和之后
:-

public类MainActivity扩展了AppCompatActivity{
数据库助手mDBHlpr;
光标;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mDBHlpr=新数据库助手(此);
JSONArray r1=getResults();
String sql=“SELECT*FROM”+DatabaseHelper.ORDER\u TABLE\u NAME+“交叉连接”+DatabaseHelper.LINEITEMS\u TABLE\u NAME;
cursor=mDBHlpr.getWritableDatabase().rawQuery(sql,null);
DatabaseUtils.dumpCursor(cursor);
//只添加一次数据
if(DatabaseUtils.queryNumEntries(mDBHlpr.getwriteabledatabase(),DatabaseHelper.ORDER\u TABLE\u NAME)<1){
mDBHlpr.addOrder(“Fred”、“密码”、“m001”、“t001”、“s001”);
mDBHlpr.addOrder(“玛丽”、“密码”、“m001”、“t001”、“s001”);
mDBHlpr.addOrder(“Bert”、“密码”、“m001”、“t001”、“s001”);
cursor=mDBHlpr.getWritableDatabase().rawQuery(sql,null);
DatabaseUtils.dumpCursor(cursor);
mDBHlpr.addLineItem(“F001”、“10.30”、“1”、“1”和“1”);
mDBHlpr.addLineItem(“F002”、“11.30”、“2”、“2”和“1”);
mDBHlpr.addLineItem(“F003”、“12.30”、“3”、“3”和“2”);
cursor=mDBHlpr.getWritableDatabase().rawQuery(sql,null);
DatabaseUtils.dumpCursor(cursor);
}
JSONArray r2=getResults();
}
私有JSONArray getResults()
{
上下文=这个;
//String myPath=String.valueOf(context.getDatabasePath(“ekanti1.db”);//设置数据库的路径
String myPath=String.valueOf(context.getDatabasePath(“ekantis.db”);//设置数据库的路径
String myTable=DatabaseHelper.ORDER\u TABLE\u NAME;//设置表的名称
SQLiteDatabase myDataBase=SQLiteDatabase.openDatabase(myPath,null,SQLiteDatabase.OPEN\u READONLY);
//SQLiteDatabase myDataBase=mDBHlpr.getWritableDatabase();
//String searchQuery=“SELECT*FROM”+myTable;
Cursor Cursor=myDataBase.rawQuery(“选择*自”+DatabaseHelper.ORDER\u TABLE\u NAME+“交叉连接”+DatabaseHelper.LINEITEMS\u TABLE\u NAME,null);
JSONArray resultSet=新的JSONArray();
cursor.moveToFirst();
while(cursor.isAfterLast()==false){
int totalColumn=cursor.getColumnCount();
JSONObject rowObject=新的JSONObject();
对于(int i=0;iDROP TABLE IF EXISTS tb_order;
CREATE TABLE IF NOT EXISTS tb_order (ORDERID  INTEGER PRIMARY KEY AUTOINCREMENT,USERID TEXT ,PASSWORD TEXT, MEJA TEXT, TOPUP TEXT, SALDO TEXT);
DROP TABLE IF EXISTS tb_lineitems;
CREATE TABLE IF NOT EXISTS tb_lineitems (FOODID TEXT ,PRICE TEXT, NUM TEXT, RES TEXT, ORDERID_FK INTEGER);
INSERT INTO tb_order VALUES
    (null,'Fred','password','meja001','topup001','saldo001'),
    (null,'Mary','password','meja002','topup002','saldo002'),
    (null,'Bert','password','meja003','topup003','saldo003');
/*
INSERT INTO tb_lineitems VALUES
    ('food001','10.30','1','res001',1),
    ('food002','11.30','1','res002',1),
    ('food002','11.30','1','res002',2)
    ;
*/
SELECT * FROM tb_order;
SELECT * FROM tb_lineitems;
SELECT * FROM tb_order 
      CROSS 
JOIN tb_lineitems 
;
    //String myPath = String.valueOf(context.getDatabasePath("ekantin1.db"));// Set path to your database
    String myPath = String.valueOf(context.getDatabasePath("ekantins.db"));// Set path to your database
public class MainActivity extends AppCompatActivity {

    DatabaseHelper mDBHlpr;
    Cursor cursor;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        mDBHlpr = new DatabaseHelper(this);
        JSONArray r1 = getResults();

        String sql = " SELECT * FROM " + DatabaseHelper.ORDER_TABLE_NAME + " CROSS JOIN " + DatabaseHelper.LINEITEMS_TABLE_NAME;


        cursor = mDBHlpr.getWritableDatabase().rawQuery(sql, null );
        DatabaseUtils.dumpCursor(cursor);

        // Only add data once
        if (DatabaseUtils.queryNumEntries(mDBHlpr.getWritableDatabase(),DatabaseHelper.ORDER_TABLE_NAME) < 1) {

            mDBHlpr.addOrder("Fred", "password", "m001", "t001", "s001");
            mDBHlpr.addOrder("Mary", "password", "m001", "t001", "s001");
            mDBHlpr.addOrder("Bert", "password", "m001", "t001", "s001");

            cursor = mDBHlpr.getWritableDatabase().rawQuery(sql, null);
            DatabaseUtils.dumpCursor(cursor);

            mDBHlpr.addLineItem("F001", "10.30", "1", "1", 1);
            mDBHlpr.addLineItem("F002", "11.30", "2", "2", 1);
            mDBHlpr.addLineItem("F003", "12.30", "3", "3", 2);

            cursor = mDBHlpr.getWritableDatabase().rawQuery(sql, null);
            DatabaseUtils.dumpCursor(cursor);
        }

        JSONArray r2 = getResults();
    }

    private JSONArray getResults()
    {
        Context context = this;

        //String myPath = String.valueOf(context.getDatabasePath("ekantin1.db"));// Set path to your database

        String myPath = String.valueOf(context.getDatabasePath("ekantins.db"));// Set path to your database

        String myTable = DatabaseHelper.ORDER_TABLE_NAME;//Set name of your table

        SQLiteDatabase myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
        //SQLiteDatabase myDataBase = mDBHlpr.getWritableDatabase();
        //String searchQuery = "SELECT  * FROM " + myTable;
        Cursor cursor = myDataBase.rawQuery(" SELECT * FROM " + DatabaseHelper.ORDER_TABLE_NAME + " CROSS JOIN " + DatabaseHelper.LINEITEMS_TABLE_NAME, null );

        JSONArray resultSet     = new JSONArray();

        cursor.moveToFirst();
        while (cursor.isAfterLast() == false) {

            int totalColumn = cursor.getColumnCount();
            JSONObject rowObject = new JSONObject();

            for( int i=0 ;  i< totalColumn ; i++ )
            {
                if( cursor.getColumnName(i) != null )
                {
                    try
                    {
                        if( cursor.getString(i) != null )
                        {
                            Log.d("TAG_NAME", cursor.getString(i) );
                            rowObject.put(cursor.getColumnName(i) ,  cursor.getString(i) );
                        }
                        else
                        {
                            rowObject.put( cursor.getColumnName(i) ,  "" );
                        }
                    }
                    catch( Exception e )
                    {
                        Log.d("TAG_NAME", e.getMessage()  );
                    }
                }
            }
            resultSet.put(rowObject);
            cursor.moveToNext();
        }
        cursor.close();
        Log.d("TAG_NAME", resultSet.toString() );


        /*
        Intent pass_data = new Intent(this,BluetoothOut.class);

        pass_data.putExtra("pindah",resultSet.toString());
        startActivity(pass_data);
        */

        return resultSet;
    }
}
08-04 07:05:36.895 1494-1494/pra.playrawaudio D/TAG_NAME: []
08-04 07:05:36.895 1494-1494/pra.playrawaudio I/System.out: >>>>> Dumping cursor android.database.sqlite.SQLiteCursor@5343e554
    <<<<<
08-04 07:05:36.907 1494-1494/pra.playrawaudio I/System.out: >>>>> Dumping cursor android.database.sqlite.SQLiteCursor@53441ce0
    <<<<<
08-04 07:05:36.915 1494-1494/pra.playrawaudio I/System.out: >>>>> Dumping cursor android.database.sqlite.SQLiteCursor@53437acc
    0 {
       ORDERID=1
       USERID=Fred
       PASSWORD=password
       MEJA=m001
       TOPUP=t001
       SALDO=s001
       FOODID=F001
       PRICE=10.30
       NUM=1
       RES=1
       ORDERID_FK=1
    }
    1 {
       ORDERID=1
       USERID=Fred
       PASSWORD=password
       MEJA=m001
       TOPUP=t001
       SALDO=s001
       FOODID=F002
       PRICE=11.30
       NUM=2
       RES=2
       ORDERID_FK=1
    }
    2 {
       ORDERID=1
       USERID=Fred
       PASSWORD=password
       MEJA=m001
       TOPUP=t001
       SALDO=s001
       FOODID=F003
       PRICE=12.30
       NUM=3
       RES=3
       ORDERID_FK=2
    }
    3 {
       ORDERID=2
       USERID=Mary
       PASSWORD=password
       MEJA=m001
       TOPUP=t001
       SALDO=s001
       FOODID=F001
       PRICE=10.30
       NUM=1
       RES=1
       ORDERID_FK=1
    }
    4 {
       ORDERID=2
       USERID=Mary
       PASSWORD=password
       MEJA=m001
       TOPUP=t001
       SALDO=s001
       FOODID=F002
       PRICE=11.30
       NUM=2
       RES=2
       ORDERID_FK=1
    }
    5 {
       ORDERID=2
       USERID=Mary
       PASSWORD=password
       MEJA=m001
       TOPUP=t001
       SALDO=s001
       FOODID=F003
       PRICE=12.30
       NUM=3
       RES=3
       ORDERID_FK=2
    }
    6 {
       ORDERID=3
       USERID=Bert
       PASSWORD=password
       MEJA=m001
       TOPUP=t001
       SALDO=s001
       FOODID=F001
       PRICE=10.30
       NUM=1
       RES=1
       ORDERID_FK=1
    }
    7 {
       ORDERID=3
       USERID=Bert
       PASSWORD=password
       MEJA=m001
       TOPUP=t001
       SALDO=s001
       FOODID=F002
       PRICE=11.30
       NUM=2
       RES=2
       ORDERID_FK=1
    }
    8 {
       ORDERID=3
       USERID=Bert
       PASSWORD=password
       MEJA=m001
       TOPUP=t001
       SALDO=s001
       FOODID=F003
       PRICE=12.30
       NUM=3
       RES=3
       ORDERID_FK=2
    }
    <<<<<
08-04 07:05:36.919 1494-1494/pra.playrawaudio D/TAG_NAME: 1
    Fred
    password
    m001
    t001
    s001
    F001
    10.30
    1
    1
    1
08-04 07:05:36.923 1494-1494/pra.playrawaudio D/TAG_NAME: 1
    Fred
    password
    m001
    t001
    s001
    F002
    11.30
    2
    2
    1
    1
    Fred
    password
    m001
    t001
    s001
    F003
    12.30
    3
    3
    2
    2
    Mary
    password
    m001
    t001
    s001
    F001
    10.30
    1
    1
    1
    2
    Mary
    password
    m001
    t001
    s001
    F002
    11.30
    2
    2
    1
    2
    Mary
    password
    m001
    t001
    s001
    F003
    12.30
    3
    3
    2
    3
    Bert
    password
    m001
    t001
    s001
    F001
    10.30
    1
    1
    1
    3
    Bert
    password
    m001
    t001
    s001
    F002
    11.30
    2
    2
    1
    3
    Bert
    password
    m001
    t001
    s001
    F003
    12.30
    3
    3
    2
08-04 07:05:36.927 1494-1494/pra.playrawaudio D/TAG_NAME: [{"PRICE":"10.30","RES":"1","ORDERID":"1","SALDO":"s001","MEJA":"m001","ORDERID_FK":"1","PASSWORD":"password","NUM":"1","TOPUP":"t001","FOODID":"F001","USERID":"Fred"},{"PRICE":"11.30","RES":"2","ORDERID":"1","SALDO":"s001","MEJA":"m001","ORDERID_FK":"1","PASSWORD":"password","NUM":"2","TOPUP":"t001","FOODID":"F002","USERID":"Fred"},{"PRICE":"12.30","RES":"3","ORDERID":"1","SALDO":"s001","MEJA":"m001","ORDERID_FK":"2","PASSWORD":"password","NUM":"3","TOPUP":"t001","FOODID":"F003","USERID":"Fred"},{"PRICE":"10.30","RES":"1","ORDERID":"2","SALDO":"s001","MEJA":"m001","ORDERID_FK":"1","PASSWORD":"password","NUM":"1","TOPUP":"t001","FOODID":"F001","USERID":"Mary"},{"PRICE":"11.30","RES":"2","ORDERID":"2","SALDO":"s001","MEJA":"m001","ORDERID_FK":"1","PASSWORD":"password","NUM":"2","TOPUP":"t001","FOODID":"F002","USERID":"Mary"},{"PRICE":"12.30","RES":"3","ORDERID":"2","SALDO":"s001","MEJA":"m001","ORDERID_FK":"2","PASSWORD":"password","NUM":"3","TOPUP":"t001","FOODID":"F003","USERID":"Mary"},{"PRICE":"10.30","RES":"1","ORDERID":"3","SALDO":"s001","MEJA":"m001","ORDERID_FK":"1","PASSWORD":"password","NUM":"1","TOPUP":"t001","FOODID":"F001","USERID":"Bert"},{"PRICE":"11.30","RES":"2","ORDERID":"3","SALDO":"s001","MEJA":"m001","ORDERID_FK":"1","PASSWORD":"password","NUM":"2","TOPUP":"t001","FOODID":"F002","USERID":"Bert"},{"PRICE":"12.30","RES":"3","ORDERID":"3","SALDO":"s001","MEJA":"m001","ORDERID_FK":"2","PASSWORD":"password","NUM":"3","TOPUP":"t001","FOODID":"F003","USERID":"Bert"}]
08-04 07:05:36.951 1494-1494/pra.playrawaudio I/dalvikvm: Could not find method android.view.ViewGroup$MarginLayoutParams.getLayoutDirection, referenced from method android.support.v4.view.MarginLayoutParamsCompat.getLayoutDirection