用IDEA进行Java后台开发(三)
在上一篇用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后台开发(三)相关推荐
- 【Java后台】从零开始的Java后台开发(三)
编写基础的Servlet应用程序 1 Servlet 使用Servlet需要在pom.xml中引入以下依赖: <!-- https://mvnrepository.com/artifact/ja ...
- 蘑菇街Java后台开发一二面面经
蘑菇街Java后台开发一二面面经 本菜鸡妹妹的春招上岸之路,第一次挂经献给蘑菇街. 时间线 时间 状态 2020/3/6 内推投递后端开发岗位 2020/3/11 邮件确认一面时间 2 ...
- 【Java后台开发规范】--- 圈复杂度
文章目录 前言 其他类型的规范 圈复杂度 提炼方法 if.else 卫语句 去else 策略模式 switch 循环嵌套 其他建议 前言 做Java开发的,大多数可能都有看过阿里的Java后台开发手册 ...
- 面试题(19)今日头条Java后台研发三面题目
面试题(1)最全BAT面试精华汇总 面试题(2)阿里最全面试100题 面试题(3)史上最全阿里技术面试题目 面试题(4)阿里等BAT必考多线程面试60题 面试题(5)BAT面试笔试33题:JavaLi ...
- 跨专业转计算机拿下百度java后台开发的经验分享
前言 本文出自我的一位朋友,他是跨专业最终成功转行计算机,拿下了百度的java后台开发offer,之前他一直说着要给大家分享一波经验,今天完成了写作,希望对大家有帮助.(PS:另外也欢迎大家投稿分享自 ...
- 美团、滴滴实习生面经(滴滴offer,Java后台开发岗)
笔者是大三本科生,一直以来在考研和参加工作两个想法之间徘徊,最终在今年3月份下定决心参加工作,之后参加了春招,投的全部是java后台开发岗实习生. 在春招过程中投了不少公司,有京东.头条.网易.美团. ...
- 用IDEA进行Java后台开发(二)
这篇博客接上一篇,用IDEA进行Java后台开发(一) 上一篇我们已经将工程创建完成了,下面我们将创建一个Servlet,然后本地启动tomcat后调用接口,返回helloWorld,过程如下: 1. ...
- 面经:阿里Java后台开发
点击"蓝字"关注我们获得资讯/干货/内推 最近原来实习时候的Boss联系我,说他跳槽到了阿里,问我有没有兴趣面一个Java后台开发岗位. 考虑到我只工作了一年,现在去阿里肯定 ...
- 阿里Java后台开发是怎么面试的
最近原来实习时候的Boss联系我,说他跳槽到了阿里,问我有没有兴趣面一个Java后台开发岗位. 考虑到我只工作了一年,现在去阿里肯定要降薪,因此也没有太强烈的意愿.但出于提升自我的角度考虑,参加了面试 ...
最新文章
- Citrix XenServer@cloudstack基本功能测试报告2
- centos7 安装kubernetes1.4(kubeadm版)
- HDU 1028 HDU Ignatius and the Princess III
- 高精度除以低精度板子
- 快节奏多人游戏同步:技术与算法的实现
- 1113: 递归调用的次数统计(函数专题)
- java 魔数_Java 字节码结构解析
- android 自动更新
- 嵌入式转linux服务器,嵌入式Linux中的Web服务器应用
- wireshark tshark抓包筛选并存入文件 Centos linux 命令行抓包 yum安装wireshark
- IS-IS详解(十八)——IS-IS 缺省路由
- 常用App用户体验找茬
- Visual Studio Code 运行html文件右键Open In Other Browsers提示找不到Chrome的解决办法
- 电脑课学生端密码查看
- 百度云c++语言模拟器,C++语言基础教程
- 武汉大学计算机学院夏桂松,实验室硕士研究生王碧杉、何敬伟在ECCV上发表事件相机高质量图像重建论文...
- Python数据加密,解密的相关操作(hashlib、hmac、random、base64、pycrypto)
- 【软件下载】Excel下载 word下载 官方 官网下载 原始镜像 开发工具 开发软件下载
- 第三十五天:XSS跨站反射存储DOM盲打劫持
- 物联网|物联网领域常用通信类型
热门文章
- 解决连接mysql数据库出现Caused by: com.mysql.cj.exceptions.InvalidConnectionAttributeException: The server tim
- 关于微博运营的几点思考
- 【原创】正泰昆仑SDU666单项电子式电能表与西门子s7-200smart modbus-rtu通信应用说明
- 保存登录信息的Cookie加密技术
- 独角兽项目 3 - 反叛军
- Lemur(狐猴)一个用于自然语言模型和信息检索研究的系统
- 各大券商提供的量化终端怎么样?
- python的浮点数占 个字节_Python的浮点数占( )字节_学小易找答案
- 护眼灯真的可以保护眼睛吗?2022买什么护眼灯不伤孩子眼睛
- sizeof的用法详解