2 helf19920825 helf19920825 于 2015.06.04 17:30 提问

Android关于数据库的问题

谁帮忙看看,写入是成功了,但是获取的时候就获取不到数据啊!!!

package com.example.MySqlite;

import android.app.Activity;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class MyActivity extends Activity {
private ArrayList> list;
private DBHelper dbHelper;

/**
 * Called when the activity is first created.
 */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    dbHelper = new DBHelper(this);
    getData();
    inser();

    lookFor();
}

private void lookFor() {
    List<Map<String,String>> map = new ArrayList<Map<String, String>>();
    SQLiteDatabase database = dbHelper.getReadableDatabase();
    Cursor cursor = database.query("notes",null,null,null,null,null,null);
    while(cursor!=null && cursor.getCount()>0){
        Map<String,String> has = new HashMap<String, String>();
        String name =cursor.getString(1);
        Log.d("NAME",name);
        String age = cursor.getString(2);
        String sex =cursor.getString(3);
        has.put("name",name);
        has.put("age",age);
        has.put("sex",sex);
        map.add(has);
    }

}

private void inser() {

   SQLiteDatabase sql=dbHelper.getWritableDatabase();

    for(int i=0;i<list.size();i++){
        ContentValues contentValues = new ContentValues();
        long id = i;
        String name = list.get(i).get("name");
        String age = list.get(i).get("age");
        String sex = list.get(i).get("sex");
        contentValues.put("id",id);
        contentValues.put("name",name);
        contentValues.put("age",age);
        contentValues.put("sex",sex);
        long hasSuccess = sql.insert("notes", null, contentValues);
    }

}

private void getData() {
    list = new ArrayList<Map<String, String>>();
    for(int i =0;i<5;i++){
        if(i==0){
            Map<String,String> map = new HashMap<String, String>();
            map.put("name","kity");
            map.put("age","25");
            map.put("sex","男");
            list.add(map);
        }else if(i==1) {
            Map<String,String> map = new HashMap<String, String>();
            map.put("name","Dave");
            map.put("age","21");
            map.put("sex","女");
            list.add(map);
        }else if(i==2) {
            Map<String,String> map = new HashMap<String, String>();
            map.put("name","Marces");
            map.put("age","26");
            map.put("sex","女");
            list.add(map);
        }else if(i==3) {
            Map<String,String> map = new HashMap<String, String>();
            map.put("name","Rose");
            map.put("age","12");
            map.put("sex","男");
            list.add(map);
        }else if(i==4) {
            Map<String,String> map = new HashMap<String, String>();
            map.put("name","LiLin");
            map.put("age","35");
            map.put("sex","女");
            list.add(map);
        }

    }
}

}

package com.example.MySqlite;

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

/**

  • Created by on 15-6-4.
    */
    public class DBHelper extends SQLiteOpenHelper {
    public DBHelper(Context context) {
    super(context,"mynote.db",null,1);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
    db.execSQL("create table if not exists notes(" +
    " id long key," +
    " name varchar(255)," +
    " age varchar(255)," +
    " sex varchar(255))");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }
    }

4个回答

LogicTeamLeader
LogicTeamLeader   2015.06.04 19:58
已采纳

试试把下面的代码:

        String name =cursor.getString(1);
        Log.d("NAME",name);
        String age = cursor.getString(2);
        String sex =cursor.getString(3);

换成下面这个样子的

            int colums = cursor.getColumnCount();

            while (cursor.moveToNext()) {
                Map<String,String> map = new HashMap<String,String>();
                for (int i = 0; i < colums; i++) {
                    String col_name = cursor.getColumnName(i);
                    String col_value = cursor.getString(cursor
                            .getColumnIndex(col_name));
                    map.put(col_name, col_value);
                }
                listmap.add(map);
            }
LogicTeamLeader
LogicTeamLeader 回复_hay: 就是这一句:String col_value = cursor.getString(cursor .getColumnIndex(col_name));
大约 3 年之前 回复
helf19920825
helf19920825 感谢,换成你这个就查出来了!不清楚我错在那里了!大神告知一下!
大约 3 年之前 回复
caozhy
caozhy   Ds   Rxr 2015.06.04 17:54

在Cursor cursor = database.query("notes",null,null,null,null,null,null);下个断点调试下。

helf19920825
helf19920825 在Log的地方获取不到数据!打断点看过了!
大约 3 年之前 回复
q3733353520
q3733353520   2015.06.04 18:13

