2013-11-24 60 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