android sqlite 已经插入到数据库的数据查不到

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android sqlite 已经插入到数据库的数据查不到相关的知识,希望对你有一定的参考价值。

public void insert_order(int num1,int num2,int num3,int salesub,String finish,String addr,String phonenum)

String sql="insert into t_order(num1,num2,num3,salesub,finish,addr,phonenum) values ('"+num1+"','"+num2+"','"+num3+"','"+salesub+"','"+finish+"','"+addr+"','"+phonenum+"')";
// sdb.beginTransaction();
sdb.execSQL(sql);
//sdb.beginTransactionNonExclusive();
sdb.close();

public List findall()

Cursor cursor=sdb.rawQuery("select * from t_order where finish=?", new String[]"no");
List list=new ArrayList();
cursor.moveToFirst();
while(!cursor.isLast())
HashMap map=new HashMap();
map.put("num1", cursor.getString(1));
map.put("num2", cursor.getString(2));
map.put("num3", cursor.getString(3));
map.put("salesub", cursor.getString(4));
map.put("addr", cursor.getString(6));
map.put("phonenum", cursor.getString(7));
list.add(map);
cursor.moveToNext();

cursor.moveToFirst();
//sdb.close();
return list;

楼主取数据的循环方式有点问题,试试下面的
for(cursor.moveToFirst();!cursor.isAfterLast();cursor.moveToNext())

HashMap map=new HashMap();
map.put("num1", cursor.getString(1));
map.put("num2", cursor.getString(2));
map.put("num3", cursor.getString(3));
map.put("salesub", cursor.getString(4));
map.put("addr", cursor.getString(6));
map.put("phonenum", cursor.getString(7));
list.add(map);
参考技术A 数据库创建需要首次初始化,不过你的创建数据表是在helper的onCreate方法里面,此时表中还没数据只能执行添加,
你的那个意思就是所谓理解错了面向对象,你的思路就是启动activity,然后new个数据实例,然后系统会调用创建方法,然后你在执行添加操作,操作完之后你想继续查询,这是典型的面向过程
参考技术B 有没有报错什么的???追问

没有报错 而且重运行下程序的话才会显示上次添加的数据

追答

你是在哪测试的??手机还是

追问

avd模拟器

追答

试试真机

参考技术C android 使用Sqlite数据库时,插入了数据,不报错,但查询不到

(初学者)今天写安卓的时候遇见这么一个问题,我觉得挺有趣的,就是cursor查询时,用cursor.getString(1),这种居然不能精确定位到行位置(可能是从0开始?有时间再细纠一下),得用cursor.getString(cursor.getColumnIndex(“name”))才能准确定位到某一行,这对于写java习惯了的人来说太难受了,所以一时也没反应过来,找了好久也没看见有这方面的回答,可能太基础了QAQ。不过还是写出来分享给大家。提供一个排查小思路!
sqlite创建表成功,insert不报错,但没有数据插入
sqlite创建表成功,insert不报错,但没有数据插入
浏览器打开
安卓奇葩问题之SQLite条件查找不到数据
今天真是日了狗了。 先说需求:要做一个累死支付宝首页的可自定义的栏目。栏目是动态从后台获取的,所以就会有一个本地数据和后台数据的同步问题。为了方便对本地数据的增删改查,首先想到SQLite。 然后就写了个工具类,调用接口后,先进行插入操作,成功;然后查询所有数据,成功; 然而,人生处处是惊喜。根据ID进行的查询、删除、更新,都会报错:游标的index越界了。 那就是没有查到数据嘛...
浏览器打开
sqlite数据库中有数据,但是程序里面却看不到数据,程序没有问题,解决办法!!!
在使用PDA的过程中,发现数据库有数据,但是程序里面却看不到数据,程序没有问题,刚开始一直怀疑是程序的问题,但是其他的pda采用这套程序,使用过程中都没有出现这个问题 往上找了很多资料,和调试bug,问题一直没有解决. 经过多次寻找,产生的此问题的可能原因如下: 1.pda当前的年月日和数据库的对应表的时间对不上, 如pda没有同步时间的时,默认的时间是1970.1.1,如
浏览器打开
Android SQLite无法查询数据
Android SQLite无法查询数据,可以正常插入数据,也提示插入成功了,但是执行下列语句输入的英文字符,却总是会查出来数字,不是字符。。第一次接触这个,不清楚是怎么回事请帮忙说的详细点,谢谢。。 package com.example.path_n; //主类 import java.sql.Date; import java.text.SimpleDateFormat; import j
浏览器打开
Android sqlite数据库update之后数据查询数据获取不实..._CSDN博客
最近写项目的时候用android自带的数据库SqliteDatabase,使用过程中发生了这样一件事情,我在Activity B中读取数据库表User中的数据,显示在UI上,然后跳转到Activity A...
Android sqlite数据库update之后数据查询数据获取不实..._CSDN博客
最近写项目的时候用android自带的数据库
参考技术D 在使用PDA的过程中,发现数据库有数据,但是程序里面却看不到数据,程序没有问题,刚开始一直怀疑是程序的问题,但是其他的pda采用这套程序,使用过程中都没有出现这个问题

往上找了很多资料,和调试bug,问题一直没有解决.

经过多次寻找,产生的此问题的可能原因如下:

1.pda当前的年月日和数据库的对应表的时间对不上, 如pda没有同步时间的时,默认的时间是1970.1.1,如果只改了月和日,忽略了改年.结果导致数据库找不到对应的表,所以导致问题产生

