package sms;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.URL;
import java.net.URLConnection;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class Sms {

public static void main(String[] args) throws Exception {
String SpCode="xxx";
String LoginName="xxx";
String Password="xxx";
String driver="com.mysql.jdbc.Driver"; //1.定义驱动程序名为driver内容为com.mysql.jdbc.Driver
String url="jdbc:mysql://localhost:3306/cxfvp?useUnicode=true&characterEncoding=utf-8";//2.定义url;jdbc是协议;mysql是子协议:表示数据库系统管理名称;localhost:3306是你数据库来源的地址和目标端口
String user="root"; //3.定义用户名,写你想要连接到的用户。
String pass="root"; //4.用户密码。
String querySql="select * from amp_message a where a.type=1 and a.status=1 "; //5.你想要查找的表名。
Class.forName(driver); //6.注册驱动程序,用java.lang包下面的class类里面的Class.froName();方法 此处的driver就是1里面定义的driver,也可以 Class.forName("com.mysql.jdbc.Driver");
Connection conn=DriverManager.getConnection(url,user,pass);//7.获取数据库连接,使用java.sql里面的DriverManager的getConnectin(String url , String username ,String password )来完成
//括号里面的url,user,pass便是前面定义的2,3,4步骤内容;
Statement stmt=conn.createStatement(); //8.构造一个statement对象来执行sql语句:主要有Statement,PreparedStatement,CallableStatement三种实例来实现
ResultSet rs=stmt.executeQuery(querySql);//9.执行sql并返还结束 ;ResultSet executeQuery(String sqlString):用于返还一个结果集(ResultSet)对象。
while(rs.next()){ //10.遍历结果集
String SerialNumber=rs.getString("id");
String UserNumber=rs.getString("tel");
String MessageContent=rs.getString("content").substring(0,rs.getString("content").length()-10);
System.out.println(MessageContent);
if(UserNumber.length()!=11){
String querySql1="update amp_message a set a.status=99 where a.id='"+SerialNumber+"'";
Statement stmt1 = conn.createStatement();//或者用PreparedStatement方法
stmt1.executeUpdate(querySql1);//执行sql语句
continue;
}else{
int sendnum=rs.getInt("sendnum");
int repeatnum=rs.getInt("repeatnum");
for (int i = sendnum+1; i < repeatnum+1; i++) {
String sr=sendPost("http://api.ums86.com:8888/sms/Api/Send.do", "SpCode="+SpCode+"&LoginName="+LoginName+"&Password="+Password+"&MessageContent="+MessageContent+"&UserNumber="+UserNumber+"&SerialNumber="+SerialNumber+"&ScheduleTime=&f=1 ");
String s=sr.substring(sr.indexOf("result=")+7,sr.indexOf("&description"));
System.out.println(sr);
System.out.println(s);
if(!"0".equals(s)){
String querySql1="update amp_message a set a.sendnum="+i+" where a.id='"+SerialNumber+"'";
Statement stmt1 = conn.createStatement();//或者用PreparedStatement方法
stmt1.executeUpdate(querySql1);//执行sql语句
if(i==repeatnum){
String querySql2="update amp_message a set a.status=99,a.sendnum="+i+" where a.id='"+SerialNumber+"'";
Statement stmt2 = conn.createStatement();//或者用PreparedStatement方法
stmt1.executeUpdate(querySql2);//执行sql语句
}
continue;
}else{
String querySql1="update amp_message a set a.status=3,a.sendnum="+i+" where a.id='"+SerialNumber+"'";
Statement stmt1 = conn.createStatement();//或者用PreparedStatement方法
stmt1.executeUpdate(querySql1);//执行sql语句
break;
}
}
}
}

if(rs !=null){//11.关闭记录集
try{
rs.close();
} catch (SQLException e){
e.printStackTrace();
}
}
if(stmt !=null){//12.关闭声明的对象
try{
stmt.close();
}catch(SQLException e){
e.printStackTrace();
}
}
if(conn !=null){//13.关闭连接 (记住一定要先关闭前面的11.12.然后在关闭连接,就像关门一样,先关里面的,最后关最外面的)
try{
conn.close();
}catch(SQLException e){
e.printStackTrace();
}
}

}

/**
* 向指定 URL 发送POST方法的请求
*
* @param url
* 发送请求的 URL
* @param param
* 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
* @return 所代表远程资源的响应结果
*/
public static String sendPost(String url, String param) {
PrintWriter out = null;
BufferedReader in = null;
String result = "";
try {
URL realUrl = new URL(url);
// 打开和URL之间的连接
URLConnection conn = realUrl.openConnection();
// 设置通用的请求属性
conn.setRequestProperty("accept", "*/*");
conn.setRequestProperty("connection", "Keep-Alive");
conn.setRequestProperty("user-agent",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
// 发送POST请求必须设置如下两行
conn.setDoOutput(true);
conn.setDoInput(true);
// 获取URLConnection对象对应的输出流
out = new PrintWriter(new OutputStreamWriter(conn.getOutputStream(),"GBK"));
// 发送请求参数
out.print(param);
// flush输出流的缓冲
out.flush();
// 定义BufferedReader输入流来读取URL的响应
in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
result += line;
}
} catch (Exception e) {
System.out.println("发送 POST 请求出现异常!"+e);
e.printStackTrace();
}
//使用finally块来关闭输出流、输入流
finally{
try{
if(out!=null){
out.close();
}
if(in!=null){
in.close();
}
}
catch(IOException ex){
ex.printStackTrace();
}
}
return result;
}
}

