京东Alpha平台开发笔记系列(三)
摘要:通过前面两篇文章的讲述,大致了解了JdAlpha平台前端开发的主要流程。接下来本篇文章主要讲述后台服务器端开发的主要流程。这里会涉及到后台服务器的搭建的内容,本篇文章就不以赘述,如需了解请读下面一篇文章。
WEB服务器搭建(Apache+Tomcat+eclipse)
首先献上代码:JdAlpha应用(佳宝服务)服务器端代码
有积分的支持一下,没有的也没关系我已将代码上传到(github代码库)。
本人学生一枚,希望可以多多与各位交流一下技术问题!
1、通讯机制
京东Alpha应用与后台服务器通讯的方式为发送post请求,所以后台服务器只需要能接收post请求即可。
默认大家已经搭建好服务器端,这里我是通过建立一个Web工程,通过servlet方式接收post请求,并把
请求数据进行解析处理。处理完成后返回需要播报的信息。
2、设计流程
建立web工程
配置.jsp/.xml文件
建立servlet逻辑
建立主处理文件.java文件
3、设计实践
建立工程与工程文件的配置这里均不赘述,这里直接从工程文件的进行讲解。
工程文件目录:
(1)web.xml文件配置
<servlet>
<servlet-name>Price</servlet-name>
<servlet-class>com.yxtt.hold.PriceSevlet</servlet-class>
</servlet> <servlet-mapping>
<servlet-name>Price</servlet-name>
<url-pattern>/price</url-pattern>
</servlet-mapping>
这里为servlet进行绑定接收处理的java类(即代码中的com.yxtt.hold.PriceSevlet),当有访问时直接将请求数据交给PriceServlet类进行个性化处理。
(2)PriceServlet类解析
首先上代码:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.nio.charset.StandardCharsets; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import org.apache.tomcat.util.codec.binary.Base64;
public class PriceSevlet extends HttpServlet {
public PriceSevlet() {
super();
} public void destroy() {
super.destroy(); // Just puts "destroy" string in log
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
} public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { response.setContentType("text/html");
request.getCharacterEncoding();
request.setCharacterEncoding(request.getCharacterEncoding()) ;
response.setCharacterEncoding("utf-8"); String param = getBodyData(request);
if (Base64.isBase64(param)) {
param = new String(Base64.decodeBase64(param), StandardCharsets.UTF_8);
}
System.out.println("param:" + param);
PrintWriter out = response.getWriter(); //反馈
out.write(DataProcess.dataprocess(param)); //DataProcess类为功能处理函数
out.flush();
out.close();
}
//格式化请求数据
public void init() throws ServletException {
}
//获取请求体中的字符串(POST)
private static String getBodyData(HttpServletRequest request) {
StringBuffer data = new StringBuffer();
String line = null;
BufferedReader reader = null;
try {
reader = request.getReader();
while (null != (line = reader.readLine()))
data.append(line);
} catch (IOException e) {
} finally {
}
return data.toString();
} }
此类为请求数据接收函数,将请求数据格式化,然后通过DataProcess类将格式化后的数据进行后续的数据分析、数据处理、数据反馈,反馈数据得出后,传入out.write()方法,即可进行输出反馈。
(3)DataProcess类解析
import org.eclipse.jdt.internal.compiler.batch.Main; import net.sf.json.JSONObject; public class DataProcess {
static String reback = null, welcome = "欢迎使用佳宝服务,你可以对我说:菜价、记账、或者查账单,若想离开请对我说,退出", errorRequest = "我不明白你想做什么,你可以说报菜价、记账、查账单等";
static boolean shouldEndSession = false;
static String priceTable="{\"vegetables\": {\"西红柿\": \"1.99\",\"黄瓜\": \"2.59\",\"尖椒\": \"1.99\", " +
"\"土豆\": \"1.29\", " +
"\"茄子\": \"1.59\", " +
"\"白菜\": \"1.29\", " +
"\"芹菜\": \"3.49\", " +
"\"菜花\": \"3.49\", " +
"\"蒜薹\": \"4.99\", " +
"\"胡萝卜\": \"1.19\", " +
"\"大葱\": \"2.29\", " +
"\"甘蓝\": \"1.29\" " +
"}, " +
"\"milk\": { " +
"\"牛奶\": \"2.25\", " +
"\"豆奶\": \"1.25\", " +
"\"花生奶\": \"1.59\" " +
"}, " +
"\"meat\": { " +
"\"五花肉\": \"9.90\", " +
"\"牛肉\": \"39.9\", " +
"\"鸡肉\": \"9.9\", " +
"\"鸡蛋\": \"3.79\", " +
"\"猪肉\": \"11.9\"," +
"\"排骨\": \"15.9\"" +
"}," +
"\"fruits\": {" +
"\"苹果\": \"5.99\"," +
"\"梨\": \"2.59\"," +
"\"柑橘\": \"5.59\"," +
"\"葡萄\": \"7.99\"," +
"\"香蕉\": \"2.99\"" +
"}" +
"}"; public static String dataprocess(String param) {
String requestType, requestIsNew;
requestType = extractionValue(param, "request","type", "", 2);
requestIsNew = extractionValue(param, "session","isNew", "", 2);
if(requestType.equals("IntentRequest")) {
switch(extractionValue(param, "request","intent", "name", 3)) {
case "Add.Alpha.CancelIntent":
reback = welcome;
break;
case "Alpha.HelpIntent":
reback = "欢迎使用佳宝服务的帮助,佳宝服务是一款致力于服务型的语音应用,在这里你可以查询菜价,记账单,查账单等操作,赶快试一试吧!";
break;
case "Alpha.CancelIntent":
reback = "已退出,期待您下次使用,佳宝再见!";
break;
case "MainQuery":
reback = MainQuery.MainQuery(extractionValue(param, "request","intent", "slots", 3));
break;
case "Effect":
reback = EffectFun(extractionValue(param, "request","intent", "slots", 3),param);
System.out.println(reback);
break;
case "CountQuery":
reback = CountQuery.CountQuery(extractionValue(param, "session","user", "userId", 3),extractionValue(param, "request","intent", "slots", 3));
break;
case "WriteCount":
reback = WriteCount.WriteCount(extractionValue(param, "request","intent", "slots", 3),extractionValue(param, "session","user", "userId", 3));
break;
}
System.out.println(extractionValue(param, "request","intent", "name", 3));
}else if(requestType.equals("LaunchRequest")){
if(requestIsNew.equals("true"))
reback = welcome;
else
reback = errorRequest;
} String backinfo = "{\"contexts\":{},\"directives\":[],\"response\":{\"output\":{\"type\":\"PlainText\",\"text\":\""+reback+"\"}},\"shouldEndSession\":"+shouldEndSession+",\"version\":\"1.0\"}";
return backinfo;
} private static String EffectFun(String slots, String param) {
String effectName = extractionValue(slots, "myEffect", "value", "", 2);
System.out.println(effectName);
if(effectName.equals("我的账单")) {
return CountQuery.CountQuery(extractionValue(param, "session","user", "userId", 3),"null");//先查询数据库然后进行反馈
}else if(effectName.equals("我要记账")) {
return "请您说今天干什么花了多少钱,如果不知道记账规则请说账本规则。";
}else if(effectName.equals("报菜价")) {
return "西红柿1.99元一斤,黄瓜2.59元一斤,土豆1.29元一斤等,你可以直接问某种菜品的价格,如白菜的价格,所有菜价均来源于网络收集,因各地有所差异,这里仅供参考,具体以当地为准!";
}else if(effectName.equals("不用了")) {
return "好的,期待您下次使用!再见!";
}else if(effectName.equals("账本规则")) {
return "我们将消费类型归纳为五类:娱乐、学习、衣着、出行、食宿,你可以说今天娱乐花了40元";
}else {
return errorRequest;
}
//return extractionValue; } public static String extractionValue(String obj, String key1, String key2, String key3, int layer){
String outData = null;
//try {
if(layer==1){
JSONObject jsonObject = new JSONObject().fromObject(obj);
Object data=jsonObject.get(key1);
outData = data.toString();
} else if (layer == 2){
JSONObject jsonObject = JSONObject.fromObject(obj);
Object data=jsonObject.get(key1);
jsonObject = JSONObject.fromObject(data.toString());
data=jsonObject.get(key2);
outData = data.toString();
} else if (layer == 3){
JSONObject jsonObject = new JSONObject().fromObject(obj);
Object data=jsonObject.get(key1);
jsonObject = new JSONObject().fromObject(data.toString());
data=jsonObject.get(key2);
jsonObject = new JSONObject().fromObject(data.toString());
data=jsonObject.get(key3);
outData = data.toString();
} return outData;
} }
这里返回的数据简单粗暴,中文反馈,叮咚音箱可以直接对反馈的文字进行读取。
此类添加了一个json类,import net.sf.json.JSONObject;需要读者自行下载添加。
首先,dataprocess()方法接收到格式化的字符串后(字符串均为json数据格式),通过json数据处理函数获取功能头的名称,接着按照不同的功能进行以下流程。
如:extractionValue(param, "request","intent", "name", 3),通过本句程序的调用,直接可以得到功能的名称:
"Add.Alpha.CancelIntent" //JD官方取消意图
"Alpha.HelpIntent" //JD官方帮助意图
"Alpha.CancelIntent" //JD官方取消意图(与第一个的区别可参考JD文档)
"MainQuery" //自定义价格广播功能
"Effect" //自定义功能汇总接口
"CountQuery" //自定义价格询问功能
"WriteCount" //自定义记账功能
通过以上功能分类机制将 不同的功能的处理反馈分类处理即可完成整体的功能部署。
(4)其他各功能类(这里直接上代码,不进行阐述,都很简单)
Count.java
package com.yxtt.hold; public class Count {
String entertainmentCount, studyCount, clothCount, travelCount, eatCount, sumCount;
public String getEntainmentCount() {
return entertainmentCount;
}
public void setEntainmentCount(String entertainmentCount) {
this.entertainmentCount = entertainmentCount;
}
public String getStudyCount() {
return studyCount;
}
public void setStudyCount(String studyCount) {
this.studyCount = studyCount;
}
public String getClothCount() {
return clothCount;
}
public void setClothCount(String clothCount) {
this.clothCount = clothCount;
}
public String getTravelCount() {
return travelCount;
}
public void setTravelCount(String travelCount) {
this.travelCount = travelCount;
}
public String getEatCount() {
return eatCount;
}
public void setEatCount(String eatCount) {
this.eatCount = eatCount;
}
public String getSumCount() {
return sumCount;
}
public void setSumCount(String sumCount) {
this.sumCount = sumCount;
}
}
MainQuery.java
public class MainQuery {
public static String MainQuery(String slots) { String meatMatch,vegetableMatch,milkMatch,meatF,vegetableF,milkF,reBack=null;
meatMatch = DataProcess.extractionValue(slots,"Meats","matched","",2);
vegetableMatch = DataProcess.extractionValue(slots,"Vegetable","matched","",2);
milkMatch = DataProcess.extractionValue(slots,"Milk","matched","",2); if(meatMatch.equals("true")) {
meatF = DataProcess.extractionValue(slots,"Meats","value","",2);
reBack = meatF +"的单价为"+DataBaseCon.queryOne("meatprice", "price", meatF, "name")+"元!";
}else if(vegetableMatch.equals("true")) {
vegetableF = DataProcess.extractionValue(slots,"Vegetable","value","",2);
reBack = vegetableF +"的单价为"+DataBaseCon.queryOne("vegetableprice", "price", vegetableF, "name")+"元";
}else if(milkMatch.equals("true")) {
milkF = DataProcess.extractionValue(slots,"Milk","value","",2);
reBack = milkF +"的单价为"+DataBaseCon.queryOne("milkprice", "price", milkF, "name")+"元!";
} if(meatMatch.equals("false")&&vegetableMatch.equals("false")&&milkMatch.equals("false")) {
/*meatF = DataProcess.extractionValue(slots,"Meats","value","",2);
if(meatF!="Meats") {
reBack = "您所查询的"+meatF+"还未收录,请换一个再问。";
}
vegetableF = DataProcess.extractionValue(slots,"Vegetable","value","",2);
if(vegetableF!="Vegetable") {
reBack = "您所查询的"+vegetableF+"还未收录,请换一个再问。";
}*/
milkF = DataProcess.extractionValue(slots,"Milk","value","",2);
if(milkF!="Milk") {
reBack = "抱歉,您所查询的"+milkF+"还未收录,我们会尽快收录。";
}
}
return reBack; }
}
CountQuery.java
public class MainQuery {
public static String MainQuery(String slots) { String meatMatch,vegetableMatch,milkMatch,meatF,vegetableF,milkF,reBack=null;
meatMatch = DataProcess.extractionValue(slots,"Meats","matched","",2);
vegetableMatch = DataProcess.extractionValue(slots,"Vegetable","matched","",2);
milkMatch = DataProcess.extractionValue(slots,"Milk","matched","",2); if(meatMatch.equals("true")) {
meatF = DataProcess.extractionValue(slots,"Meats","value","",2);
reBack = meatF +"的单价为"+DataBaseCon.queryOne("meatprice", "price", meatF, "name")+"元!";
}else if(vegetableMatch.equals("true")) {
vegetableF = DataProcess.extractionValue(slots,"Vegetable","value","",2);
reBack = vegetableF +"的单价为"+DataBaseCon.queryOne("vegetableprice", "price", vegetableF, "name")+"元";
}else if(milkMatch.equals("true")) {
milkF = DataProcess.extractionValue(slots,"Milk","value","",2);
reBack = milkF +"的单价为"+DataBaseCon.queryOne("milkprice", "price", milkF, "name")+"元!";
} if(meatMatch.equals("false")&&vegetableMatch.equals("false")&&milkMatch.equals("false")) {
/*meatF = DataProcess.extractionValue(slots,"Meats","value","",2);
if(meatF!="Meats") {
reBack = "您所查询的"+meatF+"还未收录,请换一个再问。";
}
vegetableF = DataProcess.extractionValue(slots,"Vegetable","value","",2);
if(vegetableF!="Vegetable") {
reBack = "您所查询的"+vegetableF+"还未收录,请换一个再问。";
}*/
milkF = DataProcess.extractionValue(slots,"Milk","value","",2);
if(milkF!="Milk") {
reBack = "抱歉,您所查询的"+milkF+"还未收录,我们会尽快收录。";
}
}
return reBack; }
}
WriteCount.java
import java.util.Calendar; public class WriteCount {
public static String WriteCount(String slots, String userID) {
String days,countType, userId;
int money; if(DataProcess.extractionValue(slots, "countType","matched", "", 2).equals("false")) {
return "暂时不支持记录这个分类,我们将消费类型归纳为五类:娱乐、学习、衣着、出行、食宿,你可以说今天娱乐花了40元。";
}else if(DataProcess.extractionValue(slots, "Days","matched", "", 2).equals("false")&&DataProcess.extractionValue(slots, "countType","matched", "", 2).equals("true")){
countType = DataProcess.extractionValue(slots, "countType","value", "", 2);
money = Integer.valueOf(DataProcess.extractionValue(slots, "number","value", "", 2));
userId = userID.substring(userID.indexOf(".",userID.indexOf(".")+1 )+1);
System.out.println("days:null"+",countType:"+countType+",money:"+money+".");
//System.out.println(userID.substring(userID.indexOf(".",userID.indexOf(".")+1)+1));
//System.out.println(DataBaseCon.queryUserID(userID.substring(userID.indexOf(".",userID.indexOf(".")+1 )+1)));
// 获取当前年份、月份、日期
Calendar cale = null;
String thisDate, countDate;//当前日期与记账日期
cale = Calendar.getInstance();
int year = cale.get(Calendar.YEAR);
int month = cale.get(Calendar.MONTH) + 1;
int day = cale.get(Calendar.DATE);
if(month<10) {
thisDate = String.valueOf(year)+"-0"+String.valueOf(month)+"-"+String.valueOf(day);
if(day<10)
thisDate = String.valueOf(year)+"-0"+String.valueOf(month)+"-0"+String.valueOf(day);
}else {
thisDate = String.valueOf(year)+"-"+String.valueOf(month)+"-"+String.valueOf(day);
if(day<10)
thisDate = String.valueOf(year)+"-"+String.valueOf(month)+"-0"+String.valueOf(day);
}
if(month<10) {
countDate = String.valueOf(year)+"-0"+String.valueOf(month)+"-"+String.valueOf(day);
if(day<10)
countDate = String.valueOf(year)+"-0"+String.valueOf(month)+"-0"+String.valueOf(day);
}else {
countDate = String.valueOf(year)+"-"+String.valueOf(month)+"-"+String.valueOf(day);
if(day<10)
countDate = String.valueOf(year)+"-"+String.valueOf(month)+"-0"+String.valueOf(day);
}
switch (countType) {
case "娱乐":
countType = "entertainment";
break;
case "学习":
countType = "study";
break;
case "衣着":
countType = "cloth";
break;
case "出行":
countType = "travel";
break;
case "食宿":
countType = "eat";
break;
}
if(DataBaseCon.queryUserID(userId)) {
DataBaseCon.insertCount(countDate, countType, money, thisDate, userId);
}else {
if(DataBaseCon.insertData("userlist", "userId", userId)) {
System.out.println("用户信息插入成功!下面即将创建用户表。。。");
if(DataBaseCon.newTable(userId))
System.out.println("用户表创建完成,下面插入数据。。。。");
DataBaseCon.insertCount(countDate, countType, money, thisDate, userId);
}
}
return "已为您记录到账单。";
}else {
days = DataProcess.extractionValue(slots, "Days","value", "", 2);
countType = DataProcess.extractionValue(slots, "countType","value", "", 2);
money = Integer.valueOf(DataProcess.extractionValue(slots, "number","value", "", 2));
userId = userID.substring(userID.indexOf(".",userID.indexOf(".")+1 )+1);
System.out.println("days:"+days+",countType:"+countType+",money:"+money+".");
//System.out.println(userID.substring(userID.indexOf(".",userID.indexOf(".")+1)+1));
//System.out.println(DataBaseCon.queryUserID(userID.substring(userID.indexOf(".",userID.indexOf(".")+1 )+1)));
// 获取当前年份、月份、日期
Calendar cale = null;
String thisDate, countDate;//当前日期与记账日期
cale = Calendar.getInstance();
int year = cale.get(Calendar.YEAR);
int month = cale.get(Calendar.MONTH) + 1;
int day = cale.get(Calendar.DATE);
if(month<10) {
thisDate = String.valueOf(year)+"-0"+String.valueOf(month)+"-"+String.valueOf(day);
if(day<10)
thisDate = String.valueOf(year)+"-0"+String.valueOf(month)+"-0"+String.valueOf(day);
}else {
thisDate = String.valueOf(year)+"-"+String.valueOf(month)+"-"+String.valueOf(day);
if(day<10)
thisDate = String.valueOf(year)+"-"+String.valueOf(month)+"-0"+String.valueOf(day);
}
//词语分析
switch(days) {
case "前天":
day = day-2;
break;
case "昨天":
day = day-1;
break;
case "今天":
break; }
if(month<10) {
countDate = String.valueOf(year)+"-0"+String.valueOf(month)+"-"+String.valueOf(day);
if(day<10)
countDate = String.valueOf(year)+"-0"+String.valueOf(month)+"-0"+String.valueOf(day);
}else {
countDate = String.valueOf(year)+"-"+String.valueOf(month)+"-"+String.valueOf(day);
if(day<10)
countDate = String.valueOf(year)+"-"+String.valueOf(month)+"-0"+String.valueOf(day);
}
switch (countType) {
case "娱乐":
countType = "entertainment";
break;
case "学习":
countType = "study";
break;
case "衣着":
countType = "cloth";
break;
case "出行":
countType = "travel";
break;
case "食宿":
countType = "eat";
break;
}
if(DataBaseCon.queryUserID(userId)) {
DataBaseCon.insertCount(countDate, countType, money, thisDate, userId);
}else {
if(DataBaseCon.insertData("userlist", "userId", userId)) {
System.out.println("用户信息插入成功!下面即将创建用户表。。。");
if(DataBaseCon.newTable(userId))
System.out.println("用户表创建完成,下面插入数据。。。。");
DataBaseCon.insertCount(countDate, countType, money, thisDate, userId);
}
}
return "已为您记录到账单。";
}
}
}
DataBaseCon.java
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException; import com.mysql.jdbc.Connection;
import com.mysql.jdbc.Statement; public class DataBaseCon {
static boolean flag;
//声明Connection对象
static Connection con;
static //驱动程序名
String driver = "com.mysql.jdbc.Driver";
//URL指向要访问的数据库名mydata
static String url = "jdbc:mysql://localhost:3306/jdalpha";
//MySQL配置时的用户名
static String user = "root";
//MySQL配置时的密码
static String password = "";
//遍历查询结果集
public static boolean newTable(String userId) {
String sqlStr = "CREATE TABLE "+ userId + "(date Date, entertainment Int(55), study Int(55), cloth Int(55), travel Int(55), eat Int(55))";
return dataSQL(sqlStr);
}
public static boolean insertCount(String countDate, String countType, int money, String thisDate, String userId) { boolean flag = queryDate(userId, thisDate);
if(flag) {
if(updateMyCount(userId, countDate, countType, String.valueOf(money)))
System.out.println("数据已存储!");
}else { flag = insertData(userId, "date", thisDate); //建立thisData记录
if(flag)
System.out.println("已生成date记录!");
if(updateMyCount(userId, countDate, countType, String.valueOf(money)))
System.out.println("数据已存储!");
}
return flag;
}
public static Count queryCount(String userId, String date) {
Count count = new Count();
String entertainmentCount, studyCount, clothCount, travelCount, eatCount, sumCount;
entertainmentCount = queryOne(userId, "entertainment", date, "date");
studyCount = queryOne(userId, "study", date, "date");
clothCount = queryOne(userId, "cloth", date, "date");
travelCount = queryOne(userId, "travel", date, "date");
eatCount = queryOne(userId, "eat", date, "date");
if(entertainmentCount == null)
entertainmentCount ="0";
if(studyCount == null) {
studyCount = "0";
}
if(clothCount == null) {
clothCount = "0";
}
if(travelCount == null) {
travelCount = "0";
}
if(eatCount == null) {
eatCount = "0";
}
int mainMax = Integer.valueOf(entertainmentCount) + Integer.valueOf(studyCount)
+ Integer.valueOf(clothCount) + Integer.valueOf(travelCount) + Integer.valueOf(eatCount) ;
//rebackStr = "今天"+"娱乐花了"+entertainmentCount+"元"+",学习花了"+studyCount+"元"
//+",衣着花了"+clothCount+"元"+",出行花了"+travelCount+"元"+",食宿花了"+eatCount+"元,今天一共花了"+mainMax+"元";
sumCount = String.valueOf(mainMax);
count.setEntainmentCount(entertainmentCount);
count.setStudyCount(studyCount);
count.setClothCount(clothCount);
count.setTravelCount(travelCount);
count.setEatCount(eatCount);
count.setSumCount(sumCount);
//System.out.println("sumcount:"+count.getSumCount());
return count;
} public static boolean queryUserID(String userId) {
String sqlStr = "select * from userlist" + " where '" + userId + "'";
boolean flag = false;
try {
//加载驱动程序
Class.forName(driver);
//1.getConnection()方法,连接MySQL数据库!!
con = (Connection) DriverManager.getConnection(url,user,password);
//2.创建statement类对象,用来执行SQL语句!!
Statement statement = (Statement) con.createStatement();
//要执行的SQL语句
ResultSet resultSet = statement.executeQuery(sqlStr);
while(resultSet.next()) {
resultSet.getString("userId");
if(resultSet.getString("userId").equals(userId)) {
flag = true;
}
}
con.close();
} catch(ClassNotFoundException e) {
//数据库驱动类异常处理
System.out.println("Sorry,can`t find the Driver!");
e.printStackTrace();
} catch(SQLException e) {
//数据库连接失败异常处理
e.printStackTrace();
}catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally{
}
return flag;
} public static boolean queryDate(String userId, String thisDate) {
String sqlStr = "select * from " + userId + " where '" + thisDate + "'";
boolean flag = false;
try {
//加载驱动程序
Class.forName(driver);
//1.getConnection()方法,连接MySQL数据库!!
con = (Connection) DriverManager.getConnection(url,user,password);
//2.创建statement类对象,用来执行SQL语句!!
Statement statement = (Statement) con.createStatement();
//要执行的SQL语句
ResultSet resultSet = statement.executeQuery(sqlStr);
//当天的日期
//System.out.println("thisdata的值为:"+thisDate);
while(resultSet.next()) {
resultSet.getString("date");
//循环获取的到的日期值
//System.out.println("date的值为:"+resultSet.getString("date"));
if(resultSet.getString("date").toString().equals(thisDate)) {
flag = true;
}
}
con.close();
//标志位的布尔值
//System.out.println("flag的值为:"+flag);
} catch(ClassNotFoundException e) {
//数据库驱动类异常处理
System.out.println("Sorry,can`t find the Driver!");
e.printStackTrace();
} catch(SQLException e) {
//数据库连接失败异常处理
e.printStackTrace();
}catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally{
}
return flag;
} public static boolean dataSQL(String sqlStr) {
try {
//加载驱动程序
Class.forName(driver);
//1.getConnection()方法,连接MySQL数据库!!
con = (Connection) DriverManager.getConnection(url,user,password);
//2.创建statement类对象,用来执行SQL语句!!
Statement statement = (Statement) con.createStatement();
//要执行的SQL语句
flag = statement.execute(sqlStr);
con.close();
} catch(ClassNotFoundException e) {
//数据库驱动类异常处理
System.out.println("Sorry,can`t find the Driver!");
e.printStackTrace();
} catch(SQLException e) {
//数据库连接失败异常处理
e.printStackTrace();
}catch (Exception e) {
e.printStackTrace();
}finally{
}
return flag;
} @SuppressWarnings("finally")
public static boolean insertData(String biao, String ziduan, String valueStr) { String sqlStr = "insert into " + biao + "(" + ziduan + ")" + "values('" + valueStr + "')";
try {
//加载驱动程序
Class.forName(driver);
//1.getConnection()方法,连接MySQL数据库!!
con = (Connection) DriverManager.getConnection(url,user,password);
//2.创建statement类对象,用来执行SQL语句!!
Statement statement = (Statement) con.createStatement();
//要执行的SQL语句
int resultSet = statement.executeUpdate(sqlStr); System.out.println(resultSet);
con.close(); } catch(ClassNotFoundException e) {
//数据库驱动类异常处理
System.out.println("Sorry,can`t find the Driver!");
e.printStackTrace();
} catch(SQLException e) {
//数据库连接失败异常处理
e.printStackTrace();
}catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally{ return true;
}
}
/*
UPDATE Customers SET cust_email = ' kim@qq.com' WHERE cust_id = '10000005';*/
public static boolean updateMyCount(String userId, String countDate, String countType, String money) {
String str = "UPDATE " + userId + " SET " + countType + " = '" + money + "' WHERE date = '" + countDate + "';";
int resultSet = 0;
try {
//加载驱动程序
Class.forName(driver);
//1.getConnection()方法,连接MySQL数据库!!
con = (Connection) DriverManager.getConnection(url,user,password);
//2.创建statement类对象,用来执行SQL语句!!
Statement statement = (Statement) con.createStatement();
//要执行的SQL语句
resultSet = statement.executeUpdate(str);
con.close();
} catch(ClassNotFoundException e) {
//数据库驱动类异常处理
System.out.println("Sorry,can`t find the Driver!");
e.printStackTrace();
} catch(SQLException e) {
//数据库连接失败异常处理
e.printStackTrace();
}catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally{
}
if(resultSet == 0)
return false;
else
return true;
} //----------------------------------------------
//该方法用于查询某一项消费
//----------------------------------------------
@SuppressWarnings("finally")
public static String queryOne(String userId, String countType, String countDate, String ziduan)
{
ResultSet rs;
String sqlStr="select * from " + userId + " where "+ziduan+" ='"+countDate+"'";
String balance = null; try {
//加载驱动程序
Class.forName(driver);
//1.getConnection()方法,连接MySQL数据库!!
con = (Connection) DriverManager.getConnection(url,user,password);
//2.创建statement类对象,用来执行SQL语句!!
Statement statement = (Statement) con.createStatement();
//要执行的SQL语句
rs = statement.executeQuery(sqlStr);
rs.next(); //指向第一条数据
balance=rs.getString(countType);
con.close(); } catch(ClassNotFoundException e) {
//数据库驱动类异常处理
System.out.println("Sorry,can`t find the Driver!");
e.printStackTrace();
} catch(SQLException e) {
//数据库连接失败异常处理
e.printStackTrace();
}catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally{
return balance;
} } }
以上代码均简单易懂,还有不懂的留言,共同解决。
京东Alpha平台开发笔记系列(三)的更多相关文章
- 京东Alpha平台开发笔记系列(二)
第一篇博文简单讲了一下京东Alpha平台与个人idea技能,本篇将讲解Alpha平台与个人开发需要的一些知识,下面开篇 ——>>> 上图就是京东Alpha技能平台的首页,Skill平 ...
- 京东Alpha平台开发笔记系列(一)
2018京东Alpha开发者大赛是由京东智能面向广大开发者举办的大型语音技能开发比赛,参赛者将通过Skill开放平台开发技能,在实现开发者自身价值的同时,为京东智能活跃用户提供更优质.更便捷.更智能的 ...
- Senparc.Weixin.MP SDK 微信公众平台开发教程(三):微信公众平台开发验证
要对接微信公众平台的"开发模式",即对接到自己的网站程序,必须在注册成功之后(见Senparc.Weixin.MP SDK 微信公众平台开发教程(一):微信公众平台注册),等待官方 ...
- firefox 扩展开发笔记(三):高级ui交互编程
firefox 扩展开发笔记(三):高级ui交互编程 前言 前两篇链接 1:firefox 扩展开发笔记(一):jpm 使用实践以及调试 2:firefox 扩展开发笔记(二):进阶开发之移动设备模拟 ...
- WCF开发实战系列三:自运行WCF服务
WCF开发实战系列三:自运行WCF服务 (原创:灰灰虫的家 http://hi.baidu.com/grayworm)上一篇文章中我们建立了一个WCF服务站点,为WCF服务库运行提供WEB支持,我们把 ...
- zlib开发笔记(三):zlib库介绍、在ubuntu上进行arm平台交叉编译
前言 方便做嵌入式arm的交叉移植zlib库. Zlib库 zlib被设计为一个免费的,通用的,法律上不受限制的-即不受任何专利保护的无损数据压缩库,几乎可以在任何计算机硬件和操作系统上使 ...
- stm32开发笔记(三):stm32系列的GPIO基本功能之输出驱动LED灯、输入按键KEY以及Demo
前言 stm32系列是最常用的单片机之一,不同的版本对应除了引脚.外设.频率.容量等'不同之外,其开发的方法是一样的. 本章讲解使用GPIO引脚功能驱动LED灯和接收Key按钮输入. STM ...
- FFmpeg开发笔记(三):ffmpeg介绍、windows编译以及开发环境搭建
前言 本篇章是对之前windows环境的补充,之前windows的是无需进行编译的,此篇使用源码进行编译,版本就使用3.4.8. FFmpeg简介 FFmpeg是领先的多媒体框架,能够解码 ...
- Java开发笔记(三十)大小数BigDecimal
前面介绍的BigInteger只能表达任意整数,但不能表达小数,要想表达任意小数,还需专门的大小数类型BigDecimal.如果说设计BigInteger的目的是替代int和long类型,那么设计Bi ...
随机推荐
- oracl遇到的问题
使用oracl数据库用 ALTER TABLE Students ADD CONSTRAINT PRINF_NAME_UNIQUE UNIQUE (sname) 添加唯一性约束,出现问题,报错为:a ...
- hbuilder 打包 vueAPP
1:设置状态栏颜色 在manifest.json 找到 plus 下添加 "statusbar": { "immersed": true/*沉浸式状态栏*/ 设 ...
- centos7 安装mongodb
1. 创建mongodb数据,日志,配置文件存放目录# mkdir /data# tar xzf mongodb-linux-x86_64-rhel70-4.0.8.tgz# mv mongodb- ...
- day48 前端高级选择器优先级
复习 1. 基础选择器 标签选择器(div) | 类选择器(.div1) | id选择器(#div2) <div class="div1" id="div2&quo ...
- React Router的Route的使用
Route 是 React Router中用于配置路由信息的组件,每当有一个组件需要根据 URL 决定是否渲染时,就需要创建一个 Route. 1) path 每个 Route 都需要定义一个 pat ...
- P和C
import tensorflow as tf import numpy as np import math import keras from keras.layers import Conv2D, ...
- linux环境下安装jmeter,启动执行脚本
1.下载安装jmeter安装包 下载链接: https://pan.baidu.com/s/1KPhwNDsmTIAy41fEopHQEw 提取码: spwd 2.上传linux平台,解压jmeter ...
- Ubuntu16.04 安装python3.7和pip3
到官网下载源码 装个依赖包:apt-get install libffi-dev 三部曲 ./configure make make install 但此时pip3可能不行,加个local,前提是前面 ...
- mysql权限操作(转)
慢慢看吧mysql中可以给你一个用户授予如select,insert,update,delete等其中的一个或者多个权限,主要使用grant命令,用法格式为: grant 权限 on 数据库对象 to ...
- lvm的备份还原及修改UUID
今天在VMware® Workstation 12 Pro虚拟机上克隆了一台Linux虚拟机,无意中发现两台虚拟机blkid一模一样. [root@stau64 ~]# blkid [root@sta ...