El uso de PreparedStatement, c3p0 y DBUtiles en el experimento javaweb
Paquetes jar y complementos utilizados en este experimento:
<dependency>
<groupId>commons-dbutils</groupId>
<artifactId>commons-dbutils</artifactId>
<version>1.7</version>
</dependency>
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.1.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<port>9100</port>
</configuration>
</plugin>
</plugins>
</build>
Archivo db.properties en recursos
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/shop2?useUnicode=true&charcterEncoding=utf8&useSSL=false
username=root
password=myPasspwrod
1. Utilice PreparedStatement para realizar la función de registro de usuarios.
1.1agregar parte del código Servlet
@WebServlet("/addServlet")
public class addServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setContentType("test/html;charset=UTF-8");
Connection conn=null ;
ResultSet rs=null ;
PreparedStatement ps=null ;
PrintWriter writer = response.getWriter();
//获取登录页面提交的数据
String loginName = request.getParameter("userName");
String loginPassword = request.getParameter("password");
String sex = request.getParameter("sex");
//sql语句
String addSql= "insert into tb_user(username, password,gender) values (?,?,?)";
// String loginSql = "select * from tb_user where username =? and password=?";
try {
//获取与数据库的链接
conn = jdbcUtils.getConnaction();
ps = conn.prepareStatement(addSql);
ps.setString(1, loginName);
ps.setString(2, loginPassword);
ps.setString(3, sex);
int i = ps.executeUpdate();
if(i!=0){
writer.write("注册成功");
}else {
writer.write("注册失败");
}
writer.flush();
writer.close();
} catch (SQLException e) {
e.printStackTrace();
}finally {
jdbcUtils.release(conn,ps,rs);
}
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request, response);
}
1.2 parte del código add.html
1.3 código jdbcUtils
public class jdbcUtils {
private static String driver=null;
private static String url=null;
private static String username=null;
private static String password=null;
static {
try{
InputStream in = jdbcUtils.class.getClassLoader().getResourceAsStream("db.properties");
Properties properties = new Properties();
properties.load(in);
driver = properties.getProperty("driver");
url = properties.getProperty("url");
username = properties.getProperty("username");
password = properties.getProperty("password");
//驱动只用加载一次
Class.forName(driver);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public static Connection getConnaction() throws SQLException {
return DriverManager.getConnection(url,username,password);
}
public static void release(Connection conn, PreparedStatement stat, ResultSet rs) {
if(rs!=null){
try{
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(stat!=null){
try{
stat.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn!=null){
try{
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
1.4tb_tabla de usuario
1.5 Parte de prueba
Ingrese el nombre lxlxllx en la página add.html, la contraseña es 123 y el género es femenino. Después del envío, se le indicará que el registro se realizó correctamente.
Abra la tabla tb_user y descubra que la información de registro está almacenada y que la prueba fue exitosa.
2. Utilice la fuente de datos c3p0 para implementar la función de inicio de sesión del usuario
2.1código de inicio de sesión de declaración preparada
@WebServlet("/preparedStatementDemo")
public class preparedStatementlogin extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
request.setCharacterEncoding("UTF-8");
response.setContentType("test/html;charset=UTF-8");
Connection conn=null ;
ResultSet rs=null ;
PreparedStatement ps=null ;
//获取登录页面提交的数据
String loginName = request.getParameter("userName");
String loginPassword = request.getParameter("password");
String remember = request.getParameter("remember");
//sql语句
String loginSql = "select * from tb_user where username =? and password=?";
try {
//获取与数据库的链接
conn = c3p0Utils.getDataSource().getConnection();
ps = conn.prepareStatement(loginSql);
ps.setString(1, loginName);
ps.setString(2, loginPassword);
rs = ps.executeQuery();
HttpSession session = request.getSession();
String contextPath = request.getContextPath();
if (rs.next()) {
if("1".equals(remember)) {
session.setAttribute("password", loginPassword);
session.setAttribute("userName", loginName);
}
response.sendRedirect(contextPath+"/welcome.html");
} else {
response.sendRedirect(contextPath+"/loginPrepared.jsp");
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
jdbcUtils.release(conn,ps,rs);
}
}
2.2Código loginPrepared.jsp
El código 2.3jdbcUtils es el mismo que 1.3, abreviado
### 2.4c3p0Utils代码
public class c3p0Utils {
private static String driver=null;
private static String url=null;
private static String username=null;
private static String password=null;
public static DataSource ds = null;
// 初始化C3P0数据库连接池
static {
ComboPooledDataSource cpds = new ComboPooledDataSource();
// 设置连接数据库需要的配置信息
try {
InputStream in = jdbcUtils.class.getClassLoader().getResourceAsStream("db.properties");
Properties properties = new Properties();
properties.load(in);
driver = properties.getProperty("driver");
url = properties.getProperty("url");
username = properties.getProperty("username");
password = properties.getProperty("password");
cpds.setDriverClass(driver);
cpds.setJdbcUrl(url);
cpds.setUser(username);
cpds.setPassword(password);
//设置连接池的参数
cpds.setInitialPoolSize(5);
cpds.setMaxPoolSize(15);
ds = cpds;
} catch (Exception e) {
throw new ExceptionInInitializerError(e);
}
}
public static DataSource getDataSource() throws SQLException {
return ds;
}
public static void release(Connection conn, PreparedStatement stat, ResultSet rs) {
if(rs!=null){
try{
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(stat!=null){
try{
stat.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn!=null){
try{
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
2.5tb_información de usuario
2.6 Pruebas
Ingrese su nombre Xiaoxia en la página de inicio de sesión y contraseña 1237
Después del envío, vaya a la página bienvenido.html
Vuelva a cargar la página si se ingresa información incorrecta, como por ejemplo:
Después de la presentación
¡Éxito de la prueba!
3. Utilice c3p0+DBUtiles para implementar la función de cierre de sesión del usuario
3.1 eliminar código de servlet
@WebServlet("/deleteServlet")
public class deleteServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setContentType("test/html;charset=UTF-8");
String userName = request.getParameter("userName");
String password = request.getParameter("password");
Connection conn=null ;
try {
PrintWriter writer = response.getWriter();
QueryRunner queryRunner = new QueryRunner();
String deleteSql="delete from tb_user where username= ? and password= ?" ;
Object [] params = new Object[]{
userName, password};
conn=c3p0Utils.getDataSource().getConnection();
int i = queryRunner.update(conn, deleteSql, params);
if(i>0){
writer.write("用户注销成功");
}else{
writer.write("用户注销失败");
}
writer.flush();
writer.close();
} catch (SQLException e) {
throw new RuntimeException(e);
}finally {
jdbcUtils.release(conn, null, null);
}
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request, response);
}
}
3.2eliminar código.html
El código 3.3c3p0Utils es el mismo que 2.4, abreviado
3.4tb_tabla de usuarios
3.5 Pruebas
El objetivo es eliminar el usuario cuya identificación es 169 en la imagen de arriba, ingrese el nombre flor en eliminar.html y la contraseña es 576.
La página se muestra después del envío.
Verifique la tabla tb_user y los datos se han eliminado correctamente.
4. Utilice c3p0 + PreparedStatement para realizar la función de modificación de contraseña del usuario.
4.1actualizar código de servlet
@WebServlet("/preparedStatementDemo")
public class preparedStatementlogin extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
request.setCharacterEncoding("UTF-8");
response.setContentType("test/html;charset=UTF-8");
Connection conn=null ;
ResultSet rs=null ;
PreparedStatement ps=null ;
//获取登录页面提交的数据
String loginName = request.getParameter("userName");
String loginPassword = request.getParameter("password");
String remember = request.getParameter("remember");
//sql语句
String loginSql = "select * from tb_user where username =? and password=?";
try {
//获取与数据库的链接
conn = c3p0Utils.getDataSource().getConnection();
ps = conn.prepareStatement(loginSql);
ps.setString(1, loginName);
ps.setString(2, loginPassword);
rs = ps.executeQuery();
HttpSession session = request.getSession();
String contextPath = request.getContextPath();
if (rs.next()) {
if("1".equals(remember)) {
session.setAttribute("password", loginPassword);
session.setAttribute("userName", loginName);
}
response.sendRedirect(contextPath+"/welcome.html");
} else {
response.sendRedirect(contextPath+"/loginPrepared.jsp");
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
jdbcUtils.release(conn,ps,rs);
}
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request, response);
}
}
4.2actualizar código.html
4.3 tabla tb_user
El código 4.4 c3p0Utils es el mismo que 2.4, abreviado
4.5 Prueba
Ingrese el nombre Xiaoxia y la contraseña 1223456 en la página update.html
Enviar consejos
Verifique la tabla tb_user y la contraseña se cambió correctamente.