短信对接——一种jdbc链接运用的更多相关文章

  1. Android手机上监听短信的两种方式

    Android手机上监听短信有两种方式: 1. 接受系统的短信广播,操作短信内容. 优点:操作方便,适合简单的短信应用. 缺点:来信会在状态栏显示通知信息. AndroidManifest.xml: ...

  2. Android之发送短信的两种方式

    SMS涉及的主要类SmsManager 实现SMS主要用到SmsManager类,该类继承自java.lang.Object类,下面我们介绍一下该类的主要成员. 公有方法: ArrayList< ...

  3. (转)Android之发送短信的两种方式

    https://www.cnblogs.com/dongweiq/p/4866022.html if(TextUtils.isEmpty(number)||TextUtils.isEmpty(cont ...

  4. android 发送短信的两种方式,以及接收报告和发送报告

               android发送短信,以及接收报告和发送报告          android中发送短信其实有两种方式,这个和打电话类似,大家可以了解一下:    一.调起系统发短信功能    ...

  5. C#&.Net干货分享- 构造SMSWebChineseApi对接第三方短信平台

    你们想要的短信对接,要舍得点钱哦.... /// <summary>    /// http://sms.webchinese.cn/api.shtml    /// </summa ...

  6. SMS短信PDU编码

    目前,发送短消息常用Text和PDU(Protocol Data Unit,协议数据单元)模式.使用Text模式收发短信代码简单,实现起来十分容易,但最大的缺点是不能收发中文短信:而PDU模式不仅支持 ...

  7. iOS开发中打电话发短信等功能的实现

    在APP开发中,可能会涉及到打电话.发短信.发邮件等功能.比如说,通常一个产品的"关于"页面,会有开发者的联系方式,理想情况下,当用户点击该电话号码时,能够自动的帮用户拨出去,就涉 ...

  8. PHP通过串口发短信

    随技术进步,短信收发领域按时间先后产生了三种模式:BLOCK MODE,基于AT指令的TEXT MODE,基于AT指令的PDU MODE.其中,TEXT MODE比较简单,多款诺基亚手机均支持此款模式 ...

  9. 今天工作遇到要发短信(ios)的功能,于是随手记录了一下

    ios中发送短信有两种 1.程序外调用系统短信 2.程序内调用系统发短信 第一种比较简单,直接调用url就可以了 oc下的代码为 [[UIApplication sharedApplication] ...

随机推荐

  1. vsftpd 配置用户及根目录及其参数详解

    vsftpd 常用功能参数配置及参数详解 Table of Contents 1. 配置超级服务 2. 配置匿名用户 3. 配置本地用户登录 4. 配置虚拟用户登录 5. 使用SSL登入 6. 日志文 ...

  2. Python3+RobotFramewok 用户自定义库的开发(四)

    在介绍这个之前,可以先看下python的目录Python\Lib\site-packages下面的文件夹,你会发现这个目录下面有DatabaseLibrary.RequestsLibrary.Sele ...

  3. Vim/gVim 中文显示为乱码的解决办法

    打开vimrc文件,在vim的安装目录下可以找到该文件,或在windows下是在vim/gvim下输入:edit $vim/_vimrc. 在文件的末尾添加一句 "set fileencod ...

  4. [Python]最长公共子序列 VS 最长公共子串[动态规划]

    前言 由于原微软开源的基于古老的perl语言的Rouge依赖环境实在难以搭建,遂跟着Rouge论文的描述自行实现. Rouge存在N.L.S.W.SU等几大子评估指标.在复现Rouge-L的函数时,便 ...

  5. ajax将数组或list集合传到后台 的 【坑】

    代码如下 function deleteChecked() { var orderNosList = new Array(); var rows = $("#dataGrid"). ...

  6. AES 加密算法的原理详解

    AES 加密算法的原理详解 本教程摘选自 https://blog.csdn.net/qq_28205153/article/details/55798628 的原理部分. AES简介 高级加密标准( ...

  7. PJzhang:如何缓解Mimikatz从Windows2008 R2内存中读取域控密码?

    猫宁!!! 参考: https://xz.aliyun.com/t/4180 https://www.anquanke.com/post/id/156299 https://www.cnblogs.c ...

  8. SQLite基础-7.子句(一)

    目录 SQLite子句(一) 1. WHERE子句 2. LIKE子句 3. GLOB 子句 4. Oreder By 子句 SQLite子句(一) 1. WHERE子句 WHERE 子句后面跟着条件 ...

  9. 【LOJ】#3042. 「ZJOI2019」麻将

    LOJ#3042. 「ZJOI2019」麻将 如何判定一个集合牌有没有胡的子集是不是胡的 就用一个\(dp[j][k][0/1]\)表示有j个连续两个的串,有k个连续1个串,有没有对子,再记一下这个集 ...

  10. Codeforces Round #225 (Div. 1) C. Propagating tree dfs序+ 树状数组或线段树

    C. Propagating tree Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/383/p ...