我已经在远程数据库(MySQL)中定义了一个数据库,出于测试目的,它只包含一个表
Table Food ( fid char(5) NOT NULL PRIMARY KEY, fName varchar(20) NOT NULL )
我的部分功能是编写一个Android应用程序,它将检查本地数据库是否存在,如果不存在,它将根据远程数据库表结构创建表。问题是,如何在不对sql语句进行硬编码的情况下创建与远程数据库中的表相同的表。
我知道JSON可以用来从远程数据库获取数据到Android,但它似乎不能轻易支持这个功能? 我怎么能这样做?
答案 0 :(得分:0)
这样做的典型方法是通过中间的Web服务。 但是,至少有一篇博客文章中有人直接连接到MySQL数据库:here,他们基本上将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());
}
}
}