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;
}
}

最新文章

  1. 在离线环境中发布.NET Core至Windows Server 2008
  2. Ubuntu下设置中文字符集支持(解决中文乱码问题)
  3. [linux basic基础]----套接字
  4. 转载:善待Redis中的数据
  5. redis7--hash set的操作
  6. Python--my first try!
  7. DevOps之服务-监控工具
  8. sololearn的c++学习记录_4m11d
  9. SpriteBuilder中如何给精灵添加帧动画
  10. Python——FTP上传和下载
  11. 最简单的操作 jetty IDEA 【debug】热加载
  12. sed (未完,待续)
  13. 【maven】maven打包deploy时候报错:Connect to repo.maven.apache.org:443
  14. linux fdisk tf卡分区操作解析说明
  15. JavaScript位移运算多个大于号的使用方法
  16. .NET编译过程
  17. 无需编译app切换线上、测试环境
  18. Java后端发送email实现
  19. 美化input type=range标签滑动样式(带渐变效果)
  20. [SpringBoot系列]--Spring Hibernate search 注解实现(未测试)

热门文章

  1. Mysql Errors
  2. 11. Ingress及Ingress Controller(主nginx ingress controller)
  3. Selenium 2自动化测试实战32(Fixtures)
  4. 忘记mysql或mariadb数据库的密码之解决方案
  5. nginx的负载均衡和反向代理
  6. go http server 编程
  7. Git分块提交文件
  8. C语言链表之两数相加
  9. maven运行工程
  10. co源码