在上一篇用IDEA进行Java后台开发(二)中我们已经可以成功的调用我们所写的接口,并且做了一些简单的逻辑处理,
由于后台开发离不开数据,所以这篇将进行Servlet于MySQL数据库链接和简单的调用。

1.导包
这里我们选择c3p0和dbutils进行数据库链接,所以导入如下包

这里附上所需jar包下载地址

2.在src根目录下创建c3p0-config.xml文件,进行数据库配置

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config><!-- 默认配置,c3p0框架默认加载这段默认配置 --><default-config><!-- 配置JDBC 四个基本属性 --><property name="driverClass">com.mysql.jdbc.Driver</property><property name="jdbcUrl">jdbc:mysql://localhost:3306/xiaoxiao</property><property name="user">root</property><property name="password">Gujianpeng@2018</property></default-config> <!-- This app is massive! -->
</c3p0-config>

注:<property name="jdbcUrl">jdbc:mysql://localhost:3306/xiaoxiao</property>中的localhost可以是远程数据库的ip,如果是本地的数据库,就直接用localhost或者本地ip就行了。

3.创建JDBCUtils类

package db;import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;import javax.sql.DataSource;import com.mchange.v2.c3p0.ComboPooledDataSource;/*** 将增删改查操作中重复代码提取出来*/
public class JDBCUtils {//创建数据库连接池对象private static ComboPooledDataSource comboPooledDataSource = new ComboPooledDataSource();//获取连接的方法public static Connection getConnection() throws SQLException{return comboPooledDataSource.getConnection();}//提供数据库连接池对象的方法public static DataSource getDataSource(){return comboPooledDataSource;}//释放资源的方法public static void release(ResultSet rs, Statement stmt, Connection conn) {if (rs != null) {try {rs.close();} catch (SQLException e) {e.printStackTrace();}rs = null;}release(stmt, conn);}public static void release(Statement stmt, Connection conn) {if (stmt != null) {try {stmt.close();} catch (SQLException e) {e.printStackTrace();}stmt = null;}if (conn != null) {try {conn.close();} catch (SQLException e) {e.printStackTrace();}conn = null;}}}

4.创建要操作表的bean类

package db.bean;public class UserBean {private int userId;private String userPhone;private String userName;private String userPwd;public String getUserPhone() {return userPhone;}public void setUserPhone(String userPhone) {this.userPhone = userPhone;}public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}public String getUserPwd() {return userPwd;}public void setUserPwd(String userPwd) {this.userPwd = userPwd;}public int getUserId() {return userId;}public void setUserId(int userId) {this.userId = userId;}
}

5.通过sql语句查表

QueryRunner runner = new QueryRunner(JDBCUtils.getDataSource());
String sql5 ="select * from contect where userName="+account;
try {UserBean userBean = runner.query(sql5, new BeanHandler<UserBean>(UserBean.class));
} catch (SQLException e) {e.printStackTrace();
}

6.完整的Servlet代码

