关于android访问mysql,网上有很多大神写过文章,有很多种方法可以实现。大致实现的思路主要有两种:1、直接访问,在android工程中用jdbc直接连2、间接访问。在电脑端配置一个服务器,采用android——服务器——mysql这种形式。其中,第二种方式又可以用多种方式实现,比如android通过socket访问服务器,服务器再访问mysql,等等。本文就是用的第一种方法,关于网上很多人说用第一种方法不安全,容易被别人反编译,获取账号信息,我让账号信息全部实现手动输入,应该不存在安全问题。
准备工作:在写android工程前,首先要让电脑里的mysql准许远程访问,并且新建一个mysql账户(默认账户为root,属于管理员的,一般不采用),用于登陆数据库。其次,在数据库中新建数据库,新建表。最后下载jdbc驱动。
开始工作:
1、新建一个android工程,然后把驱动放进去,至于怎么放,可以百度,就不再仔细说了
2、工程中有两个类,mainactivity.java ,returnvalue.java
(1)、package com.android_mysql;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends Activity {
private EditText edi1;
private EditText edi2;
private EditText edi3;
private EditText edi4;
private EditText edi5;
private EditText edi6;
private Button but1;
private TextView txt1;
private Intent intent;
public static String result = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
edi1 = (EditText) findViewById(R.id.editText1);
edi2 = (EditText) findViewById(R.id.editText2);
edi3 = (EditText) findViewById(R.id.editText3);
edi4 = (EditText) findViewById(R.id.editText4);
edi5 = (EditText) findViewById(R.id.editText5);
edi6 = (EditText) findViewById(R.id.editText6);
but1 = (Button) findViewById(R.id.button1);
txt1 = (TextView) findViewById(R.id.textView1);
but1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO 自动生成的方法存根
String ip = edi1.getText().toString();
String port = edi2.getText().toString();
String data = edi3.getText().toString();
String user = edi4.getText().toString();
String password = edi5.getText().toString();
String sql = edi6.getText().toString();
// 是否为空?
if (ip.equals("") || port.equals("") || data.equals("")
|| user.equals("") || sql.equals("")
|| password.equals("")) {
txt1.setText("请将信息填写完整后提交!");
} else {
String driver = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://" + ip + ":" + port + "/" + data;
try {
// 加载驱动程序
Class.forName(driver);
// 连续数据库
Connection conn = DriverManager.getConnection(url,
user, password);
if (!conn.isClosed())
System.out
.println("Succeeded connecting to the Database!");
// statement用来执行SQL语句
Statement statement = conn.createStatement(
ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
// 结果集
ResultSet rs = statement.executeQuery(sql);
ResultSetMetaData rsmd = rs.getMetaData();
int columnCount = rsmd.getColumnCount();
for (int i = 0; i < columnCount; i++)
result = result + rsmd.getColumnName(i + 1) + "\t";
result = result + "\n";
while (rs.next()) {
for (int i = 1; i <= columnCount; i++)
result = result + rs.getString(i) + "\t";
result = result + "\n";
}
rs.close();
conn.close();
intent = new Intent(MainActivity.this,
ReturnValue.class);
startActivity(intent);
} catch (ClassNotFoundException e) {
System.out.println("Sorry,can`t find the Driver!");
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
(2)、package com.android_mysql;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class ReturnValue extends Activity{
private EditText edi1;
private Button but1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.returnvalue);
edi1 = (EditText)findViewById(R.id.editText7);
but1 = (Button)findViewById(R.id.button2);
edi1.setText(MainActivity.result);
but1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
MainActivity.result="";
ReturnValue.this.finish();
}
});
}
}
(3)、main.xml
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
android:id="@+id/editText1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="5dp"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:layout_marginTop="30dp"
android:ems="10"
android:hint="Mysql服务器地址" />
android:id="@+id/editText2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/editText3"
android:layout_below="@+id/editText1"
android:layout_margin="5dp"
android:layout_marginTop="14dp"
android:ems="10"
android:hint="端口号" >
android:id="@+id/editText3"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/editText2"
android:layout_margin="5dp"
android:ems="10"
android:hint="数据库名" />
android:id="@+id/editText4"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/editText3"
android:layout_margin="5dp"
android:ems="10"
android:hint="用户名" />
android:id="@+id/editText5"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/editText4"
android:layout_margin="5dp"
android:ems="10"
android:hint="密码" />
android:id="@+id/editText6"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/editText5"
android:layout_marginBottom="12dp"
android:ems="10"
android:gravity="top"
android:hint="SQL语句"
android:minLines="5"
android:text="select * from courierinfo ;" />
android:id="@+id/textView1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_above="@+id/button1"
android:layout_alignParentLeft="true"
android:layout_below="@id/editText6"
android:layout_margin="5dp"
android:gravity="center" />
android:id="@+id/button1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_marginBottom="17dp"
android:text="提 交"
android:textSize="30sp" />
(4)、returnvalue.xml
android:layout_width="match_parent"
android:layout_height="match_parent" >
android:id="@+id/editText7"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_marginBottom="5dp"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:layout_marginTop="30dp"
android:ems="10"
android:gravity="top"
android:minLines="10"
android:textSize="13sp" >
android:id="@+id/button2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/editText7"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:layout_marginTop="32dp"
android:text="返 回"
android:textSize="30sp" />
3、最后,在程序清单中要添加
OK了,大功告成,真机测试完美运行,真机测试时,要把手机连在和电脑同一个网段中。最后,想要源码的Call我,qq:540886047,欢迎一起讨论