我使用以下代码连接Android MySQL
中的localhost
。它仅显示catch部分中给出的操作。我不知道是否是连接问题。
package com.test1;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class Test1Activity extends Activity {
/** Called when the activity is first created. */
String str="new";
static ResultSet rs;
static PreparedStatement st;
static Connection con;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final TextView tv=(TextView)findViewById(R.id.user);
try
{
Class.forName("com.mysql.jdbc.Driver");
con=DriverManager.getConnection("jdbc:mysql://10.0.2.2:8080/example","root","");
st=con.prepareStatement("select * from country where id=1");
rs=st.executeQuery();
while(rs.next())
{
str=rs.getString(2);
}
tv.setText(str);
setContentView(tv);
}
catch(Exception e)
{
tv.setText(str);
}
}
}
当此代码执行时,它会在avd。
中显示“new”java.lang.management.ManagementFactory.getThreadMXBean, referenced from method com.mysql.jdbc.MysqlIO.appendDeadlockStatusInformation
Could not find class 'javax.naming.StringRefAddr', referenced from method com.mysql.jdbc.ConnectionPropertiesImpl$ConnectionProperty.storeTo
Could not find method javax.naming.Reference.get, referenced from method com.mysql.jdbc.ConnectionPropertiesImpl$ConnectionProperty.initializeFrom
有人能建议一些解决方案吗?并提前感谢
答案 0 :(得分:13)
您无法本机访问Android的MySQL数据库。编辑:实际上你可以使用JDBC,但不推荐(或者可能不起作用?)...见Android JDBC not working: ClassNotFoundException on driver
见
http://www.helloandroid.com/tutorials/connecting-mysql-database
Android无法直接连接到数据库服务器。所以我们 需要创建一个简单的Web服务,将请求传递给 数据库并将返回响应。
http://codeoncloud.blogspot.com/2012/03/android-mysql-client.html
对于大多数[好]用户来说,这可能没问题。但想象一下,你会得到一个能够掌握你的程序的黑客。我已经反编译了我自己的应用程序,可怕的是我见过的。如果他们将您的用户名/密码输入您的数据库并造成严重破坏,该怎么办?坏。
答案 1 :(得分:4)
此代码永久运行!由diko(土耳其)创建
public void mysql() {
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
thrd1 = new Thread(new Runnable() {
public void run() {
while (!Thread.interrupted()) {
try {
Thread.sleep(100);
} catch (InterruptedException e1) {
}
if (con == null) {
try {
con = DriverManager.getConnection("jdbc:mysql://192.168.1.45:3306/deneme", "ali", "12345");
} catch (SQLException e) {
e.printStackTrace();
con = null;
}
if ((thrd2 != null) && (!thrd2.isAlive()))
thrd2.start();
}
}
}
});
if ((thrd1 != null) && (!thrd1.isAlive())) thrd1.start();
thrd2 = new Thread(new Runnable() {
public void run() {
while (!Thread.interrupted()) {
if (con != null) {
try {
// con = DriverManager.getConnection("jdbc:mysql://192.168.1.45:3306/deneme", "ali", "12345");
Statement st = con.createStatement();
String ali = "'fff'";
st.execute("INSERT INTO deneme (name) VALUES(" + ali + ")");
// ResultSet rs = st.executeQuery("select * from deneme");
// ResultSetMetaData rsmd = rs.getMetaData();
// String result = new String();
// while (rs.next()) {
// result += rsmd.getColumnName(1) + ": " + rs.getInt(1) + "\n";
// result += rsmd.getColumnName(2) + ": " + rs.getString(2) + "\n";
// }
} catch (SQLException e) {
e.printStackTrace();
con = null;
}
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
} else {
try {
Thread.sleep(300);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
});
}
答案 2 :(得分:2)
如果你需要将你的应用程序连接到服务器,你可以通过PHP / MySQL和JSON http://www.androidhive.info/2012/05/how-to-connect-android-with-php-mysql/来实现.Mysql连接代码应该在AsynTask类中。不要在主线程中运行它。
答案 3 :(得分:0)
您想将数据库保留在移动设备上吗?使用sqlite而不是mysql。
如果想要将数据库保留在服务器上并从移动设备访问。使用Web服务来获取/修改数据。
答案 4 :(得分:0)
另一种方法是使用使用三层体系结构的虚拟JDBC驱动程序:您的JDBC代码通过HTTP发送到远程Servlet,该Servlet在将JDBC代码(配置和安全性)传递给MySql JDBC之前对其进行过滤驱动程序。结果通过HTTP发回。有一些免费软件使用这种技术。只是Google“基于HTTP的Android JDBC驱动程序”。
答案 5 :(得分:0)
public void testDB() {
TextView tv = (TextView) this.findViewById(R.id.tv_data);
try {
Class.forName("com.mysql.jdbc.Driver");
// perfect
// localhost
/*
* Connection con = DriverManager .getConnection(
* "jdbc:mysql://192.168.1.5:3306/databasename?user=root&password=123"
* );
*/
// online testing
Connection con = DriverManager
.getConnection("jdbc:mysql://173.5.128.104:3306/vokyak_heyou?user=viowryk_hiweser&password=123");
String result = "Database connection success\n";
Statement st = con.createStatement();
ResultSet rs = st.executeQuery("select * from tablename ");
ResultSetMetaData rsmd = rs.getMetaData();
while (rs.next()) {
result += rsmd.getColumnName(1) + ": " + rs.getString(1) + "\n";
}
tv.setText(result);
} catch (Exception e) {
e.printStackTrace();
tv.setText(e.toString());
}
}
答案 6 :(得分:0)
尝试将grags文件中的targetSdkVersion更改为8
targetSdkVersion 8