使用JDBC从Android连接到MySQL
我使用下面的代码从Android连接localhost
MySQL
。 它只显示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
任何人都可以提出解决scheme 并提前感谢
你不能从本地访问Android的MySQL数据库。 编辑:其实你可能能够使用JDBC,但它不被推荐(或可能无法正常工作?)…看到Android JDBC不工作:ClassNotFoundException驱动程序
看到
http://www.helloandroid.com/tutorials/connecting-mysql-database
Android无法直接连接到数据库服务器。 因此,我们需要创build一个简单的Web服务,将请求传递给数据库,并返回响应。
http://codeoncloud.blogspot.com/2012/03/android-mysql-client.html
对于大多数[好]用户,这可能是好的。 但是想象一下,你会得到一个黑客来抓住你的程序。 我已经反编译了我自己的应用程序,以及我见过的可怕的东西。 如果他们把你的用户名/密码到你的数据库并造成严重破坏? 坏。
此代码永久运行! 由diko(土耳其)创build
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(); } } } } }); }
如果你需要连接你的应用程序到一个服务器,你可以通过PHP / MySQL和JSON来实现它。http: //www.androidhive.info/2012/05/how-to-connect-android-with-php-mysql/ .Mysql连接代码应该在AsynTask类中。 不要在主线程中运行它。
你想保持你的数据库移动? 使用sqlite而不是mysql。
如果这个想法是保持服务器上的数据库和移动访问。 使用web服务来获取/修改数据。
另一种方法是使用三层体系结构的虚拟JDBC驱动程序:您的JDBC代码通过HTTP发送到远程Servlet,在将其传递给MySql JDBC驱动程序之前对其进行过滤(configuration和安全性)。 结果通过HTTP发送回去。 有一些免费软件使用这种技术。 只是谷歌“通过HTTP的Android JDBC驱动程序”。
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()); } }
尝试在gradle文件中将targetSdkVersion更改为8
targetSdkVersion 8