android - SQL 数据库中未添加数据

标签 android mysql sql

我正在尝试制作一个需要将数据存储在具有 3 列的 SQL 数据库中的应用程序。问题是数据没有被添加到数据库中。我正在使用 getCount() 查看是否正在添加数据,但它始终返回 0。

我的DataHandler.class如下

    public final class DataHandler 
{
FeedReaderDbHelper mDbHelper;
SQLiteDatabase db;
Context ctx;
public DataHandler(Context ctx)
{
    this.ctx=ctx;
    mDbHelper=new FeedReaderDbHelper(ctx);
}
public static final String TABLE_NAME = "History";
public static final String COLUMN_NAME_NAME1 = "na1";
public static final String COLUMN_NAME_NAME2 = "na2";
public static final String COLUMN_NAME_RESULT = "result";
private static final String CREATE_TABLE= "CREATE TABLE "+ TABLE_NAME + " ("+COLUMN_NAME_NAME1+ " TEXT NOT NULL,"+ COLUMN_NAME_NAME2 + " TEXT NOT NULL," + COLUMN_NAME_RESULT + " TEXT NOT NULL);";
private static final String SQL_DELETE_ENTRIES ="DROP TABLE IF EXISTS " + TABLE_NAME;

public class FeedReaderDbHelper extends SQLiteOpenHelper 
{
    public static final int DATABASE_VERSION = 1;
    public static final String DATABASE_NAME = "FeedReader.db";

    public FeedReaderDbHelper(Context context) 
    {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }
    public void onCreate(SQLiteDatabase db) 
    {
            db.execSQL(CREATE_TABLE);
    }
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
    {
        db.execSQL(SQL_DELETE_ENTRIES);
        onCreate(db);
    }
}
public DataHandler open()
{
    db=mDbHelper.getWritableDatabase();
    return this;
}

public void close()
{
    mDbHelper.close();
}
public void Insert(String n1,String n2,int r)
{
    ContentValues values = new ContentValues();
    values.put(COLUMN_NAME_NAME1,n1);
    values.put(COLUMN_NAME_NAME2, n2);
    switch(r)
    {
        case 1:values.put(COLUMN_NAME_RESULT,"a");
                break;
        case 2:values.put(COLUMN_NAME_RESULT,"b");
                break;
        case 3:values.put(COLUMN_NAME_RESULT,"c");
                break;
        case 4:values.put(COLUMN_NAME_RESULT,"d");
                break;
        case 5:values.put(COLUMN_NAME_RESULT,"e");
                break;
        case 6:values.put(COLUMN_NAME_RESULT,"f");
                break;
    }
}
public Cursor returnData()
{
    return db.query(TABLE_NAME, new String[]{COLUMN_NAME_NAME1, COLUMN_NAME_NAME2,COLUMN_NAME_RESULT}, null, null, null, null, null);
}

我的数据插入代码是-

   handler=new DataHandler(getBaseContext());
                handler.open();
                handler.Insert(name1, name2, ans);
                handler.close();

数据查询代码是-

    public class HistoryPage extends ActionBarActivity 
{
DataHandler handler;
int i,num;
String nm1,nm2,result;
private ListView mainListView ;  
private ArrayAdapter<String> listAdapter ;
@Override
protected void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.page);
    mainListView = (ListView) findViewById( R.id.mainListView );
    handler=new DataHandler(getBaseContext());
    handler.open();
    Cursor c=handler.returnData();
    c.moveToFirst();
    num=c.getCount();
    Toast.makeText(getApplicationContext(), ""+num, Toast.LENGTH_LONG).show();
    String[] Results = new String[4];
    for(i=0 ; i<num ; i++)
    {
        nm1=c.getString(0).toString();
        nm2=c.getString(1).toString();
        result=c.getString(2).toString();
        Results[i]=nm1+" & "+nm2+" - "+result;
        c.moveToNext();
    }
    Toast.makeText(getApplicationContext(), Results[0], Toast.LENGTH_LONG).show();
    handler.close();
    ArrayList<String> hstry = new ArrayList<String>();
    hstry.addAll(Arrays.asList(Results));
    listAdapter = new ArrayAdapter<String>(this, R.layout.textv,hstry);
    mainListView.setAdapter( listAdapter );
}

最佳答案

哇,首先我什至不认为你已经创建了数据库。您的列/键是。不正确。

指定列的正确方法是这样的:

private static final String KEY_USERNAME = "username";
public static final int COL_USERNAME = 1;

您的表创建字符串也不正确。正确的做法是这样的:

public static final String USER_TABLE_CREATE = "CREATE TABLE " + USER_TABLE + " (" + 
    KEY_ROWID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
    KEY_USERNAME + " VARCHAR UNIQUE, " + 
    KEY_PASSWORD + " VARCHAR NOT NULL, " + 
    KEY_EMAIL + " VARCHAR NOT NULL, " + 
    KEY_FIRSTNAME + " VARCHAR NOT NULL, " + 
    KEY_LASTNAME + " VARCHAR NOT NULL, " +
    "creation " + " DATETIME, " + 
    "lastlogin " + " DATETIME);";

然后你会这样建表:

db.execSQL(USER_TABLE_CREATE);

让我们先从重写您的数据库处理程序开始,然后从那里开始。

您的插入数据处理程序在功能上也受到挑战。没有你说在哪里插入数据。例如,这是一个产品插入处理程序:

public void addNewProduct(String cPRODUCTNAME, String cPRODUCTDESCRIPTION,
        String cPRODUCTCODE, String cPRODUCTCOST, String cPRODUCTPRICE,
        String cPRODUCTSTOCK, String cPRODUCTREORDER, String cTAXABLE,
        String cPRODUCTNOTES) {


    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues cvProduct = new ContentValues();
    cvProduct.put(KEY_PRODNAME, cPRODUCTNAME);
    cvProduct.put(KEY_PRODDESCRIP, cPRODUCTDESCRIPTION);
    cvProduct.put(KEY_PRODCODE, cPRODUCTCODE);
    cvProduct.put(KEY_PRODCOST, cPRODUCTCOST);
    cvProduct.put(KEY_PRODPRICE, cPRODUCTPRICE);
    cvProduct.put(KEY_PRODSTOCK, cPRODUCTSTOCK);
    cvProduct.put(KEY_PRODREORDER, cPRODUCTREORDER);
    cvProduct.put(KEY_TAXABLE, cTAXABLE);
    cvProduct.put(KEY_PRODNOTES, cPRODUCTNOTES);

    db.insert(PRODUCTS_TABLE, null, cvProduct);
    db.close();

}

倒数第二行说明要将数据插入到的表、null,然后是要插入的值。在这种情况下,上面列出的所有内容值。

如果你想更新而不是插入,那么你只需添加一个 WHERE 子句和 cahnge 插入来更新。

关于android - SQL 数据库中未添加数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25166850/

相关文章:

android - 使用协程写入日志文件而不丢失日志的顺序

Android SDK 工具修订版 22 问题?

mysql - 将 datetime > now 与 Jetbrains Exposed 进行比较

java - sql准备语句和java

java - ScrollView 在其他内容下滚动

android - Android 版 OpenGL ES 中的透明纹理

mysql - 定期将数据加载到表中的最佳方法是什么

Mysql选择几何集合

mysql - 如果 B 列是最早的日期,则在 A 列中显示值。

mysql - 按名称、时间和 sum_average 对时间段进行分组