20190813JDBC

maven settings.xml

<localRepository>F:\Java\Apache\repository</localRepository>

<mirror>  
    <id>alimaven</id>  
    <name>aliyun maven</name>  
    <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
    <mirrorOf>central</mirrorOf>          
</mirror> 
<mirror>
    <id>ui</id>
    <mirrorOf>central</mirrorOf>
    <name>Human Readable Name for this Mirror.</name>
    <url>http://uk.maven.org/maven2/</url>
</mirror>

db.properties:

#mysql connection info
mysql_driver=com.mysql.cj.jdbc.Driver
mysql_url=jdbc:mysql://127.0.0.1:3306/testdemo?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
mysql_user=root
mysql_password=123456

#oracle connection info
#driver=com.oracle.driver.OracleDriver
#url=jdbc:oracle:thin:@127.0.0.1:1521:orcl
#user=scott
#password=tiger

#pool config###
initSize = 10
maxSize = 50
maxIdle = 30
maxWait = 10000
minIdle = 10
increment = 5
retry = 10

 

DBConnection:

public class DBConnection {
    private static String DRIVER;
    private static String URL;
    private static String USER;
    private static String PASSWORD;

    static {
        try {
            //读取属性文件
            Properties props = System.getProperties();
            //加载指定属性文件
            props.load(new FileInputStream("src/main/java/db.properties"));
            DRIVER = props.getProperty("mysql_driver");
            URL = props.getProperty("mysql_url");
            USER = props.getProperty("mysql_user");
            PASSWORD = props.getProperty("mysql_password");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static Connection getConn(){
        try {
            Class.forName(DRIVER);
            return DriverManager.getConnection(URL, USER, PASSWORD);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

    //封装资源回收的方法
    public static void close(ResultSet rs, Statement stat, Connection conn){
        try {
            if (rs != null)rs.close();
            if (stat != null)stat.close();
            if (conn != null)conn.close();
        }catch (SQLException e) {
            e.printStackTrace();
        }
    }

}

pom.xml:

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.wan</groupId>
  <artifactId>TestJDBC-demo</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>

  <name>TestJDBC-demo Maven Webapp</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <version>1.18.8</version>
      <scope>provided</scope>
    </dependency>
    <!--mysql驱动包-->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.13</version>
    </dependency>
    <!--C3P0-->
    <dependency>
      <groupId>c3p0</groupId>
      <artifactId>c3p0</artifactId>
      <version>0.9.1.2</version>
    </dependency>
  </dependencies>

  <build>
    <finalName>TestJDBC-demo</finalName>
    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
      <plugins>
        <plugin>
          <artifactId>maven-clean-plugin</artifactId>
          <version>3.1.0</version>
        </plugin>
        <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.8.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.22.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-war-plugin</artifactId>
          <version>3.2.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-install-plugin</artifactId>
          <version>2.5.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>2.8.2</version>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
</project>

封装对于任何数据表的CRUD操作:

DAOHelper:

public class DAOHelper {

    /**
     * 通用增删改
     * @param conn
     * @param sql
     * @param objs
     * @return
     */
    public static boolean execUpdate(Connection conn, String sql, Object... objs){
        PreparedStatement ps = null;
        try {
            ps = conn.prepareStatement(sql);
            for (int i = 0; i < objs.length; i++) {
                ps.setObject(i + 1, objs[i]);
            }
            int i = ps.executeUpdate();
            return i > 0 ? true : false;
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return false;
    }

    /**
     * 通用查询操作
     * @param conn
     * @param sql
     * @param call
     * @param objs
     * @param <T>
     * @return
     */
    public static <T> List<T> execQuery(Connection conn, String sql, CallBack<T> call, Object... objs){
        PreparedStatement ps = null;
        try {
            ps = conn.prepareStatement(sql);
            for (int i = 0; i < objs.length; i++) {
                ps.setObject(i + 1, objs[i]);
            }
            return call.getDatas(ps.executeQuery());
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }
    public static <T> T execQueryOne(Connection conn, String sql, CallBack<T> call, Object... objs){
        PreparedStatement ps = null;
        try {
            ps = conn.prepareStatement(sql);
            for (int i = 0; i < objs.length; i++) {
                ps.setObject(i + 1, objs[i]);
            }
            ResultSet rs = ps.executeQuery();
            return call.getData(rs);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }
    public interface CallBack<T>{
        default List<T> getDatas(ResultSet rs){
            return null;
        }
        default T getData(ResultSet rs){
            return null;
        }
    }
    public static abstract class CallBack2<T>{
        public List<T> getDatas(ResultSet rs){
            return null;
        }
        public T getData(ResultSet rs){
            return null;
        }
    }
}

BaseDAO.java:

public interface BaseDAO<T>  {
    public boolean insert(Connection conn, T t);

    public boolean delete(Connection conn, T t);

    public boolean update(Connection conn, T t);

    public T findById(Connection conn, T t);

    public List<T> findAll(Connection conn, int pageSize, int currentPage);

    public int getCount(Connection conn);
}

UserDAO:

public class UserDAO implements BaseDAO<User> {

    @Override
    public boolean insert(Connection conn, User user) {
        return DAOHelper.execUpdate(conn, "insert into user (user_name) values(?)", user.getUser_name());
    }

    /**
     * 批处理
     * @param conn
     */
    public void batch2(Connection conn){
        PreparedStatement ps = null;
        try {
            ps = conn.prepareStatement("insert into user(user_name) values(?)");
            for (int i = 0; i < 30; i++) {
                ps.setString(1, "test" + i);
                //先加入缓存
                ps.addBatch();
                if (i % 10 == 0) {
                    ps.executeBatch();  //先执行一波
                    ps.clearBatch();    //清空缓冲区
                }
                ps.executeBatch();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }


    @Override
    public boolean delete(Connection conn, User user) {
        return false;
    }

    @Override
    public boolean update(Connection conn, User user) {
        return false;
    }

    @Override
    public User findById(Connection conn, User user) {
        return DAOHelper.execQueryOne(conn, "select user_id, user_name, create_time from user where user_id = ?", new DAOHelper.CallBack<User>() {
            @Override
            public User getData(ResultSet rs) {
                ResultSetMetaData rsmd = null;
                try {
                    if (rs.next()) {
                        Map<String, Object> map = new HashMap();
                        rsmd = rs.getMetaData();
                        int count = rsmd.getColumnCount();//获得列数
                        String label;
                        for (int i = 0; i < count; i++) {
                            label = rsmd.getColumnLabel(i + 1);//获取列名 可能是别名
                            map.put(label, rs.getObject(label));
                        }
                        Class clz = user.getClass();
                        for (Map.Entry<String, Object> entry : map.entrySet()){
                            String Key = entry.getKey();
                            Object Value = entry.getValue();
                            //根据属性名获取set方法名字
                            String method_set_name = "set" + Key.substring(0,1).toUpperCase() + Key.substring(1);
                            //根据set方法的名字和属性类型获取set方法
                            Method method_set = clz.getMethod(method_set_name, clz.getDeclaredField(Key).getType());
                            //如果有关联直接去map中取数据,否则运行set方法将value值设给属性
                            Class type = method_set.getParameterTypes()[0];
                            //根据属性的类型将String转换为相应类型值后再set
                            method_set.invoke(user, TypeUtils.getValue(type.getName(), entry.getValue().toString()));
                        }
                        return user;
                    }
                } catch (SQLException e) {
                    e.printStackTrace();
                } catch (NoSuchMethodException e) {
                    e.printStackTrace();
                } catch (NoSuchFieldException e) {
                    e.printStackTrace();
                } catch (IllegalAccessException e) {
                    e.printStackTrace();
                } catch (InvocationTargetException e) {
                    e.printStackTrace();
                }
                return null;
            }
        }, user.getUser_id());
    }

    @Override
    public List<User> findAll(Connection conn, int pageSize, int currentPage) {
        return null;
    }

    @Override
    public int getCount(Connection conn) {
        return 0;
    }
}


//简单的实现:

    /**
     * 分页的实现
     * @param conn
     * @param pageSize      第几页
     * @param currentPage   每页数据条数
     * @return
     */
    @Override
    public List<Emp> findAll(Connection conn, int pageSize, int currentPage) {
        return DAOHelper.execQuery(conn, "select user_id,user_name,sex,mobile,password,registerTime from emp limit ?,?", new DAOHelper.CallBack<Emp>() {
            @Override
            public List<Emp> getDatas(ResultSet rs)  {
                List<Emp> list = new ArrayList<>();
                ResultSetMetaData rsmd = null;
                Map map = new HashMap();
                try {
                    rsmd = rs.getMetaData();
                    int count = rsmd.getColumnCount();
                    while (rs.next()){
                        String label;
                        for (int i = 0; i < count; i++) {
                            label = rsmd.getColumnLabel(i+1);
                            map.put(label, rs.getObject(label));
                        }
                        Emp e = new Emp();
                        e.setUser_id(map.get("user_id") + "");
                        e.setUser_name(map.get("user_name") + "");
                        e.setSex(map.get("sex") + "");
                        e.setMobile(map.get("mobile") + "");
                        e.setPassword(map.get("password") + "");
                        e.setRegisterTime((Timestamp)map.get("registerTime"));
                        list.add(e);
                    }
                }catch (SQLException e) {
                    e.printStackTrace();
                }
                return list;
            }
        }, (currentPage-1)*pageSize, pageSize);
    }

    @Override
    public int getCount(Connection conn) {
        String sql = "select count(user_id) from emp";
        return DBUtils.execQueryOne(conn, sql, new DBUtils.CallBack<Integer>() {
            @Override
            public Integer getData(ResultSet rs) {
                try {
                    if (rs.next())
                        return rs.getInt(1);
                } catch (SQLException e) {
                    e.printStackTrace();
                } finally {
                    try {
                        if (rs != null)
                            rs.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
                return 0;
            }
        });
    }

    public static void getReasonableData(Connection conn, int currentPage, int pageSize){
        int totalNum = new EmpDAO().getCount(conn);   //总记录条数
        int totalPage = 0;   //总页数

        //计算总列数
        if (totalNum % pageSize == 0) {
            totalPage = totalNum / pageSize;
        }else {
            totalPage = totalPage / pageSize + 1;
        }
        //防止无限上一页
        if (currentPage < 1) {
            currentPage = 1;
        }
        //防止无限下一页
        if (currentPage > totalPage) {
            currentPage = totalPage;
        }

    }

TypeUtils.java:

public class TypeUtils {
    public static Object getValue(String type, String value){
        if ("int".equals(type)){
            return Integer.parseInt(value);
        }else if ("short".equals(type)){
            return Short.parseShort(value);
        }else if ("long".equals(type)){
            return Long.parseLong(value);
        }else if ("float".equals(type)){
            return Float.parseFloat(value);
        }else if ("double".equals(type)){
            return Double.parseDouble(value);
        }else if ("char".equals(type)){
            return value.charAt(0);
        }else if ("byte".equals(type)){
            return Byte.parseByte(value);
        }else if ("boolean".equals(type)){
            return Boolean.parseBoolean(value);
        }else if ("java.util.Date".equals(type)){
            try {
                return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").parse(value);
            } catch (ParseException e) {
                e.printStackTrace();
            }
            return null;
        }else {
            return value;
        }
    }
}

TestDemo.java:

public class TestDemo1 {

    @org.junit.Before
    public void init(){
    }
    /**
     * 获取连接,配置连接池
     * @throws SQLException
     */
    @org.junit.Test
    public void getConnByJDBC() throws SQLException {
        System.out.println(DBConnection.getConn());
    }

    @org.junit.Test
    public void getConnByC3P0() throws SQLException {
        System.out.println(DBConnectionC3P0.getConn());
    }

    @org.junit.Test
    public void insert() throws SQLException {
        Connection connection = DBConnectionC3P0.getConn();
        boolean flag = DAOHelper.execUpdate(connection, "insert into user (user_name) values(?)", "老王");
        System.out.println(flag);
    }

    @org.junit.Test
    public void queryList() throws SQLException {
        String time = "2019-07-14 15:36:12.0";
        try {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
            Date myString1 = sdf.parse(time);
            System.out.println(myString1);
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }

    @org.junit.Test
    public void queryOne() throws SQLException {
        User u = new User();
        u.setUser_id(1);
        u = new UserDAO().findById(DBConnectionC3P0.getConn(), u);
        System.out.println(u);
    }
}

jQuery ajax模板:

https://blog.csdn.net/qq_28905427/article/details/81094269

原生js的ajax:https://blog.csdn.net/u014802525/article/details/82493166

$.ajax({
    url:'',
    type:'POST', //GET
    async:true,    //或false,是否异步
    data:{
        name:'llc',
        age:22
    },
    timeout:5000,    //超时时间
    dataType:'json',    //返回的数据格式:json/xml/html/script/jsonp/text
    beforeSend:function(xhr){
        console.log(xhr)
        console.log('发送前')
    },
    success:function(data,textStatus,jqXHR){
        console.log(data);
    },
    error:function(xhr,textStatus){
        console.log('错误',xhr.responseText);
        console.log(xhr);
        console.log(textStatus);
    }
})  

post提交:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
    <form action="LoginServlet" method="post">
        username:<input type="text" name="uname" >
        password:<input type="password" name="upass" ><br>
        <button type="button">登录</button> 这种不提交<br>
        <button>登录</button> 这种提交<br>
        <input type="button" value="登录" />这种不提交<br>
        <input type="submit" value="登录" />这种提交<br>
    </form>
</head>
<body>

</body>
</html>

LoginServlet:

public class LoginServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("get提交");
        doPost(request,response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("post提交");

        //设置请求头的编码方式
        request.setCharacterEncoding("utf-8");
        //设置响应数据流编码
        response.setCharacterEncoding("utf-8");
        //设置响应头的内容(包括响应数据格式,编码格式)
        response.setContentType("text/html;charset=utf-8");

        String uname = request.getParameter("uname");
        String upass = request.getParameter("upass");
        System.out.println(uname + "--" + upass);
        PrintWriter out = response.getWriter();
        out.println("<script>alert('中文n');history.back();</script>");
        out.flush();

    }
}

原生ajax调用:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <form>
        <div id="msg"></div>
        <input type="text" name="username" id="username" onblur="checkName(this.value)">
        <button type="button" onclick="checkName()">检查账号是否可用</button>
    </form>

    <script>
        //检查
        function checkName(name) {
            /*var input_name = document.getElementById('username');
            var name = input_name.value;*/
            ajaxGet('check?uname='+name, function(data){
                var msgBox = document.getElementById('msg');
                alert(data);
                if (data == -1){
                    //账号不可用
                    msgBox.style.color = '#f00';
                    msgBox.innerHTML = '账号已被注册';
                }else {
                    //账号可用
                    msgBox.style.color = '#0f0';
                    msgBox.innerHTML = '账号可以使用';
                }
            });
        }
        //ajax
        function ajaxGet(url, callback) {
            //声明XMLHttpRequest
            var xhr;
            //判断浏览器获取XMLHttpRequest
            if (window.XMLHttpRequest){
                xhr = new XMLHttpRequest();
            }else {
                //IE5,IE6支持ActiveX插件
                xhr = new ActiveXObject('microsoft.XMLHTTP');
            }
            //打开连接  1.请求方式 2.服务端的资源地址 3.是否为异步提交
            xhr.open('get', url, true);
            //发送请求 当请求方式为post时,send方法需要写参数
            xhr.send();
            //当请求状态发生改变时,执行回调
            xhr.onreadystatechange = function(){
                //readyState:请求状态,status服务器响应状态
                if (xhr.readyState == 4 && xhr.status == 200){
                    //获取服务端的响应数据
                    var data = xhr.responseText;
                    //将字符串类型的json数据转换为js对象
                    data = JSON.parse(data);
                    //执行回调
                    callback(data);
                }
            }
        }
    </script>
</body>
</html>

check:

@WebServlet("/check")
public class CheckNameServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setCharacterEncoding("utf-8");
        String name = request.getParameter("uname");
        System.out.println("name:"+name);
        PrintWriter out = response.getWriter();
        if ("wan".equals(name)){
            out.print("-1");
        }else {
            out.print("1");
        }
        out.flush();
    }
}

实例:ajax提交

function fn3(){
    $.ajax({
        url:"/AjaxDemo/ajaxServlet2",
	async:true,
	type:"post",
	data:{"name":"Stephen chow","age":"55"},
	success:function(data){
	    alert(data.name);
	},
	error:function(){
	    alert("请求失败");
	},
	dataType:"json"
    });
}

后台代码:

(2)AjaxServlet.java
package com.shu.hj;
 
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
/**
 * Servlet implementation class AjaxServlet2
 */
public class AjaxServlet2 extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
   
 
	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		//response.getWriter().append("Served at: ").append(request.getContextPath());
		String name = request.getParameter("name");
		String age = request.getParameter("age");
		System.out.println("name: "+name+" age: "+age);
	//当前端页面数据提交过来后,服务器端需要返回信息
		//response.getWriter().write("success...");
	//此时返回一个字符串"success...",考虑一下前端如何接收
	//在回调函数中接收
		
	/*
	 如果返回格式要求为json,则服务器端Java代码只能返回一个json格式的字符串
	 {"name":"tom","age":"26"}
	 * */
		//System.out.println("{"name":"tom","age":"26"}");
		//以上直接将json格式字符串放入其中会报错,会发现花括号里外都是双引号
		//如果将内部改为单引号System.out.println("{'name':'tom','age':'26'}");
		//此时同样会报错,{'test': 1} (使用了单引号而不是双引号)会被识别为畸形json格式
		System.out.println("{\"name\":\"tom\",\"age\":\"26\"}");//使用转义字符
                response.getWriter().write("{\"name\":\"tom\",\"age\":\"26\"}");
注意:回调函数中的数据是用response.getWriter().write()传递的,不是System.out.println().
	}
 
	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}
 
}

web.xml:

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Archetype Created Web Application</display-name>

  <filter>
    <filter-name>HelloFilter</filter-name>
    <filter-class>com.wan.HelloFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>HelloFilter</filter-name>
    <url-pattern>/main.jsp</url-pattern>
  </filter-mapping>

  <!--配置servlet-->
  <servlet>
    <servlet-name>HelloServlet</servlet-name>
    <servlet-class>com.wan.HelloServlet</servlet-class>
  </servlet>
  <servlet>
    <servlet-name>LoginServlet</servlet-name>
    <servlet-class>com.wan.LoginServlet</servlet-class>
  </servlet>



  <servlet-mapping>
    <servlet-name>HelloServlet</servlet-name>
    <url-pattern>/HelloServlet</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>LoginServlet</servlet-name>
    <url-pattern>/LoginServlet</url-pattern>
  </servlet-mapping>

  <error-page>
    <error-code>404</error-code>
    <location>/404.jsp</location>
  </error-page>
  <error-page>
    <exception-type>java.lang.NullPointerException</exception-type>
    <location>/Exception</location>
  </error-page>


</web-app>

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值