在实现这个功能的时候,那个纠结啊,因为是新手,新接触的Android,然而做这个功能,百度出来的都是坑爹的答案,后来七凑八凑的终于弄出来了,记下来,让后面的同学们能够容易点!!
第一步:配好你的Servlet,里面写好你要连接数据的参数和sql语句
注:这里面引用的2中方法,注释的是常规的运用,利用内置的方法来操作数据库
而没有注释的方法是通过获取db.properties里面的配置来连接数据库,并且操作sql是利用jdbc来实现的
package com.soft.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.soft.util.DBUtil;
import java.sql.Connection;
import java.util.List;
import java.util.Map;
public class MysqlServlet extends HttpServlet{
private static final long serialVersionUID = -5963813531253551695L;
private String username;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// username = new String(req.getParameter("username").getBytes("ISO-8859-1"),"utf-8");
// try {
// Class.forName("com.mysql.jdbc.Driver").newInstance();
// Connection c = DriverManager.getConnection("jdbc:mysql://192.168.11.99:3306/fjtytest?user=lp&password=123456&useUnicode=true&characterEncoding=8859_1");
//
// Statement statement = c.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
// ResultSet result = statement.executeQuery("select tb.name,tb.addr,tb.tel,tb.manager,tb.manager_tel,tb.point_x,tb.point_y,c.CityName,p.DistrictName from tb_company tb join tb_city c on tb.city = c.CityID join tb_district p on tb.district = p.DistrictID where tb.id in (select company_id from tb_account where flag=1 and use_type=1 and check_company_id=3106 )");
// if(result != null){
// resp.setContentType("text/html;charset=UTF-8");
// PrintWriter writer = resp.getWriter();
// while (result.next()) {
// writer.print(result.getString("name")+",");
// writer.print(result.getString("addr")+",");
// writer.print(result.getString("tel")+",");
// writer.print(result.getString("manager")+",");
// writer.print(result.getString("manager_tel")+",");
// writer.print(result.getString("point_x")+",");
// writer.print(result.getString("point_y")+",");
// writer.print(result.getString("CityName")+",");
// writer.print(result.getString("DistrictName")+";");
// }
// }else{
// PrintWriter writer = resp.getWriter();
// writer.print("查询失败");
// }
// }
// catch (InstantiationException e) {
// e.printStackTrace();
// }catch (IllegalAccessException e) {
// e.printStackTrace();
// }catch (ClassNotFoundException e) {
// e.printStackTrace();
// } catch (SQLException e) {
// e.printStackTrace();
// }
String sql = "select tb.name,tb.addr,tb.tel,tb.manager,tb.manager_tel,tb.point_x,tb.point_y,c.CityName,p.DistrictName from tb_company tb join tb_city c on tb.city = c.CityID join tb_district p on tb.district = p.DistrictID where tb.id in (select company_id from tb_account where flag=1 and use_type=1 and check_company_id=3106 )";
List<Map> list = DBUtil.query(sql, new Object[]{});
if(list != null ){
resp.setContentType("text/html;charset=UTF-8");
PrintWriter writer = resp.getWriter();
for (Map map : list) {
writer.print(map.get("name")+",");
writer.print(map.get("addr")+",");
writer.print(map.get("tel")+",");
writer.print(map.get("manager")+",");
writer.print(map.get("manager_tel")+",");
writer.print(map.get("point_x")+",");
writer.print(map.get("point_y")+",");
writer.print(map.get("CityName")+",");
writer.print(map.get("DistrictName")+";");
}
}else{
PrintWriter writer = resp.getWriter();
writer.print("查询失败");
}
System.out.println(list);
}
}
需要的可以看看这是db.properties的配置,要的同学需要新建一个新文件,记得后缀为properties
# Storage connection
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://192.168.11.99:3306/fjtytest
user=lp
pwd=123456
#url_storage=http://www.mobile-exp.com/storage/stockDetailInterface.htm
#url_storage=http://192.168.1.198:8080/GS_DS_Storage/stockDetailInterface.htm
#backupmoblie_companyid####zhongyou inner ??
至于JDBC的内容就不发布了,应该都能自己实现了,如果要的话可以在评论中说
这边Servlet是配置好了,现在是Android这边需要实现的了
第二步:
url就是你配置的链接数据库的Serlvet的路径,例如:http://192.168.11.135:8081/MySql/pinlunServlet?username =**;这个可以通过传值到Servlet接受
里面的操作方法是我自己需要的,你可以根据你的需求去修改
/***
* 通过Url获取数据
*/
void seach() {
HttpGet httpGet = new HttpGet(url);
try {
HttpResponse response = new DefaultHttpClient().execute(httpGet);
if(response.getStatusLine().getStatusCode() < 2000){
result = EntityUtils.toString(response.getEntity());//获取响应的数据
strings = result.split(";");
}else{
Log.e("Err", "链接失败");
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
下面是我的AndroidManifest.xml的配置,仅供参考
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.baudumap"
android:versionCode="1"
android:versionName="1.0" >
<supports-screens
android:anyDensity="true"
android:largeScreens="true"
android:normalScreens="true"
android:resizeable="true"
android:smallScreens="true" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission>
<uses-sdk
android:minSdkVersion="10"
android:targetSdkVersion="18" >
</uses-sdk>
<instrumentation
android:name="android.test.InstrumentationTestRunner"
android:targetPackage="com.example.baudumap" >
</instrumentation>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" >
</uses-permission>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" >
</uses-permission>
<uses-permission android:name="android.permission.INTERNET" >
</uses-permission>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" >
</uses-permission>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" >
</uses-permission>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" >
</uses-permission>
<uses-permission android:name="android.permission.READ_PHONE_STATE" >
</uses-permission>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" >
</uses-permission>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" >
</uses-permission>
<uses-permission android:name="android.permission.READ_LOGS" >
</uses-permission>
<application
android:allowBackup="true"
android:icon="@drawable/wing"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<uses-library android:name="android.test.runner" />
<activity
android:name="com.example.baudumap.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service
android:name="com.baidu.location.f"
android:enabled="true"
android:process=":remote" >
</service>
</application>
</manifest>