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