2013-11-24 90 views
0

創建我有一個數據庫已經在遠程數據庫(MySQL的)定義的本地數據庫表結構,用於測試目的,它僅包含一個表SQLite的 - 使用遠程數據庫

 
Table Food (
    fid char(5) NOT NULL PRIMARY KEY, 
    fName varchar(20) NOT NULL 
) 

我的部分功能是寫一個Android應用程序將檢查本地數據庫是否存在,如果不存在,它將根據遠程的數據庫表結構創建表。問題是,如何在不對sql語句進行硬編碼的情況下創建與遠程數據庫中相同的表。

我知道JSON可以用來從遠程數據庫獲取數據到Android,但它似乎很難輕鬆支持這個功能? 我該怎麼做?

+0

創建'PHP'腳本會返回'JSON',如果db存在則返回1,否則返回0。創建'GET'請求並檢查結果。 – Sajmon

+0

Geralt - 我認爲存在的測試是在本地的android分貝,所以沒有PHP/JSON需要那裏 - 這是微不足道的。該提取大概是爲REMOTE數據庫上的完整表結構。 – jkhouw1

+0

有一個測試已經寫在我的android應用程序中,我所問的主要問題是:如何複製(或創建)與我的遠程數據庫服務器中的表相同的表。 –

回答

0

這樣做的典型方式是通過中間的Web服務。 enter image description here 不過,至少有一個博客帖子在那裏如果有人直接連接到MySQL數據庫:here,他們基本上是添加了MySQL JDBC連接器(3.0.17)到項目

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.ResultSet; 
import java.sql.ResultSetMetaData; 
import java.sql.Statement; 

import android.app.Activity; 
import android.os.Bundle; 
import android.widget.TextView; 

public class MysqlSample01Activity extends Activity { 

    private static final String url = "jdbc:mysql://<server>:<port>/<database>"; 
    private static final String user = "<username>"; 
    private static final String pass = "<password>"; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     testDB(); 
    } 

    public void testDB() { 
     TextView tv = (TextView)this.findViewById(R.id.text_view); 
     try { 
      Class.forName("com.mysql.jdbc.Driver"); 
      Connection con = DriverManager.getConnection(url, user, pass); 
      /* System.out.println("Database connection success"); */ 

      String result = "Database connection success\n"; 
      Statement st = con.createStatement(); 
      ResultSet rs = st.executeQuery("select * from table_name"); 
      ResultSetMetaData rsmd = rs.getMetaData(); 

      while(rs.next()) { 
       result += rsmd.getColumnName(1) + ": " + rs.getInt(1) + "\n"; 
       result += rsmd.getColumnName(2) + ": " + rs.getString(2) + "\n"; 
       result += rsmd.getColumnName(3) + ": " + rs.getString(3) + "\n"; 
      } 
      tv.setText(result); 
     } 
     catch(Exception e) { 
      e.printStackTrace(); 
      tv.setText(e.toString()); 
     } 

    } 
} 
+0

「JDBC」在Android中不起作用。除非這是非常大的,否則通常不推薦使用這種主要用於Java'SE' a'EE'的大型庫。 – Sajmon