Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Sqlite使用table_Name.Column_Name创建表_Android_Sqlite - Fatal编程技术网

Android Sqlite使用table_Name.Column_Name创建表

Android Sqlite使用table_Name.Column_Name创建表,android,sqlite,Android,Sqlite,在我的应用程序中,我有3个Sqlite表,其中包含一些外键和内部联接查询 我已经创建了DatabaseSqlHelper类,它保存了我所有的表和列的名称 我试图使用这一行来创建一个表 Create Table If Not Exists Users( Users.User_Id Varchar(50) Primary Key Not Null, Users.Name Varchar(50) Not Null, Users.Firs

在我的应用程序中,我有3个Sqlite表,其中包含一些外键和内部联接查询

我已经创建了DatabaseSqlHelper类,它保存了我所有的表和列的名称

我试图使用这一行来创建一个表

Create Table If Not Exists Users(
           Users.User_Id Varchar(50) Primary Key Not Null,
           Users.Name Varchar(50) Not Null,
           Users.First_Name Varchar(50),
           Users.Profile_Picture Blob);
我已经在mySql中测试过了,它没有问题,但在Android上运行时,我得到:

09-09 17:58:30.350: E/Database(12973): Failure 1 (near ".": syntax error) on 0x1cf850 when preparing 'Create Table If Not Exists Users(Users.User_Id Varchar(50) Primary Key Not Null,Users.Name Varchar(50) Not Null,Users.First_Name Varchar(50),Users.Profile_Picture Blob);'.
我之所以使用TableName.ColumnName,是因为我在字符串中保存了这样的does name,所以在后面的内部联接中,对用户执行内部联接TableName会更容易。Id=TableName.Id


有办法解决吗?

去掉每列前面的表名和句点

使用Users.id可以进行内部连接。在创建表以使其工作时,无需指定。。执行联接时只需指定表名


例如,
选择Id作为Tablename.Id从Tablename内部加入Users作为U on U.user\U Id=Tablename.Id
只需尝试删除sql中的所有
用户。

您也在mysql中使用完全限定名吗?在不确定的情况下,我认为不能在create语句中使用全名。您尚未创建表,它正在尝试从尚未创建的表中获取表名。。。这就像坐在树枝上,试图把它看过去,而坐在上面;-)我已经在mySql中尝试过了,而且效果很好。。这就是我问的原因,也是我用它的原因…谢谢。内部连接不是问题所在。我想高效地将我所有的列名字符串保存为Table_Name.column_Name,以避免每个内部联接都不使用Table_Name_STRING+““+”Table_column_STRING…好吧,考虑一下。。如果它是合法的,并且列名为“Users.Name”。。您仍然没有为联接提供表名。您仍然需要执行“Users.Users.Name”来指定内部连接上的表和列您是对的。。。但是在mySql中测试之后,我想sql系统可能知道如果表名==列名之前的名称-不要使用itMySql和SQLite并不总是符合相同的规则。MySQL在某些方面有点“聪明”。
Create Table If Not Exists Users(
           User_Id Varchar(50) Primary Key Not Null,
           Name Varchar(50) Not Null,
           First_Name Varchar(50),
           Profile_Picture Blob);