package servlet;import db.JDBCUtils;
import db.bean.UserBean;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;public class DemoServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {/* 这里我们只是模拟了一个最简单的业务逻辑,当然,你的实际业务可以相当复杂 */String account = request.getParameter("account"); // 从 request 中获取名为 account 的参数的值String password = request.getParameter("password"); // 从 request 中获取名为 password 的参数的值System.out.println("account:" + account + "\npassword:" + password); // 打印出来看一看String result = "数据库读取异常!";if (account.isEmpty()){result = "用户名为空!";}else if (password.isEmpty()){result = "密码为空!";}else {QueryRunner runner = new QueryRunner(JDBCUtils.getDataSource());String sql5 ="select * from contect where userName="+account;try {UserBean userBean = runner.query(sql5, new BeanHandler<UserBean>(UserBean.class));if (userBean != null){if (password.endsWith(userBean.getUserPwd())){result = "登陆成功!";}else {result = "用户名密码不匹配,登录失败!";}}else {result = "不存在此用户!";}} catch (SQLException e) {e.printStackTrace();}}response.setContentType("text/html;charset=utf-8"); // 设置响应报文的编码格式PrintWriter pw = response.getWriter(); // 获取 response 的输出流pw.println(result); // 通过输出流把业务逻辑的结果输出pw.flush();}}

7.效果
我们先在表中随便插入几条数据

然后用浏览器直接访问看看

8.遇到的一些问题及解决方法
(1)报错:
Servlet.service() for servlet [DemoServlet] in context with path [] threw exception [Servlet execution threw an exception] with root cause
java.lang.ClassNotFoundException: com.mchange.v2.ser.Indirector
原因: 
使用C3P0数据源时需要依赖 mchange-commons-java-0.2.3.4.jar包。缺少该jar包则会报错!

(2)无法链接服务器中的数据库
登录服务器mysql允许远程链接
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '你的密码' WITH GRANT OPTION;
重载授权表:
FLUSH PRIVILEGES;
退出mysql数据库:
exit

最后,下一篇的链接 用IDEA进行Java后台开发(四)

用IDEA进行Java后台开发(三)相关推荐

  1. 【Java后台】从零开始的Java后台开发(三)

    编写基础的Servlet应用程序 1 Servlet 使用Servlet需要在pom.xml中引入以下依赖: <!-- https://mvnrepository.com/artifact/ja ...

  2. 蘑菇街Java后台开发一二面面经

    蘑菇街Java后台开发一二面面经 ​ ​ ​ ​ 本菜鸡妹妹的春招上岸之路,第一次挂经献给蘑菇街. 时间线 时间 状态 2020/3/6 内推投递后端开发岗位 2020/3/11 邮件确认一面时间 2 ...

  3. 【Java后台开发规范】--- 圈复杂度

    文章目录 前言 其他类型的规范 圈复杂度 提炼方法 if.else 卫语句 去else 策略模式 switch 循环嵌套 其他建议 前言 做Java开发的,大多数可能都有看过阿里的Java后台开发手册 ...

  4. 面试题(19)今日头条Java后台研发三面题目

    面试题(1)最全BAT面试精华汇总 面试题(2)阿里最全面试100题 面试题(3)史上最全阿里技术面试题目 面试题(4)阿里等BAT必考多线程面试60题 面试题(5)BAT面试笔试33题:JavaLi ...

  5. 跨专业转计算机拿下百度java后台开发的经验分享

    前言 本文出自我的一位朋友,他是跨专业最终成功转行计算机,拿下了百度的java后台开发offer,之前他一直说着要给大家分享一波经验,今天完成了写作,希望对大家有帮助.(PS:另外也欢迎大家投稿分享自 ...

  6. 美团、滴滴实习生面经(滴滴offer,Java后台开发岗)

    笔者是大三本科生,一直以来在考研和参加工作两个想法之间徘徊,最终在今年3月份下定决心参加工作,之后参加了春招,投的全部是java后台开发岗实习生. 在春招过程中投了不少公司,有京东.头条.网易.美团. ...

  7. 用IDEA进行Java后台开发(二)

    这篇博客接上一篇,用IDEA进行Java后台开发(一) 上一篇我们已经将工程创建完成了,下面我们将创建一个Servlet,然后本地启动tomcat后调用接口,返回helloWorld,过程如下: 1. ...

  8. 面经:阿里Java后台开发

       点击"蓝字"关注我们获得资讯/干货/内推 最近原来实习时候的Boss联系我,说他跳槽到了阿里,问我有没有兴趣面一个Java后台开发岗位. 考虑到我只工作了一年,现在去阿里肯定 ...

  9. 阿里Java后台开发是怎么面试的

    最近原来实习时候的Boss联系我,说他跳槽到了阿里,问我有没有兴趣面一个Java后台开发岗位. 考虑到我只工作了一年,现在去阿里肯定要降薪,因此也没有太强烈的意愿.但出于提升自我的角度考虑,参加了面试 ...

最新文章

  1. Citrix XenServer@cloudstack基本功能测试报告2
  2. centos7 安装kubernetes1.4(kubeadm版)
  3. HDU 1028 HDU Ignatius and the Princess III
  4. 高精度除以低精度板子
  5. 快节奏多人游戏同步:技术与算法的实现
  6. 1113: 递归调用的次数统计(函数专题)
  7. java 魔数_Java 字节码结构解析
  8. android 自动更新
  9. 嵌入式转linux服务器,嵌入式Linux中的Web服务器应用
  10. wireshark tshark抓包筛选并存入文件 Centos linux 命令行抓包 yum安装wireshark
  11. IS-IS详解(十八)——IS-IS 缺省路由
  12. 常用App用户体验找茬
  13. Visual Studio Code 运行html文件右键Open In Other Browsers提示找不到Chrome的解决办法
  14. 电脑课学生端密码查看
  15. 百度云c++语言模拟器,C++语言基础教程
  16. 武汉大学计算机学院夏桂松,实验室硕士研究生王碧杉、何敬伟在ECCV上发表事件相机高质量图像重建论文...
  17. Python数据加密,解密的相关操作(hashlib、hmac、random、base64、pycrypto)
  18. 【软件下载】Excel下载 word下载 官方 官网下载 原始镜像 开发工具 开发软件下载
  19. 第三十五天:XSS跨站反射存储DOM盲打劫持
  20. 物联网|物联网领域常用通信类型

热门文章

  1. 解决连接mysql数据库出现Caused by: com.mysql.cj.exceptions.InvalidConnectionAttributeException: The server tim
  2. 关于微博运营的几点思考
  3. 【原创】正泰昆仑SDU666单项电子式电能表与西门子s7-200smart modbus-rtu通信应用说明
  4. 保存登录信息的Cookie加密技术
  5. 独角兽项目 3 - 反叛军
  6. Lemur(狐猴)一个用于自然语言模型和信息检索研究的系统
  7. 各大券商提供的量化终端怎么样?
  8. python的浮点数占 个字节_Python的浮点数占( )字节_学小易找答案
  9. 护眼灯真的可以保护眼睛吗?2022买什么护眼灯不伤孩子眼睛
  10. sizeof的用法详解