2012-05-08 34 views
1

我有一個數據庫的SQL格式,我需要做一個SQLite副本,以便將其添加到我正在創建的Android應用程序中。SQL導入SQLite

到目前爲止,我還沒有爲我工作。我試圖將SQL導入SQLite數據庫瀏覽器,但它不能正確導入,它總是給出一個錯誤聲明。我試圖創建一個數據庫,然後導入表,但它崩潰了。我試過使用sqlite3通過終端(我使用Mac,如果這將有所作爲),但.import文件表格格式不起作用,它說:「錯誤:沒有這樣的表:TABLE」。我試過一個空表使用「CREATE TABLE test42」創造那麼」 .IMPORT TEST.SQL test42和變型,但它說:‘錯誤:附近的‘測試’:。語法錯誤’

我堅持

任何幫助將極大地幫助。謝謝。

+0

從哪裏導出數據庫的SQL格式? SQL不是跨供應商100%兼容。這將有助於查看sql文件或其使用的命令示例。 –

+0

我將數據庫從phpMyAdmin導出爲sql文件格式 – Razgriz

+0

您無法創建名爲「table」的表...這是SQLite中的保留字 – Barak

回答

0

從MySQL導入可能不會,因爲通過SQLite和MySQL的執行SQL語言的不同工作。

期待通過SQL文件,看它是否使用data typescommands不支持的SQLite。

+0

因此,我將不得不以SQLite能夠導入它的方式來翻譯我的sql文件? – Razgriz

+0

是的。你可以試試這個:https://gist.github.com/943776。 –

+0

謝謝!很快就會嘗試! – Razgriz

0

將數據導出爲CVS並手動在SQLite中重新創建表模式可能會更好

+0

如果情況確實如此,我有很多條目需要處理。 :( – Razgriz

+0

最好的解決方案,導出到csv使用phpMyAdmin然後導入到SQLite數據庫瀏覽器。唯一的問題是我的文件路徑條目被扭曲,因爲\被認爲是一個轉義字符。 – Razgriz

0

phpMyAdmin生成的文件可能包含SQL命令來創建表和插入數據。在SQLite中運行這樣的文件的方法是使用sqlite3命令界面並使用.read命令。

不幸的是,由於您創建的.sql文件是針對MySQL的,因此它包含的命令不太可能與SQLite兼容。在可以由SQLite運行之前,您可能必須相當繁重地編輯.sql文件。

0

下面是我的應用程序的一些示例代碼。有一個本地數據庫(SQLite)和Web SQL數據庫。

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方法從網頁數據庫,並將其存儲在本地獲取數據。下面是使用時周圍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; 
} 
0

我最終什麼事做的是出口的每個表爲CSV,這給了我的表值。 我所需要做的就是修改表頭並完成我的sqlite文件。這個有點費時,但最終還是有訣竅。

0

我剛剛找到一個解決方案。 首先你只需要打開你的MySql文件並刪除額外的文本。之後在SQliteDb瀏覽器中你需要創建一個數據庫,它必須包含MySQl文件所具有的Table或Same列。之後,打開或導入那個(Mysql)文件SQlite數據庫瀏覽器。它會成功轉換成Sqlite數據庫。 有關更多幫助或過程..請參閱本教程: https://youtu.be/UcAHsm9iwpw 謝謝