【问题标题】:Getting Table Data from Sql Server to SQLite with Android [closed]使用 Android 将表数据从 Sql Server 获取到 SQLite [关闭]
【发布时间】:2014-08-28 04:03:11
【问题描述】:

我是一名刚出生的 Android 开发人员。我在 Sql Server 中有一个包含 1000 个数据的表,我想将这些数据放入我的 Android 应用程序中,我的应用程序会将这些数据作为离线数据库,有人可以建议我如何使用 Android 将所有数据放入我的 SQLite 数据库中. 我知道如何在 SQLite 上创建数据库/表和简单的 CRUd 操作...请帮助我,在此先感谢

【问题讨论】:

  • 要么 1) 将数据从 SQL Server 导出到 SQLite 文件和use it to populate the data,要么 2) 如果它在线并且您有 Web 服务,则使用它来插入数据。

标签: android sqlite


【解决方案1】:

如果您有现有数据,则需要导出到 SQLite。您可以手动创建 SQLite 数据库文件。 SQLite Manager 是火狐插件。您可以创建数据库和表,然后您可以使用 SQLite 管理器插入现有数据。 创建sqlite数据库文件后, 您需要将数据库嵌入到您的应用程序中。这是给你的Android SQLite Database Tutorial。在本教程中,SQLiteHelper 类不是数据库嵌入样式。我的示例类是您希望的数据库嵌入样式。希望得到帮助。这是为您准备的示例 SQLiteDatabaseHelper 类。
1) 将您的数据库文件 file.db 或 file.sqlite 添加到您的 project/assets 文件夹中;
2)编写SQLiteHelper

public class SQLiteHelper extends SQLiteOpenHelper{

private static String DATABASE_NAME = "file.db";
public final static String DATABASE_PATH = "/data/data/yourpackagename/databases/";
private static final int DATABASE_VERSION = 1;
private SQLiteDatabase dataBase;
private final Context dbContext;

public SQLiteHelper(Context context) {
    super(context, DBActivity.DatabaseName, null, DATABASE_VERSION);
    this.dbContext = context;
    DATABASE_NAME = DBActivity.DatabaseName;
    // checking database and open it if exists
    if (checkDataBase()) {
        openDataBase();
    } else
    {
        try {
            this.getReadableDatabase();
            copyDataBase();
            this.close();
            openDataBase();

        } catch (IOException e) {
            throw new Error("Error copying database");
        }
        Toast.makeText(context, "Initial database is created", Toast.LENGTH_LONG).show();
    }
}

// Adding new contact
    public void addContact(Contact contact) {
        SQLiteDatabase db = this.getWritableDatabase();

        ContentValues values = new ContentValues();
        values.put(KEY_NAME, contact.getName()); // Contact Name
        values.put(KEY_PH_NO, contact.getPhoneNumber()); // Contact Phone

        // Inserting Row
        db.insert(TABLE_CONTACTS, null, values);
        db.close(); // Closing database connection
    }

    // Getting single contact
    public Contact getContact(int id) {
        SQLiteDatabase db = this.getReadableDatabase();

        Cursor cursor = db.query(TABLE_CONTACTS, new String[] { KEY_ID,
                KEY_NAME, KEY_PH_NO }, KEY_ID + "=?",
                new String[] { String.valueOf(id) }, null, null, null, null);
        if (cursor != null)
            cursor.moveToFirst();

        Contact contact = new Contact(Integer.parseInt(cursor.getString(0)),
                cursor.getString(1), cursor.getString(2));
        // return contact
        return contact;
    }

    // Getting All Contacts
    public List<Contact> getAllContacts() {
        List<Contact> contactList = new ArrayList<Contact>();
        // Select All Query
        String selectQuery = "SELECT  * FROM " + TABLE_CONTACTS;

        SQLiteDatabase db = this.getWritableDatabase();
        Cursor cursor = db.rawQuery(selectQuery, null);

        // looping through all rows and adding to list
        if (cursor.moveToFirst()) {
            do {
                Contact contact = new Contact();
                contact.setID(Integer.parseInt(cursor.getString(0)));
                contact.setName(cursor.getString(1));
                contact.setPhoneNumber(cursor.getString(2));
                // Adding contact to list
                contactList.add(contact);
            } while (cursor.moveToNext());
        }

        // return contact list
        return contactList;
    }

    // Updating single contact
    public int updateContact(Contact contact) {
        SQLiteDatabase db = this.getWritableDatabase();

        ContentValues values = new ContentValues();
        values.put(KEY_NAME, contact.getName());
        values.put(KEY_PH_NO, contact.getPhoneNumber());

        // updating row
        return db.update(TABLE_CONTACTS, values, KEY_ID + " = ?",
                new String[] { String.valueOf(contact.getID()) });
    }

    // Deleting single contact
    public void deleteContact(Contact contact) {
        SQLiteDatabase db = this.getWritableDatabase();
        db.delete(TABLE_CONTACTS, KEY_ID + " = ?",
                new String[] { String.valueOf(contact.getID()) });
        db.close();
    }


    // Getting contacts Count
    public int getContactsCount() {
        String countQuery = "SELECT  * FROM " + TABLE_CONTACTS;
        SQLiteDatabase db = this.getReadableDatabase();
        Cursor cursor = db.rawQuery(countQuery, null);
        cursor.close();

        // return count
        return cursor.getCount();
    }




private void copyDataBase() throws IOException{
    InputStream myInput = dbContext.getAssets().open(DATABASE_NAME);
    String outFileName = DATABASE_PATH + DATABASE_NAME;
    OutputStream myOutput = new FileOutputStream(outFileName);

    byte[] buffer = new byte[1024];
    int length;
    while ((length = myInput.read(buffer))>0){
        myOutput.write(buffer, 0, length);
    }

    myOutput.flush();
    myOutput.close();
    myInput.close();
}

public void openDataBase() throws SQLException {
    String dbPath = DATABASE_PATH + DATABASE_NAME;
    dataBase = SQLiteDatabase.openDatabase(dbPath, null, SQLiteDatabase.OPEN_READWRITE);
}

private boolean checkDataBase() {
    SQLiteDatabase checkDB = null;
    boolean exist = false;
    try {
        String dbPath = DATABASE_PATH + DATABASE_NAME;
        checkDB = SQLiteDatabase.openDatabase(dbPath, null,
                SQLiteDatabase.OPEN_READONLY);
    } catch (SQLiteException e) {
        Log.v("db log", "database does't exist");
    }

    if (checkDB != null) {
        exist = true;
        checkDB.close();
    }
    return exist;
}

【讨论】:

    【解决方案2】:

    取决于您是否拥有 MySql 数据库或 Sql Server 数据库。

    如果你有一个 MySql 数据库,你可以用 PHP 编写你的服务器端代码,并以 JSON 格式返回数据以将其存储在你的 android 系统中。

    @Kunal .C 给出的链接

    如果您在 ASP.net 上有一个 Sql Server 数据库,您可以编写一个返回 JSON 数据的 Restful WCF 服务。您可以查看:How to Consume WCF Service with Android

    无论哪种情况,我都建议以 JSON 格式传输数据,您可以使用 GSON 对其进行序列化和反序列化 https://code.google.com/p/google-gson/

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-13
      • 2013-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-06
      相关资源
      最近更新 更多