JDBC和servlet写CRUD的接口总结

本文总结了使用JDBC和Servlet实现CRUD接口的关键步骤,包括处理JSON数据、数据库操作工具类的使用、数据插入并获取主键、模糊查询、分页查询、时间差计算以及Servlet中处理图片数据和URL参数的方法。同时讨论了数据校验和集合泛型使用注意事项。
摘要由CSDN通过智能技术生成

首先加入响应编码格式

 response.setCharacterEncoding("UTF-8");
 response.setContentType("application/json; charset=utf-8");	

接收前端json数据

 InputStreamReader insr = new InputStreamReader(request.getInputStream(),"utf-8");
	        String result = "";
	        int respInt = insr.read();
	        while(respInt!=-1) {
   
	            result +=(char)respInt;
	            respInt = insr.read();
	        }
	        JSONObject json = JSONObject.parseObject(result);

提取json数据中的值

// 获取json数据直接用json.getString
	        	int page = json.getInteger("page");	
	        	String userName = json.getString("userName");
	        	String gender = json.getString("gender");
	        	String phone = json.getString("phone");

将json数据中出了键 =(*)如:键 = id的键值对外,其他的放进数组


//fastjson解析方法
        for (Map.Entry<String, Object> entry : json.entrySet()) {
   
            if(entry.getKey().equals("qm")){
   

            }else {
   
                // key不是qm的 key和value放进数组

                arr.add(entry.getKey()+":"+entry.getValue());
            }
        }

数据库Util操作工具类

package service;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;


/**
 * JDBC工具类  (通常将方法设置为静态方法,不然还要通过new 一个对象来调用方法,不优雅,类加载时即加载)
 * 1.获取连接fangf
 * 2.关闭释放jdbx使用的资源
 * */
public class jdbcUtil {
   
    private static Connection conn;
    private static PreparedStatement ps;
    /**1.
     * 获取jdbc连接的方法getconnection (通过JDBCUtil.getConnection()来获取一个JDBC的连接)
     * ip 为数据库所在的远程服务器的ip地址
     * port 为数据库访问的端口
     * mysqldatabase  要连接的数据库名称
     * */
    // public static Connection getConnection(String ip,String mysqldatabase){
   
    public static Connection getConnection(){
   
        try {
   
            Class.forName("com.mysql.jdbc.Driver");
            System.out.println("驱动加载好了");
        } catch (ClassNotFoundException e) {
   
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        try {
   
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/ss?useSSL=false","root","li19961102");
            System.out.println("数据库连接好了");
        } catch (SQLException throwables) {
   
            throwables.printStackTrace();
        }


        return conn;
    }


    /**2.
     * 关闭,释放资源的方法close (若不存在使用下列资源,传递参数为null即可,通过JDBCUtil.close()关闭资源)
     * rs 为结果集,通过JDBC查到的结果集,使用后需关闭释放资源
     * stmt 为开启的sql语句
     * connection 为jdbc的连接
     * */
    public static void close(ResultSet rs, Statement stmt, Connection connection){
   //栈式关闭(最先连接,最后关闭连接)
        try{
   //关闭结果集
            if(rs!=null) rs.close();
        }catch (SQLException e){
   
            e.printStackTrace();
        }

        try{
   //关闭sql语句
            if(ps!=null) ps.close();
            if(stmt!=null) stmt.close();
        }catch (SQLException e){
   
            e.printStackTrace();
        }

        try{
   //关闭连接
            if(connection!=null) connection.close();
        }catch (SQLException e){
   
            e.printStackTrace();
        }

    }


}


使用这个操作工具类


加载驱动,创建连接

 Connection conn = new jdbcUtil().getConnection();

关闭流

finally {
   
                    new jdbcUtil().close(rs,ps,conn);
                }

*** JDBC插入数据返回生成的主键ID***

 ps = conn.prepareStatement("insert into shop (shop_name,create_time,address) value (?,?,?)",RETURN_GENERATED_KEYS);
                    ps.setString(1,shopName);
                    ps.setString(2,createDate);
                    ps.setString(3,address);
                    ps.executeUpdate();

                    // JDBC插入数据返回生成的主键ID
                    rs = ps.getGeneratedKeys();//获得主键的自增Id
                    if (rs.next()){
   
                        shopId = rs.getInt(1);//Id在结果集中的第一位
                    }

模糊查询

	ps = conn.prepareStatement("select count(*) as count from user where user_name like ? and gender like ? and phone like ?");
				ps.setString(1,"%"+userName+"%");
				ps.setString(2,"%"+gender+"%");
				ps.setString(3,"%"+phone+"%");
				rs_count = ps.executeQuery();

分页查询,一页10条记录

// count 只需要一次	(page-1)*10 做分页
					ps1 = conn.prepareStatement("select * from user where user_name like ? and gender like ? and phone like ? order by user_id desc limit "+(page-1)*10 + ",10");
					ps1.setString(1,"%"+userName+"%");
	    			ps1.setString(2,"%"+gender+"%");
	    			ps1.setString(3,"%"+phone+"%");
					rs_user = ps1.executeQuery();

将查询的信息以{“msg”:“成功/失败”,“code”:0,“data”:[“XX”:“xx”,“XX”:“xx”…]}格式传输

List<
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值