2.在程序没有退出的过程中,即刻导入有数据的数据库,,程序一直在查询老表没有数据的数据库的过程中,会把新导入的数据库给删除掉,导致,重新登陆这个程序后,依然没有发现数据. 解决办法:先程序退出,然后把没有数据的数据库删除掉,重新导入有数据的数据库,打开软件, 禁止时间同步,即可!

如果它已经在表中,如何不在sqlite中记录[关闭]

【中文标题】如果它已经在表中,如何不在sqlite中记录[关闭]【英文标题】:how to does not record in sqlite if it is already in table [closed] 【发布时间】:2013-07-30 07:27:35 【问题描述】:

我有一个应用程序,我在 sqlite 表中插入数据我希望如果数据已经插入,那么它不应该插入相同的记录这里是我插入数据的代码。

这是用于插入数据的带有插入语句的代码

       - (void) addCoffee:(NSString *)dbPath 

        if(addStmt == nil) 
        const char *sql = "insert into library(userID,contentAddedDateTime,contentType,contentTitle,contentSource,contentDescription,categoryTitle,subCategoryTitle,organizationCode,userName) Values(?,?,?,?,?,?,?,?,?,?)";

       if (sqlite3_open([dbPath UTF8String], &database) == SQLITE_OK) 


       if(sqlite3_prepare_v2(database, sql, -1, &addStmt, NULL) != SQLITE_OK)
        NSAssert1(0, @"Error while creating add statement. '%s'", sqlite3_errmsg(database));


    



  sqlite3_bind_text(addStmt, 1, [userID UTF8String], -1, SQLITE_TRANSIENT);

  sqlite3_bind_text(addStmt, 2, [contentAddedDateTime UTF8String], -1, SQLITE_TRANSIENT);

  sqlite3_bind_text(addStmt, 3, [contentType UTF8String], -1, SQLITE_TRANSIENT);

  sqlite3_bind_text(addStmt, 4, [contentTitle UTF8String], -1, SQLITE_TRANSIENT);

  sqlite3_bind_text(addStmt, 5, [contentSource UTF8String], -1, SQLITE_TRANSIENT);

      sqlite3_bind_text(addStmt, 6, [contentDescription UTF8String], -1, SQLITE_TRANSIENT);


      sqlite3_bind_text(addStmt, 7, [categoryTitle UTF8String], -1, SQLITE_TRANSIENT);

      sqlite3_bind_text(addStmt, 8, [subCategoryTitle UTF8String], -1, SQLITE_TRANSIENT);

      sqlite3_bind_text(addStmt, 9, [organizationCode UTF8String], -1, SQLITE_TRANSIENT);
      sqlite3_bind_text(addStmt, 10, [userName UTF8String], -1, SQLITE_TRANSIENT);



if(SQLITE_DONE != sqlite3_step(addStmt))
    NSAssert1(0, @"Error while inserting data. '%s'", sqlite3_errmsg(database));
else
    //SQLite provides a method to get the last primary key inserted by using sqlite3_last_insert_rowid
    coffeeID = sqlite3_last_insert_rowid(database);

//Reset the add statement.
sqlite3_reset(addStmt);


   

【问题讨论】:

什么不起作用?您是否尝试过返回行数以查看是否已插入记录? 【参考方案1】:
- (int) GetCount :(NSString *)UserID

[self createEditableCopyOfDatabaseIfNeeded];
[self initializeDatabase];

int count = 0;


NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];

NSString *path = [documentsDirectory stringByAppendingPathComponent:@"dbfav2table.sqlite"];
if (sqlite3_open([path UTF8String], &database) == SQLITE_OK)

    sqlite3_stmt *statement;

    NSString *sql_str = [NSString stringWithFormat:@"SELECT count(*) FROM tablename WHERE userID='%@'", UserID];

    const char *sqlStatement = (char *)[sql_str UTF8String];
     NSLog(@"%@", [NSString stringWithUTF8String:sqlStatement]);

    if( sqlite3_prepare_v2(database, sqlStatement, -1, &statement, NULL) == SQLITE_OK )
    

        while( sqlite3_step(statement) == SQLITE_ROW )
        
            count = sqlite3_column_int(statement, 0);
            NSLog(@"count for %@ is %i",UserID,count);
        

    
    else

 
        NSLog( @" Error is:  %s", sqlite3_errmsg(database) );

 

    // Finalize and close database.
    sqlite3_finalize(statement);
    sqlite3_close(database);


return count;

如果返回count = 1,则表示已经存在具有相同userId的值,否则不存在该值。希望对你有帮助

【讨论】:

【参考方案2】:

您应该编写具有唯一列的选择查询。让我们说 userID 在你的情况下

const char *sql = "select * from library where userID=%@";

如果记录存在则进入否则跳过

【讨论】:

以上是关于android sqlite 已经插入到数据库的数据查不到的主要内容,如果未能解决你的问题,请参考以下文章

Android Sqlite插入空对象引用[重复]

Android Sqlite 如果不存在则插入

我的 sqlite 数据库只插入一项 android studio (java)

SQLite 避免 android 中的重复条目

如何从表1中检索列数据并使用SQLite数据库将该列值插入到Android Studio的表2中?

android SQLite 批量插入数据慢的解决方案 (针对于不同的android api 版本)