微信小程序连接云服务器上的Mysql
一、思路
对于微信小程序来说如果要访问外部的的服务器需要发起HTTPS网络请求,需要事先设置域名(小程序只可以和指定的域名进行网络通信)。所以我们需要写一个可以对数据操作程序并部署在服务器上,通过https请求发送指定的code来调用方法。
二、操作(以我最近做的课程设计为例)
需求实现:微信小程序发送一个code,部署在云端的java程序接收到微信发送的指令后根据不同的指令执行对数据库的操作
1)首先写一个java程序来对云服务器上的mysql进行操作
我是用的是eclipse编写,首先创建一个名为wechatlink的web工程

在WebContent/WEB-INF/lib/ 目录下添加jar包(网上下载后直接复制到指定路径即可)

在图中目录添加c3p0文件

编辑c3p0:
c3p0.jdbcUrl=jdbc:mysql://服务器公网地址:3306/数据库名?userUnicode=true&characterEncoding=UTF-8
c3p0.driverClass=com.mysql.jdbc.Driver
c3p0.user=root
c3p0.password=云数据库密码
c3p0.acquireIncrement=3
c3p0.idleConnectionTestPeriod=60
c3p0.initialPoolSize=10
c3p0.maxIdleTime=60
c3p0.maxPoolSize=20
c3p0.maxStatements=100
c3p0.minPoolSize=5
编写Data类
package cn.smxy.server;
public class Data {private String number;private String time;public Data() {super();// TODO Auto-generated constructor stub}public Data(String number, String time) {super();this.number = number;this.time = time;}public String getNumber() {return number;}public void setNumber(String number) {this.number = number;}public String getTime() {return time;}public void setTime(String time) {this.time = time;}@Overridepublic String toString() {return "Data [number=" + number + ", time=" + time + "]";}
}
编写数据库操作类Mysql_DAO
package cn.smxy.server;import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import cn.smxy.server.*;
import cn.smxy.dbpool.DBconnection;public class Mysql_DAO {//查找全部数据public List<Data> Queryalldata() throws Exception{Connection conn=DBconnection.getDbconnectionFromPool();String query_sensor_sql="select * from t_data order by time desc";//按照时间从大到小排序PreparedStatement statement=conn.prepareStatement(query_sensor_sql);ResultSet resultSet=statement.executeQuery();List<Data> datas=new ArrayList<Data>();while(resultSet.next()) {datas.add(new Data(resultSet.getString(1),resultSet.getString(2)));}resultSet.close();conn.close();return datas;}
}
编写servlet调用数据库操作
package cn.smxy.server;import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import net.sf.json.JSONArray;
import net.sf.json.JSONObject;/*** Servlet implementation class QueryAllData*/
@WebServlet("/QueryAllData")
public class QueryAllData extends HttpServlet {private static final long serialVersionUID = 1L;/*** @see HttpServlet#HttpServlet()*/public QueryAllData() {super();// TODO Auto-generated constructor stub}/*** @see Servlet#init(ServletConfig)*/public void init(ServletConfig config) throws ServletException {// TODO Auto-generated method stub}/*** @see Servlet#destroy()*/public void destroy() {// TODO Auto-generated method stub}/*** @see HttpServlet#service(HttpServletRequest request, HttpServletResponse response)*/protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stubMysql_DAO sqldao = new Mysql_DAO();Data data = new Data();PrintWriter out = response.getWriter();String code = request.getParameter("code");try { JSONArray jsonArray = new JSONArray();JSONObject jsonObject = new JSONObject();if(code.equals("0")) {//code=0时查找全部数据 List<Data> list = sqldao.Queryalldata();for(int i=0;i<list.size();i++) {//使用for循环将数据逐条放入jsonObject.put("number", list.get(i).getNumber());jsonObject.put("time", list.get(i).getTime());jsonArray.add(jsonObject);}out.println(jsonArray);//将数据传回微信小程序}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}
}
在写完以上代码后将代码打包成war文件并部署到云端
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2)编写小程序端代码:
首先将微信开发者工具中的不校验合法域名勾选,因为微信小程序规定wx.request的请求路径需要通过验证的域名,因为我只是做课程设计,只需要演示结果即可。所以如果同样没有购买域名的开发者需要将不校验合法域名选项勾选。

界面Alldata.wxml
<view class="content"><view class="display-data"><text class="tem-data">温度</text><text class="time-data">时间</text><scroll-view class="display-data" scroll-x="true" wx:for="{{alldata}}" wx:key="index" style="height: 80rpx;"><text class="item-data">{{item.number}}</text><text class="item-data">{{item.time}}</text></scroll-view></view>
</view>
Alldata.js
我把函数放在了监听界面加载函数(onLoad函数)里,每次只要加载界面就会自动执行
// pages/Alldata/Alldata.js
Page({/*** 页面的初始数据*/data: {alldata: [],},/*** 生命周期函数--监听页面加载*/onLoad: function (options) {var that = this;wx.request({url: 'http://公网ip地址:8080/Wechatlink/QueryAllData',//传过去的code=0,查询全部数据data: {code: 0},method: 'GET',header: {'content-type': 'application/json'},success: function (res) {that.setData({alldata: res.data})},fail: function (res) {console.log('连接失败')}})},
})
预览效果如下

对比Mysql的表无误,大功告成

以上代码以及注释的表述有不合理之处欢迎指正
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
