Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android SQLite-使用远程数据库创建本地数据库表结构_Android_Database_Sqlite - Fatal编程技术网

Android SQLite-使用远程数据库创建本地数据库表结构

Android SQLite-使用远程数据库创建本地数据库表结构,android,database,sqlite,Android,Database,Sqlite,我已经在远程数据库MySQL中定义了一个数据库,出于测试目的,它只包含一个表 Table Food ( fid char(5) NOT NULL PRIMARY KEY, fName varchar(20) NOT NULL ) 我的部分功能是编写一个Android应用程序,该应用程序将检查本地数据库是否存在,如果不存在,它将根据远程数据库表结构创建表。问题是,如何在不硬编码sql语句的情况下创建与远程数据库中的表相同的表 我知道JSON可以用来从远程数据库获取数据到Android,但它

我已经在远程数据库MySQL中定义了一个数据库,出于测试目的,它只包含一个表

Table Food ( fid char(5) NOT NULL PRIMARY KEY, fName varchar(20) NOT NULL ) 我的部分功能是编写一个Android应用程序,该应用程序将检查本地数据库是否存在,如果不存在,它将根据远程数据库表结构创建表。问题是,如何在不硬编码sql语句的情况下创建与远程数据库中的表相同的表

我知道JSON可以用来从远程数据库获取数据到Android,但它似乎不能轻松支持这个功能?
如何做到这一点?

< P>典型的方法是通过中间的Web服务。 然而,至少有一篇博文是有人直接连接到MySQL数据库的:他们基本上是将MySQL JDBC Connector 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());
        }   

    }
}

创建PHP脚本,该脚本将返回JSON,如果db存在,则返回1;如果不存在,则返回0。创建GET-request和check-result.Geralt——我认为存在性测试是在本地android db上进行的,因此不需要PHP/JSON——这很简单。提取大概是针对远程数据库上的完整表结构。我的android应用程序中已经编写了一个测试,我要问的主要问题是:如何复制或创建与远程数据库服务器中的表相同的表。您读过了吗?JDBC在android中不工作。除了非常大之外,一般不建议使用这种主要用于JavaSEAEE的大型库。