【问题标题】:Insert data into SQLite Database Browser将数据插入 SQLite 数据库浏览器
【发布时间】:2014-05-08 03:43:04
【问题描述】:

我正在使用 Eclipse ADT 。我想做一些事情,当我按下此按钮时,用户名、经度、纬度等信息将存储在使用 SQLite 数据库浏览器创建的表中。我从老师那里了解到,我必须使用 insert sql 之类的东西。但我对 android 真的很陌生,不确定完整的代码是什么。任何人都可以帮助我吗?

我见过像 upsert 和 not insert 或 update 这样的问题,但我不知道有什么区别。

【问题讨论】:

  • 我必须做所有这些吗?因为我的表有一长串的列。我现在做的是在我的资产中使用本地数据库。再进一步,我将使用从服务器获取数据库。
  • 好的你的意思是你的数据库来自资产,但数据呢?您是否在运行时插入数据?以及数据来自哪里?
  • 是的,我的数据库来自资产文件。数据都在 DB 中。我想在运行时插入它。这意味着一旦按下按钮,输入的用户名和当前的经度和纬度将被捕获并存储在数据库内的另一个表中。
  • 那么首先您需要将该数据库从Assets 复制到您的/data/data/yourPKG/databases/ 文件夹并创建DBHelper 类来处理您不同的Table 数据插入

标签: android eclipse sqlite


【解决方案1】:

我认为您不需要将资产中的数据库中的数据复制到新数据库中,只需使用以下代码将资产中的数据库复制到 android 中的数据库位置即可。

扩展 SQLiteOpenHelper 的类的完整代码

public class MYDB {


Context c;
public DbHelpr dbhlpr;

String DB_NAME="DB.db";
int DB_VERSION=1;
int count,j;
public String DB_PATH;
public MYDB(Context c) 
{
    // TODO Auto-generated constructor stub
    this.c=c;

    dbhlpr=new DbHelpr(c);


//  dbReadable=dbhlpr.getReadableDatabase();

}
public void close()
{
    dbhlpr.close();


}
public class DbHelpr extends SQLiteOpenHelper
{

    public DbHelpr(Context c) 
    {
        super(c, DB_NAME,null, DB_VERSION);

        DB_PATH = c.getApplicationInfo().dataDir + "/databases/";

        createDataBase()    ;
    }

    public void createDataBase() 
    {
         boolean mDataBaseExist = checkDataBase();
            if(!mDataBaseExist)
            {

                copyDatabase();
            }

    }

     //Check that the database exists here: /data/data/your package/databases/Da Name
    private boolean checkDataBase()
    {
        File dbFile = new File(DB_PATH + DB_NAME);
        //system.out.println("DB file: "+DB_PATH + DB_NAME);
        //Log.v("dbFile", dbFile + "   "+ dbFile.exists());
        return dbFile.exists();
    }

    //Copy the database from assets
    private void copyDataBase() throws IOException
    {
        InputStream mInput =   c.getAssets().open("DB_NAME.EXTENSION");

        String outFileName = DB_PATH + DB_NAME;
        OutputStream mOutput = new FileOutputStream(outFileName);
        byte[] mBuffer = new byte[1024];
        int mLength;
        while ((mLength = mInput.read(mBuffer))>0)
        {
            mOutput.write(mBuffer, 0, mLength);
        }
        mOutput.flush();
        mOutput.close();
        mInput.close();        

    }  

    @Override
    public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) 
    {
        // TODO Auto-generated method stub          
    }

    @Override
    public void onCreate(SQLiteDatabase db) 
    {
        // TODO Auto-generated method stub
    }
}




public int readDBTableFieldCount(String table) {
    // TODO Auto-generated method stub
    SQLiteDatabase db=dbhlpr.getReadableDatabase();
    Cursor cr=db.query(table, null, null, null, null, null, null);      
    int count=cr.getCount();
    cr.close();
    db.close();
    return count;
}

private void insertDataTo_rssFeed(int _id, int title_id, int sub_id,String title, int url) 
{
    ContentValues cv=new ContentValues();

    cv.put("_id",_id);
    cv.put("title_id", title_id);
    cv.put("sub_id", sub_id);
    cv.put("title",title);
    cv.put("url",url);
    long res=this.writeDBTable(cv, "t_rssfeed");

}

public Cursor readDBTable(String table) {
    // TODO Auto-generated method stub
    SQLiteDatabase db=dbhlpr.getReadableDatabase();
    Cursor cr=db.query(table, null, null, null, null, null, null);      
    return cr;
}

public Cursor readMatchingRows(String table,String column1,String column2,String value1,int value2) {
    // TODO Auto-generated method stub
    SQLiteDatabase db=dbhlpr.getReadableDatabase();
    Cursor cr=db.rawQuery("select * from " + table + " where " + column1 + "='" + value1+"' and "+column2+ "="+value2 , null);
    return cr;
}



public long writeDBTable(ContentValues cv,String table)
{
    SQLiteDatabase sdb=dbhlpr.getWritableDatabase();
    long res=sdb.insert(table, null, cv);
    sdb.close();
    return res;
}

public float delete(String table,String colmName,String data) {
    // TODO Auto-generated method stub
    SQLiteDatabase db=dbhlpr.getWritableDatabase();
    String[] arr={data};
    colmName=colmName+"=?";
    float res=db.delete(table, colmName,arr );
    db.close();
    return res;
}


 public void myDBUpdate(String tableName,String keyField,ContentValues cv, String KeyValue) 
{
        String[] col={KeyValue};            
        SQLiteDatabase db=dbhlpr.getWritableDatabase();
        keyField=keyField+"=?";
        long res=db.update(tableName, cv, keyField, col);
        db.close();
}



 }

【讨论】:

  • 我应该把这段代码放到哪里?数据库适配器?数据库助手?还是 MainActivity ?
  • 这是一个扩展 SQLiteOpenHelper 的类的模板,删除不需要的函数并将您的其他函数添加到此,并用此替换扩展 SQLiteOpenHelper 的类
猜你喜欢
  • 1970-01-01
  • 2018-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多