1

SQL 形式のデータベースがあり、作成中の Android アプリに追加するために sqlite のコピーを作成する必要があります。

これまでのところ、私のために働いているものは何もありません。SQL を SQLite Database Browser にインポートしようとしましたが、適切にインポートされず、常にエラー ステートメントが表示されます。データベースを作成してからテーブルをインポートしようとしましたが、クラッシュしました。

ターミナル経由で sqlite3 を使用しようとしましたが (違いがある場合は Mac を使用しています)、.import FILE TABLE 形式が機能しません。「エラー: そのようなテーブルはありません: TABLE」と表示されます。「create table test42」、「.import test.sql test42 およびバリアント」を使用して空のテーブルを作成しようとしましたが、「Error: near "test": Syntax error」と表示されます。

私は立ち往生しています。

どんな助けでも大いに役立ちます。ありがとう。

4

6 に答える 6

0

phpMyAdminによって生成されたファイルには、テーブルを作成してデータを挿入するためのSQLコマンドが含まれている可能性があります。SQLiteでこのようなファイルを実行する方法は、sqlite3コマンドインターフェイスを使用して.readコマンドを使用することです。

残念ながら、作成した.sqlファイルはMySQLを対象としているため、そこに含まれるコマンドがSQLiteと互換性があるとは考えられません。SQLiteで実行する前に、.sqlファイルをかなり大幅に編集する必要があります。

于 2012-05-08T03:46:31.413 に答える
0

データを cvs としてエクスポートし、手動で SQLite でテーブル スキーマを再作成する方がよい場合があります。

于 2012-05-08T02:34:02.507 に答える
0

これが私のアプリのサンプルコードです。ローカル DB(SQLite) と Web SQL db があります。

public class DatabaseHandler extends SQLiteOpenHelper {

// All Static variables
// Database Version
private static final int DATABASE_VERSION = 1;

// Database Name
private static final String DATABASE_NAME = "android_api";

// Login table name
private static final String TABLE_LOGIN = "login";

// Login Table Columns names
private static final String KEY_ID = "id";
private static final String KEY_NAME = "name";
public static final String KEY_EMAIL = "email";
private static final String KEY_UID = "uid";
private static final String KEY_CREATED_AT = "created_at";

public DatabaseHandler(Context context) {
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
}

// Creating Tables
@Override
public void onCreate(SQLiteDatabase db) {
    String CREATE_LOGIN_TABLE = "CREATE TABLE " + TABLE_LOGIN + "("
            + KEY_ID + " INTEGER PRIMARY KEY,"
            + KEY_NAME + " TEXT,"
            + KEY_EMAIL + " TEXT UNIQUE,"
            + KEY_UID + " TEXT,"
            + KEY_CREATED_AT + " TEXT" + ")";
    db.execSQL(CREATE_LOGIN_TABLE);
}

// Upgrading database
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    // Drop older table if existed
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_LOGIN);

    // Create tables again
    onCreate(db);
}

/**
 * Storing user details in database
 * */
public void addUser(String name, String email, String uid, String created_at) {
    SQLiteDatabase db = this.getWritableDatabase();

    ContentValues values = new ContentValues();
    values.put(KEY_NAME, name); // Name
    values.put(KEY_EMAIL, email); // Email
    values.put(KEY_UID, uid); // Email
    values.put(KEY_CREATED_AT, created_at); // Created At

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

public void addUser(String email) {
    SQLiteDatabase db = this.getWritableDatabase();

    ContentValues values = new ContentValues();
    values.put(KEY_EMAIL, email); // Email

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

public String getUser() {
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues values = new ContentValues();

    String user = values.getAsString(KEY_EMAIL);
    Log.v("DBH", user);
    db.close();
    return user;        
}

/**
 * Getting user data from database
 * */
public HashMap<String, String> getUserDetails(){
    HashMap<String,String> user = new HashMap<String,String>();
    String selectQuery = "SELECT  * FROM " + TABLE_LOGIN;

    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.rawQuery(selectQuery, null);
    // Move to first row
    cursor.moveToFirst();
    if(cursor.getCount() > 0){
        user.put("name", cursor.getString(1));
        user.put("email", cursor.getString(2));
        user.put("uid", cursor.getString(3));
        user.put("created_at", cursor.getString(4));
    }
    cursor.close();
    db.close();
    // return user
    return user;
}

/**
 * Getting user login status
 * return true if rows are there in table
 * */
public int getRowCount() {
    String countQuery = "SELECT  * FROM " + TABLE_LOGIN;
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.rawQuery(countQuery, null);
    int rowCount = cursor.getCount();
    db.close();
    cursor.close();

    // return row count
    return rowCount;
}

public String returnRows() {
    String response = "";
    String countQuery = "SELECT * FROM " + TABLE_LOGIN;
    SQLiteDatabase db = this.getReadableDatabase();
    for (int j = 0; j < getRowCount(); j++) {
        Cursor cursor = db.rawQuery(countQuery, null);
        response += cursor.getColumnName(j);
    }
    Log.v("LT", response);
    return response;
}

/**
 * Re crate database
 * Delete all tables and create them again
 * */
public void resetTables(){
    SQLiteDatabase db = this.getWritableDatabase();
    // Delete All Rows
    db.delete(TABLE_LOGIN, null, null);
    db.close();
}

}

addUser メソッドは Web DB からデータを取得し、ローカルに保存します。以下は、使用時の addUser メソッドを囲むコードです。

    try {
        if (json.getString(KEY_SUCCESS) != null) {
            String res = json.getString(KEY_SUCCESS);

            if(Integer.parseInt(res) == 1){
                //user successfully logged in
                // Store user details in SQLite Database
                DatabaseHandler db = new DatabaseHandler(activity.getApplicationContext());
                JSONObject json_user = json.getJSONObject("user");
                //Log.v("name", json_user.getString(KEY_NAME));
                // Clear all previous data in database
                userFunction.logoutUser(activity.getApplicationContext());
                db.addUser(json_user.getString(KEY_NAME), json_user.getString(KEY_EMAIL), 
                        json.getString(KEY_UID), json_user.getString(KEY_CREATED_AT));                        

                responseCode = 1;
                // Close Login Screen
                //finish();

            }else{
                responseCode = 0;
                // Error in login
            }
        }

    } catch (NullPointerException e) {
        e.printStackTrace();

    }
    catch (JSONException e) {
        e.printStackTrace();
    }

    return responseCode;
}
于 2012-05-08T04:06:59.453 に答える
0

SQLite と MySQL で実装されている SQL 言語が異なるため、MySQL からのインポートはおそらく機能しません。

sql ファイルを調べて、SQLite でサポートされていないデータ型コマンドが使用されているかどうかを確認します。

于 2012-05-08T02:24:50.073 に答える
0

私がやったことは、各テーブルをCSVとしてエクスポートすることで、テーブルの値が得られました。あとは、テーブル ヘッダーを変更するだけで、sqlite ファイルを完成させることができました。これには少し時間がかかりましたが、最終的にはうまくいきました。

于 2012-11-07T22:45:17.493 に答える
0

解決策が 1 つ見つかりました。まず、MySql ファイルを開いて余分なテキストを削除するだけです。その後、SQliteDb ブラウザで、テーブルまたは MySQl ファイルと同じ列を含む必要があるデータベースを作成する必要があります。その後、SQlite でその (Mysql) ファイルを開くかインポートします。 DB ブラウザ。Sqlite データベースに正常に変換されます。詳細なヘルプまたは手順については、次のチュートリアルを参照してください: https://youtu.be/UcAHsm9iwpw ありがとう

于 2017-06-03T18:47:12.047 に答える