list = new ArrayList>();这个放到函数外

q3733353520
q3733353520 不好意思看错了,你可以在getdate() insert()的同时把list的数据也LOG看看 contentValues也是
大约 3 年之前 回复
danielinbiti
danielinbiti   Ds   Rxr 2015.06.04 20:28

把SQLite的数据库文件拷出来,用第三方可视化工具查询一下,看数据是否在库表中存在。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
关于数据库的面试问题(整理)
一、MyISAM与INNODB的区别 MyISAM强调效率,执行速度比InnoDB快,但是不支持事务,不能在表损坏后修复数据。 InnoDB不保存行号,就是在执行count操作时,需要扫描整个表,而MyISAM只要直接读出行号就行。注意:如果count与where组合使用两种引擎都是需要扫描整个表 MyISAM适用: 1. count操作多 2. 插入少,查询多 3. 不需要事
关于数据库的面试题
(一)什么是存储过程?有哪些优缺点? 存储过程是一些预编译的SQL语句。 更加直白的理解:存储过程可以说是一个记录集,它是由一些T-SQL语句组成的代码块,这些T-SQL语句代码像一个方法一样实现一些功能(对单表或多表的增删改查),然后再给这个代码块取一个名字,在用到这个功能的时候调用他就行了。 存储过程是一个预编译的代码块,执行效率比较高一个存储过程替代大量T_SQL语句 ,可以降低网
数据库的有关练习题目
一、选择题(20分,每小题2分):1.数据库系统的核心是_B___。A.数据库           B.数据库管理系统C.数据模型         D.软件工具2.SQL语言具有__B__的功能。A.关系规范化、数据操纵、数据控制B.数据定义、数据操纵、数据控制C.数据定义、关系规范化、数据控制D.数据定义、关系规范化、数据操纵3.SQL语言的数据操纵语句包括 SELECT,INSERT,UPDA
关于影响数据库性能的数据库锁的问题
在很多情况下,如果数据库表设计的不好,一旦数据量过大的时候(比如工作流引擎中的历史记录超过几十万上百万条),就会造成应用系统运行速度缓慢。我曾经碰到过这样一个系统运行速度越来越慢的案例,最后检查数据库表的时候,发现所有的表都没有主键,也没有索引。原来是此前创建数据库结构的时候,通过pdm导出忘记生成主键了。 不知道有谁也碰到过类似的问题以及用什么办法解决了这样的问题,不妨跟帖...
有关数据库sql.txt
这是关于数据库的资源问题,关于数据库的一些自己常用的语句
项目中遇到的[数据库并发]操作问题
使用Jmeter测试应用的浏览数的时候,起10个线程,同时执行浏览应用的API,本来预期应用的浏览次数增加10,结果始终达不到10。猜测这可能是个典型的并发案例。jmeter操作截图如下:      于是我尝试在程序中打日志,确定一下我的猜想: 日志表明,总有几个线程是在同一时刻操作数据库的,造成浏览次数遗漏! 请问,这种情况,我应该怎么做并发控制?我用的mysql数据库。
做项目时遇到的关于mysql数据库的一些问题
1、为结果集、表、字段赋别名 ,用关键字 as,两个表的连接A left outer join table B on A.字段值=B.字段值(连接条件),最后选择 select id ,name,age from (        (select * from A) as m left outer join (select * from B) as n on m.id=n.id
数据库面试中常用的10个问题
1.触发器的作用? 答:触发器是一中特殊的存储过程,主要是通过事件来触发而被执行的。它可以强化约束,来维护数据的完整性和一致性,可以跟踪数据库内的操作从而不允许未经许可的更新和变化。可以联级运算。如,某表上的触发器上包含对另一个表的数据操作,而该操作又会导致该表触发器被触发。 2。什么是存储过程?用什么来调用? 答:存储过程是一个预编译的SQL语句,优点是允许模块化的设计,就是说
数据库优先级
not 大于 and 大于 or http://blog.csdn.net/hailongge/article/details/5055496
搞懂数据库看这篇就够了!
 转载地载:http://www.jianshu.com/p/b768b7adae12 〓数据库的分类〓 数据库通常分为层次式数据库、网络式数据库和关系式数据库三种;不同的数据库是按不同的数据结构来联系和组织的。 在当今的互联网中,最常见的数据库模型主要是两种,即关系型数据库和非关系型数据库。 数据库分类 〓关系型数据库介绍〓 1、关系型数据库的由来 虽然网状数据库