关于SQlite插入数据不显示的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于SQlite插入数据不显示的问题相关的知识,希望对你有一定的参考价值。

package sqliteshuju;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;

public class sqlitetext extends SQLiteOpenHelper

private static final int VERSION =1;

public sqlitetext(Context context, String name, CursorFactory factory,
int version)
super(context, name, factory, version);
// TODO Auto-generated constructor stub

public sqlitetext(Context context, String name)

this(context,name, VERSION);

public sqlitetext(Context context,String name,int version)

this(context,name,null,VERSION);


@Override
public void onCreate(SQLiteDatabase db)
// TODO Auto-generated method stub
db.execSQL("Create table user(id int,name varchar(20))");


@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
// TODO Auto-generated method stub platform-
System.out.println("ssss");




-----------------------------------------
public class Youxi6Activity extends Activity

private Button chuangjian=null;
private Button charu=null;
private TextView text=null;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

chuangjian=(Button)findViewById(R.id.chuangjian);
charu=(Button)findViewById(R.id.charu);
text=(TextView)findViewById(R.id.ceshi);
chuangjian.setOnClickListener(new chuangjianshujuku());
charu.setOnClickListener(new charushuju());

class chuangjianshujuku implements OnClickListener

public void onClick(View v)
// TODO Auto-generated method stub
sqlitetext st=new sqlitetext(Youxi6Activity.this,"sqlshujuku");
SQLiteDatabase db=st.getReadableDatabase();



class charushuju implements OnClickListener

public void onClick(View v)
// TODO Auto-generated method stub
ContentValues cv=new ContentValues();
cv.put("id", 1);
cv.put("name", "yuandaw");
sqlitetext st=new sqlitetext(Youxi6Activity.this,"sqlshujuku");
SQLiteDatabase db=st.getWritableDatabase();
db.insert("user", null, cv);
text.setText("yuandaw");





在cmd中select * from user 后 什么也不显示

参考技术A 首先我说下,我用了你的代码。是可以运行的,而且我也查看了数据库user表内容,成功插入了。首先我有几点不明白:
1.为什么你要单独创建数据库? SQLiteDatabase db=st.getWritableDatabase(); 数据库不存在的话会自动创建。创建的是多余的代码。
2.建议在用完数据库的时候关闭数据库。db.close();
不知道是不是你查询的方法有些问题。你再试试,或者你直接点击“插入数据的按钮”

附上查看数据库命令:
adb shell
sqlite3 data/data/sqliteshuju/databases/sqlshujuku
.table
select * from user ;

SQL 条件插入数据。 SQLite

【中文标题】SQL 条件插入数据。 SQLite【英文标题】:SQL conditional insertion of data. SQLite 【发布时间】:2018-07-25 05:33:44 【问题描述】:

这本质上是一个关于根据另一个表中的信息将数据插入到一个表中的问题。 db 是用 sqlite3 实现的。我是一个相对较新的 SQL 用户。

我有两个表,CUSTOMERS 和 MISSING,如下所示(空格表示 NULL)。

CUSTOMERS:
ID|V1|V2|V3
1|18|23|14
2| 7|  |11
4|  |14|
7|19|22|12

MISSING:
ID|V1|V2|V3
 2| N| Y| N
 3| Y| Y| Y
 4| Y| N| Y
 5| Y| Y| Y
 8| Y| Y| Y

表 MISSING 指示表 CUSTOMERS 中的哪些客户 ID 没有记录某些变量的值。因此,例如,客户 2 缺少变量 V2 的值,但缺少 V1 或 V3 的值。同样,客户 3、5 和 8 缺少所有三个变量 V1、V2、V3 的值。请注意,客户 6 不存在,因此在 CUSTOMERS 或 MISSING 中都没有记录。

当客户缺少不完整的数据时(即,与客户 4 一样,仅缺少 2 或三个变量的值)表 CUSTOMERS 中已经有一条记录,我不想任何改变。但是,当客户缺少所有三个变量的值(如客户 3、5 和 8)时,我想在 V1、V2 和 V3 中向客户添加一条带有 NULL 的记录,以便表格如下所示。

CUSTOMERS:
ID|V1|V2|V3
 1|18|23|14
 2| 7|  |11
 3|  |  |  
 4|  |14|
 5|  |  |  
 6|  |  |  
 7|19|22|12
 8|  |  |  

我知道如何从 MISSING 中选择表明缺少 V1、V2 和 V3 信息的 ID ...但我如何使用它对 CUSTOMERS 进行所需的更改?

【问题讨论】:

【参考方案1】:

你会使用insert . . . select:

insert into customers (id, v1, v2, v3)
    select m.id, null, null, null
    from missing m
    where m.v1 = 'Y' and m.v2 = 'Y' and m.v3 = 'Y';

也就是说,您应该修改您的数据模型。不需要表missing;所有信息都在customers

【讨论】:

是的,他应该修改他的方法,但不,不是他需要的所有信息“都在 CUSTOMERS 中”(他提供的第一个版本)。您无法从中决定 [ID 为 3、5、8 的行应该存在,但 [ID 为 6 的行不应该存在。 正如我在之前的评论中所暗示的,我同意表 MISSING 是完全没有必要的。真正的问题是,鉴于我在评论中提到的两个 Excel 工作表,一个人如何最终得到想要的最终数据模型。为了复制,导入作为数据库中初始表提供的工作簿的表 1 和表 6 似乎是明智的,然后才创建更改其结构的方法。我很欣赏关于模型的 cmets,以及所发布的问题的解决方案(我花了一点时间来理解)。 当我试图自己解决这个问题时,我没有理解的关键是可以将常量作为名义上的东西来“选择”(它们不是真的!)表,如 Linnof 的 SELECT m.id, null, null, null 。【参考方案2】:

鉴于您对 SQL 比较陌生,我将首先建议您更改方法。通过让一个表存在数据,而另一个表缺少数据,这会使事情变得更加复杂。我建议只维护一个所有客户都在场的CUSTOMERS 表。然后,如果您想查明,例如,自定义是否缺少 V2 的数据,您可以使用简单查询:

SELECT *
FROM CUSTOMERS
WHERE V2 IS NULL;

这种方法使您不必维护一个单独的表来记录丢失的内容。如果CUSTOMERS 中不存在数据,那么您已经知道它丢失了。

【讨论】:

我同意你的建议,但这些表格并不是我真正创造的。我正在构建一个基于澳大利亚统计局地区社会经济指数的 SQLite 数据库。在abs.gov.au/AUSSTATS/subscriber.nsf/… 的电子表格中,我的“客户”表实际上对应于“表 1”工作表,“缺失”对应于“表 6”工作表。如果我知道如何按照我的要求去做,我就会拥有你认为我应该拥有的那种桌子! 如果您正在“构建...数据库”,那么是的,这些表是“您创建的”。 CUSTOMERS 表和 MISSING 表都可以作为 Tim 在此处建议的表的视图获得。 @ErwinSmout 我也打算给出一个字面上的答案,但这将是很多工作并且涉及生成序列。

以上是关于关于SQlite插入数据不显示的问题的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Android Studio 上获取 Sqlite 数据库中插入数据的实时视图

SQLite 不立即插入记录

在单击按钮时将数据插入 Android Studio 中的 SQlite 数据库

SQL 条件插入数据。 SQLite

将数据正确插入到 sqlite 数据库中

sqlite不存在记录则插入数据