短信对接——一种jdbc链接运用

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

 

posted @ 2017-12-04 14:40  吴大哥  阅读(351)  评论(0编辑  收藏  举报