美好的一天,
我正在创建一个远程连接SQL数据库的android程序...我正在使用另一台计算机上的XAMPP ..这里是我连接的代码:( mysql-connector已导入)
String url = "jdbc:mysql://xxx.xxx.x.xx:3306/mydatabase?allowMultiQueries=true&useOldAliasMetadataBehavior=true";
String user = "root";
String password = "mypassword";
int a = 0;
try
{
Class.forName("com.mysql.jdbc.Driver");
a = 1;
Connection con = DriverManager.getConnection(url, user, password);
a = 12;
Statement st = con.createStatement();
a = 123;
ResultSet rs = st.executeQuery("SELECT * FROM mytable");
a = 1234;
while(rs.next())
{
}
tDisplayS.setText("YES");
}
catch(Exception e)
{
tDisplayS.setText(a+"");
}
当我运行我的程序时......我总是得到一个错误,只显示“1”......这段代码中似乎缺少什么?或者我做错了,请帮忙......
谢谢..
答案 0 :(得分:0)
我认为这是因为您正在尝试从主线程连接远程数据库。
尝试从Thread连接。
public void connectToMySql(){
new Thread(new Runnable() {
@Override
public void run() {
String url = "jdbc:mysql://xxx.xxx.x.xx:3306/mydatabase?allowMultiQueries=true&useOldAliasMetadataBehavior=true";
String user = "root";
String password = "mypassword";
int a = 0;
try
{
Class.forName("com.mysql.jdbc.Driver");
a = 1;
Connection con = DriverManager.getConnection(url, user, password);
a = 12;
Statement st = con.createStatement();
a = 123;
ResultSet rs = st.executeQuery("SELECT * FROM mytable");
a = 1234;
while(rs.next())
{
}
runOnUiThread(new Runnable() {
@Override
public void run() {
tDisplayS.setText("YES");
}
});
}
catch(final Exception e)
{
runOnUiThread(new Runnable() {
@Override
public void run() {
tDisplayS.setText(e.printStackTrace());
}
});
}
}
}).start();
}
只需复制此方法,然后从您活动的onCreate()
调用该方法。
注意:强>
确保您的数据库必须授予所有主机访问权限。 您需要触发查询以授予对数据库中所有远程主机的访问权。
这是授予app ip访问权限的查询。
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;