zoukankan      html  css  js  c++  java
  • 短信对接——一种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;
    }
    }

  • 相关阅读:
    剑指offer:面试题25、二叉树中和为某值的路径
    剑指offer:面试题24、二叉搜索树的后续遍历序列
    剑指offer:面试题23、从上往下打印二叉树
    剑指offer:面试题22、栈的压入、弹出序列
    剑指offer:面试题21、包含min函数的栈
    剑指offer:面试题20、顺时针打印矩阵
    剑指offer:面试题19、二叉树的镜像
    剑指offer:面试题18、树的子结构
    剑指offer:面试题17、合并两个排序的链表
    剑指offer:面试题16、反转链表
  • 原文地址:https://www.cnblogs.com/wudage/p/7976961.html
Copyright © 2011-2022 走看看