Java后端开发——JDBC组件

news2024/11/28 14:28:03

JDBC(Java Database Connectivity)是Java SE平台的一种标准API,它提供了一种标准的方法来访问关系型数据库,使得Java程序能够与各种不同的数据库进行交互,这篇文章我们来进行实验体验一下。

自定义JDBC连接工具类
1.编写第一代JDBCUtils并测试查看结果
第一代JDBCUtils:

package com.javaweb.utils;
import java.io.FileReader;
import java.sql.*;
import java.util.Properties;

public class JDBCUtils2 {
  private static String driver;
  private static String url;
  private static String user;
  private static String password;
static {
  try {
    // 1. 创建Properties集合类。
      Properties properties = new Properties();
    // 2. 加载文件
    properties.load(new FileReader(JDBCUtils.class.getClassLoader().getResource("jdbc.properties").getPath()));
 driver = properties.getProperty("driver");
 url = properties.getProperty("url");
 user = properties.getProperty("user");
 password = properties.getProperty("password");
 // 注册驱动
 Class.forName(driver);
 } catch (Exception e) {
   e.printStackTrace();
 }
 }
public static Connection getConnection() throws SQLException { 
	   return   DriverManager.getConnection(url, user, password);
	}

	// 释放资源
	public static void close(ResultSet rs, PreparedStatement pstm, Connection conn) {
	try {
	     if (rs != null) {
	       rs.close();
	     }
	     if (pstm != null) {
	        pstm.close();
	     }
	     if (conn != null) {
	        conn.close();
	     }
	     } catch (SQLException e) {
	         e.printStackTrace();
	    }
	}
}

在这里插入图片描述
第一代JDBCUtils测试:

package com.javaweb.utils;

import java.sql.*;

public class testJdbcUtils1 {
	public static void main(String[] args) throws Exception {
		Connection conn = JDBCUtils.getconnection();
		String sql="update account set money = ? where id = ?";
		PreparedStatement pstm = conn.prepareStatement(sql);
		pstm.setString(1, "20000");
		pstm.setString(2, "1");
		int count=pstm.executeUpdate();
		JDBCUtils.close( null,pstm, conn);
		System.out.println(count);
	}
}

在这里插入图片描述
在这里插入图片描述
2.编写第二代JDBCUtils并测试查看结果
在src下创建数据库连接配置文件:jdbc.properties
在这里插入图片描述
第二代JDBCUtils代码:

package com.javaweb.utils;
import java.io.FileReader;
import java.sql.*;
import java.util.Properties;

public class JDBCUtils2 {
  private static String driver;
  private static String url;
  private static String user;
  private static String password;
static {
  try {
    // 1. 创建Properties集合类。
      Properties properties = new Properties();
    // 2. 加载文件
    properties.load(new FileReader(JDBCUtils.class.getClassLoader().getResource("jdbc.properties").getPath()));
 driver = properties.getProperty("driver");
 url = properties.getProperty("url");
 user = properties.getProperty("user");
 password = properties.getProperty("password");
 // 注册驱动
 Class.forName(driver);
 } catch (Exception e) {
   e.printStackTrace();
 }
 }
public static Connection getConnection() throws SQLException { 
	   return   DriverManager.getConnection(url, user, password);
	}

	// 释放资源
	public static void close(ResultSet rs, PreparedStatement pstm, Connection conn) {
	try {
	     if (rs != null) {
	       rs.close();
	     }
	     if (pstm != null) {
	        pstm.close();
	     }
	     if (conn != null) {
	        conn.close();
	     }
	     } catch (SQLException e) {
	         e.printStackTrace();
	    }
	}
}

在这里插入图片描述
第二代JDBCUtils测试:

package com.javaweb.utils;
import java.sql.*;
public class testJdbcUtils2 {
	public static void main(String[] args) throws Exception {
		Connection conn = JDBCUtils2.getConnection();
		String sql = "update account set money = ? where id = ?";
		PreparedStatement pstmt = conn.prepareStatement(sql);
		pstmt.setDouble(1, 50000);
		pstmt.setInt(2, 1);
		int count = pstmt.executeUpdate();
		System.out.println(count);
	}
}

在这里插入图片描述
在这里插入图片描述
封装增删改查DAO
1.搭建数据库环境,创建库tb_user,插入测试记录
在MySQL中创建一个名称为db的数据库,然后在该数据库中创建一个tb_user表,再向表中插入3条数据。

create database db charset=utf8;
CREATE TABLE tb_user(
     id INT PRIMARY KEY AUTO_INCREMENT,
     username VARCHAR(40),
     password VARCHAR(40),
     email VARCHAR(60),
     birthday DATE 
)CHARACTER SET utf8 COLLATE utf8_general_ci;
INSERT INTO tb_user(username,password ,email,birthday) VALUES('zs','123456','zs@sina.com','1980-12-04');
INSERT INTO tb_user(username,password ,email,birthday) VALUES('lisi','123456','lisi@sina.com','1981-12-04');
INSERT INTO tb_user(username,password ,email,birthday) VALUES('wangwu','123456','wangwu@sina.com','1979-12-04');

在这里插入图片描述
2.创建JavaBean:User.java
在src目录下,新建一个名称为chapter02.jdbc.example的包
创建JavaBean,User类的具体实现方式如下:

package com.javaweb.bean;


import java.util.Date;
 
	public class user {
		private int id;
		public int getId() {
			return id;
		}
		public void setId(int id) {
			this.id = id;
		}
		public String getUsername() {
			return username;
		}
		public void setUsername(String username) {
			this.username = username;
		}
		public String getPassword() {
			return password;
		}
		public void setPassword(String password) {
			this.password = password;
		}
		public String getEmail() {
			return email;
		}
		public void setEmail(String email) {
			this.email = email;
		}
		public Date getBirthday() {
			return birthday;
		}
		public void setBirthday(Date birthday) {
			this.birthday = birthday;
		}
		private String username;
		private String password;
		private String email;
		private Date birthday;
	}

在这里插入图片描述
创建数据库访问层DAO类封装增删改查代码:UserDao.java

package chapter02.jdbc.example;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.text.SimpleDateFormat;
import java.util.ArrayList;

import com.javaweb.bean.user;

 
public class UsersDao {
	//添加用户的操作
	public boolean insert(user user) {
		Connection conn = null;
		Statement stmt=null;
		ResultSet rs = null;
		try {
			conn = JDBCUtils.getConnection();
			stmt = conn.createStatement();
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
			String birthday = sdf.format(user.getBirthday());
			String sql = "INSERT INTO tb_user(id,username,password,email,birthday)"+
						"VALUES("
						+user.getId()
						+",'"
						+user.getUsername()
						+"','"
						+user.getPassword()
						+"','"
						+user.getEmail()
						+"','"
						+birthday + "')";
			System.out.println(sql);
			int num = stmt.executeUpdate(sql);
			if (num > 0) {
				return true;
			}
			return false;
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			JDBCUtils.release(rs,stmt,conn);
		}
		return false;
	}
	
	public ArrayList<user> findAll(){
		Connection conn = null;
		Statement stmt=null;
		ResultSet rs = null;
		ArrayList<user> list = new ArrayList<user>();
		try {
			conn = JDBCUtils.getConnection();
			stmt = conn.createStatement();
			String sql = "SELECT * FROM tb_user";
			rs = stmt.executeQuery(sql);
			while(rs.next()) {
				user user = new user();
				user.setId(rs.getInt("id"));
				user.setUsername(rs.getString("username"));
				user.setPassword(rs.getString("password"));
				user.setEmail(rs.getString("email"));
				user.setBirthday(rs.getDate("birthday"));
				list.add(user);
			}
			return list;
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			JDBCUtils.release(rs, stmt, conn);
		}
		return null;
	}
	public user find(int id) {
		Connection conn=null;
		Statement stmt=null;
		ResultSet rs = null;
		try {
			conn = JDBCUtils.getConnection();
			stmt=conn.createStatement();
			String sql = "SELECT * FROM tb_user WHERE id=" + id;
			rs = stmt.executeQuery(sql);
			while(rs.next()) {
				user user = new user();
				user.setId(rs.getInt("id"));
				user.setUsername(rs.getString("username"));
				user.setPassword(rs.getString("password"));
				user.setEmail(rs.getString("email"));
				user.setBirthday(rs.getDate("birthday"));
				return user;
			}
			return null;
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			JDBCUtils.release(rs,stmt, conn);
		}
		return null;
	}
	public boolean delete(int id) {
		Connection conn = null;
		Statement stmt = null;
		ResultSet rs = null;
		try {
			conn = JDBCUtils.getConnection();
			stmt= conn.createStatement();
			String sql = "DELETE FROM tb_user WHERE id=" + id;
			int num =stmt.executeUpdate(sql);
			if(num > 0) {
				return true;
			}
			return false;
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			JDBCUtils.release(rs, stmt,conn);
		}
		return false;
	}
	public boolean update(user user) {
		Connection conn =null;
		Statement stmt = null;
		ResultSet rs = null;
		try {
			conn= JDBCUtils.getConnection();
			stmt = conn.createStatement();
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
			String birthday =sdf.format(user.getBirthday());
			String sql = "UPDATE tb_user set username='"+user.getUsername()
						+"',password='"+user.getPassword() + "',email='"
						+user.getEmail() + "',birthday='" + birthday
						+"'WHERE id=" + user.getId();
			int num = stmt.executeUpdate(sql);
			if (num > 0) {
				return true;
			}
			return false;
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			JDBCUtils.release(rs, stmt, conn);
		}
		return false;
	}
}

在这里插入图片描述
4.利用JUnit对DAO的方法进行单元测试,并查看结果
创建测试类JDBCTESTl,利用JUnit对DAO-insert方法添加tb_user表中的数据:

在这里插入代码片`package chapter02.jdbc.example;


import java.util.Date;

import com.javaweb.bean.user;

@Test
public class JDBCTest {
	public static void main(String[] args) {
		//向users表插入一个用户信息
		UsersDao ud = new UsersDao();
		user user=new user();
		user.setId(4);
		user.setUsername("xiaoli");
		user.setPassword("00000");
		user.setEmail("h23526456@qq.com");
		user.setBirthday(new Date());
		boolean b= ud.insert(user);
		System.out.println(b);
	}
	
}`

在这里插入图片描述
测试结果:
在这里插入图片描述
创建测试类JDBCTEST03,利用JUnit对DAO-findAll方法根据ID查询tb_user表中数据:

package chapter02.jdbc.example;


import java.util.ArrayList;

import com.javaweb.bean.user;
 
public class FindAllUsersTest {
	public static void main(String[] args) {
		UsersDao usersDao = new UsersDao();
		ArrayList<user> list = usersDao.findAll();
		for (int i=0; i< list.size(); i++) {
			System.out.println("第" + (i+1) + "条数据的username的值为:"
					+list.get(i).getUsername());
		}
	}
 
}

在这里插入图片描述
在这里插入图片描述
测试结果,成功查询出tb_user表中所有username值:
在这里插入图片描述
创建测试类JDBCTEST03,利用JUnit对DAO-find方法根据ID查询tb_user表中数据:
我们根据ID查询tb_user表中ID为13的数据库信息:

package chapter02.jdbc.example;

import static org.junit.Assert.*;

import org.junit.Test;

import com.javaweb.bean.user;

public class JDBCTEST03 {

	
	@Test
	public void testFind() throws Exception {
	UsersDao dao= new UsersDao();
	user user=dao.find(13);
	System.out.println("id为13的User对象的name值为:"+user.getUsername());
	}


}

在这里插入图片描述
测试结果:
成功通过ID查询rb_user表中ID为13的username信息
在这里插入图片描述

创建测试类JDBCTEST04,利用JUnit对DAO-update方法方法根据ID更新tb_user表中数据:

package chapter02.jdbc.example;

import java.util.Date;

import org.junit.Test;

import com.javaweb.bean.user;

public class JDBCTEST04 {

	@Test
	public void testUpdate() throws Exception {
	        UsersDao dao= new UsersDao();
	        user user=new user();
	        user.setId(13);
	        user.setUsername("项秀才让");
	        user.setPassword("abc");
	        user.setEmail("123456@sina.com");
	        user.setBirthday(new Date());
	        boolean b=dao.update(user);
	        System.out.println(b);
	}

}

在这里插入图片描述
测试结果:
成功修改ID为13的数据库记录信息!
在这里插入图片描述
创建测试类JdbcTest01,利用DAO-delete方法删除tb_user表中的数据

package chapter02.jdbc.example;
import org.junit.jupiter.api.Test;
class JdbcTest01 {

	@Test
	public void testDelete() {
	   UsersDao dao= new UsersDao();
	   boolean b=dao.delete(8);
	   System.out.println(b);
	}	
}

在这里插入图片描述
测试结果和sql查询结果:
在这里插入图片描述
用户登录程序
1.创建数据库表
在MySQL中使用一个名称为db_myweb的数据库,然后在该数据库中创建一个tb_user表,再向表中插入3条数据。

在这里插入代码片`Use db_myweb;
CREATE TABLE tb_user(
     id INT PRIMARY KEY AUTO_INCREMENT,
     username VARCHAR(40),
     password VARCHAR(40),
     email VARCHAR(60),
     birthday DATE 
)CHARACTER SET utf8 COLLATE utf8_general_ci;
插入数据:
INSERT INTO tb_user(username,password ,email,birthday) VALUES('zs','123456','zs@sina.com','1980-12-04');
INSERT INTO tb_user(username,password ,email,birthday) VALUES('lisi','123456','lisi@sina.com','1981-12-04');
INSERT INTO tb_user(username,password ,email,birthday) VALUES('wangwu','123456','wangwu@sina.com','1979-12-04');
`

在这里插入图片描述
2.编写登录页面
在web目录下创建一个名称为login的JSP文件,在该文件中添加用于用户登录时输入用户信息的表单元素。

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="/myweb/LoginServlet" method="post">
用户名:<input type="text" name="username">     <br>
密  码:<input type="password" name="password"> <br> 
<input type="submit" value="登录">
</form>
</body>
</html>

在这里插入图片描述
3.编写工具类
由于每次操作数据库时,都需要加载数据库驱动、建立数据库连接以及关闭数据库连接,为了避免代码的重复书写,所以需要建立一个专门用于操作数据库的工具类。在src下创建一个包com.javaweb.utils,在包中创建一个封装了上述操作的工具类JDBCUtils。

package com.javaweb.utils;

import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;

import com.mysql.jdbc.Connection;

public class JDBCUtils {
	  // 加载驱动
	  static {
	  try {
	    Class.forName("com.mysql.jdbc.Driver");
	  } catch (ClassNotFoundException e) {
	    e.printStackTrace();
	  }
	  }
	// 获取连接
	public static Connection getconnection() throws Exception {
	   String url = "jdbc:mysql://localhost:3306/db_myweb?useSSL=false";
	   String user = "root";
	   String password = "root";
	   Connection conn = (Connection) DriverManager.getConnection(url, user, password);
	   return conn;
	}
	// 释放资源
	public static void close(ResultSet rs, java.sql.PreparedStatement pstm, java.sql.Connection conn) {
	try {
	     if (rs != null) {
	       rs.close();
	     }
	     if (pstm != null) {
	        pstm.close();
	     }
	     if (conn != null) {
	        conn.close();
	     }
	     } catch (SQLException e) {
	         e.printStackTrace();
	    }
	 }
	}

在这里插入图片描述
4.UserDao增加方法按用户名和密码查询方法

// 根据username,password查找指定的user
public boolean findByUsernameAndPassword(String username,String password){
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
// 获得数据的连接
conn = JDBCUtils.getConnection();
// 发送SQL语句
String sql = "select * from tb_user where username=? and password=?";
// 获得PreparedStatement对象
pstmt = (PreparedStatement) conn.prepareStatement(sql);
pstmt.setString(1, username);
pstmt.setString(2, password);
rs = pstmt.executeQuery();
// 处理结果集
if (rs.next()) 
return true;
return false;
} catch (Exception e) {
e.printStackTrace();
} finally {
JDBCUtils.close(rs, pstmt, conn);
}
return false;
}

在这里插入图片描述
5.实现登录功能的LoginServlet

package com.javaweb.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class LoginServlet
 */
@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
     request.setCharacterEncoding("UTF-8");
     response.setContentType("text/html;charset=utf-8"); 
     PrintWriter out = response.getWriter();
     String username=request.getParameter("username");
     String password=request.getParameter("password");
     if(username!=null&&password!=null&&!username.equals("")&&!password.equals("")) {
          UserDao dao=new UserDao();
          boolean b=dao.findByUsernameAndPassword(username, password);
          if(b)
	  out.print("欢迎登录!");
          else
	  out.print("用户名或密码不正确!");	
          }else
	   out.print("用户名或密码不能为空!");	
    }

}

在这里插入图片描述
运行项目,查看效果
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
C3P0数据库连接池实验
1.导入JAR包c3p0-0.9.2.1.jar和mchange-commons-java-0.2.3.4.jar
在项目中导入JAR包c3p0-0.9.2.1.jar和mchange-commons-java-0.2.3.4.jar,并使用C3P0数据库连接池对象获取Connection对象。
在这里插入图片描述
2.创建C3P0Test测试用例类,测试代码

package com.javaweb.test;


import java.sql.Connection;
import java.sql.SQLException;

import org.junit.Test;


import com.mchange.v2.c3p0.ComboPooledDataSource;

public class C3P0Test {

@Test
public void test() throws PropertyVetoException, SQLException, java.beans.PropertyVetoException {
ComboPooledDataSource ds = new ComboPooledDataSource();
ds.setDriverClass("com.mysql.jdbc.Driver");
ds.setJdbcUrl("jdbc:mysql://localhost:3306/db_myweb?useSSL=false");
ds.setUser("root");
ds.setPassword("root");
ds.setInitialPoolSize(5);
ds.setMaxPoolSize(10);
Connection conn = ds.getConnection();
System.out.println(conn);
}


}

在这里插入图片描述
测试结果:
在这里插入图片描述
3.在项目的src根目录下创建一个c3p0-config.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<default-config>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl"> jdbc:mysql://localhost:3306/db_myweb?useSSL=false</property>
<property name="user">root</property>
<property name="password">root</property>
<property name="checkoutTimeout">30000</property>
<property name="initialPoolSize">10</property>
<property name="maxIdleTime">30</property>
<property name="maxPoolSize">10</property>
<property name="minPoolSize">2</property>
<property name="maxStatements">200</property>
</default-config>
</c3p0-config>

在这里插入图片描述
在这里插入图片描述
4.创建C3P0Test测试用例类,测试代码

package chapter02.jdbc.example;

import java.beans.PropertyVetoException;
import java.sql.SQLException;

import org.junit.Test;

import com.mchange.v2.c3p0.ComboPooledDataSource;
import com.mysql.jdbc.Connection;

public class C3P0Test {


@Test
public void testC3P0() throws SQLException {
ComboPooledDataSource ds= new ComboPooledDataSource();
System.out.println(ds.getConnection());
}
}

在这里插入图片描述
测试结果:
测试成功!
在这里插入图片描述
5.封装DataSourceUtils工具类

package com.javaweb.test;

import java.sql.SQLException;

import com.mysql.jdbc.Connection;

public class DataSourceUtils {
    private static ComboPooledDataSource ds=new ComboPooledDataSource();
    public static ComboPooledDataSource getDataSource()
    {
        return  ds;
    }
    public static Connection getConnection() throws SQLException {
        return ds.getConnection();
    }
}

在这里插入图片描述
6.修改UserDao从DataSourceUtils工具类,获取数据库连接,并测试结果。
在这里插入图片描述在这里插入图片描述

BUtils工具增删改查
1.将commons-dbutils-1.7.jar添加到项目的lib目录中
在这里插入图片描述
2.创建UserDaoQr.java,编写QueryRunner示例代码:增加、删除、修改

package cn.itcast.jdbc.dao;

import java.sql.SQLException;
import java.util.List;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;

import cn.itcast.jdbc.javabean.User;
import cn.itcast.jdbc.utils.DataSourceUtils;

public class UserDaoQr {
public boolean insert(User user) throws SQLException {
QueryRunner r = new QueryRunner(DataSourceUtils.getDataSource());
String sql = "INSERT INTO t_user(id,username,password) VALUES(null,?,?)";
int num= r.update(sql,user.getName(),user.getPassword());
if (num > 0) {
return true;
}
return false;
}
public boolean update(User user) throws SQLException {
QueryRunner r = new QueryRunner(DataSourceUtils.getDataSource());
String sql = "update t_user set username=?,password=?";
int num= r.update(sql,user.getName(),user.getPassword());
if (num > 0) {
return true;
}
return false;
}

public boolean delete(int id) throws SQLException {
QueryRunner r = new QueryRunner(DataSourceUtils.getDataSource());
String sql = "delete from t_user where id=?";
int num= r.update(sql,id);
if (num > 0) {
return true;
}
return false;
}

public User find(int id) throws SQLException{
QueryRunner r = new QueryRunner(DataSourceUtils.getDataSource());
String sql = "SELECT * FROM user WHERE id=?";
User user= r.query(sql, new BeanHandler<User>(User.class),id);
return user;
}
public List<User> findAll() throws SQLException{
QueryRunner r = new QueryRunner(DataSourceUtils.getDataSource());
String sql = "SELECT * FROM user";
List<User> list=r.query(sql, new BeanListHandler<User>(User.class));
return list;
}


}

在这里插入图片描述
3.QueryRunner示例代码:单元测试增删改代码
单元测试增加数据:

package cn.itcast.jdbc.dao;
import java.sql.SQLException;

import org.junit.Test;

import cn.itcast.jdbc.javabean.User;

public class test {
@Test
			public void testInsert() throws SQLException {
			UserDaoQr dao=new UserDaoQr();
			User user=new User();
			user.setName("svdviming");
			user.setPassword("dad2dadadadad3");
			
			boolean b=dao.insert(user);
			
			if(b)
			System.out.println("数据插入成功!");
			else
			System.out.println("数据插入失败!");
			}
}
		单元测试删除数据:
@Test
public void testDelete() throws SQLException {
UserDaoQr dao=new UserDaoQr();
boolean b=dao.delete(3);
if(b)
System.out.println("数据删除成功!");
else
System.out.println("数据删除失败!");
}

}

测试结果:
数据删除成功!
在这里插入图片描述
4.QueryRunner示例代码:查询单个,并测试

package cn.itcast.jdbc.dao;

import java.sql.SQLException;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;


import cn.itcast.jdbc.javabean.User;
import cn.itcast.jdbc.utils.DataSourceUtils;

public class UserDaoQr {
	 public User find(int id) throws SQLException{
	     QueryRunner r = new QueryRunner(DataSourceUtils.getDataSource());
	     String sql = "SELECT * FROM user WHERE id=?";
	     User user= r.query(sql, new BeanHandler<User>(User.class),id);
	     return user;
	  }

}

测试ID为2的数据:

package cn.itcast.jdbc.dao;

import java.sql.SQLException;

import org.junit.Test;

import cn.itcast.jdbc.javabean.User;

public class test {
	@Test
	public void testFind() throws SQLException {
	  UserDaoQr dao=new UserDaoQr();
	   User user=dao.find(2);
	   System.out.println("name="+user.getName());
	 }


}

测试结果:
成功查询ID=2的数据!
在这里插入图片描述
5.QueryRunner示例代码:查询全部,并测试

package cn.itcast.jdbc.dao;

import java.sql.SQLException;
import java.util.List;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;

import cn.itcast.jdbc.javabean.User;
import cn.itcast.jdbc.utils.DataSourceUtils;

public class UserDaoQr {
public List<User> findAll() throws SQLException{
QueryRunner r = new QueryRunner(DataSourceUtils.getDataSource());
String sql = "SELECT * FROM user";
List<User> list=r.query(sql, new BeanListHandler<User>(User.class));
return list;
}
}

测试结果:
成功通过 findAll测试查询表中数据信息。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1166451.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【快刊推荐】EI快刊盘点,仅29天录用,国人友好,接收领域广!

综合类EI • 快刊推荐 01 期刊简介 检索数据库&#xff1a;EI &Scopus &Google Scholar 版面类别&#xff1a;正刊 数据库收录年份&#xff1a;2009年 国人占比&#xff1a;47%&#xff0c;对国人友好 年发文量&#xff1a;20篇左右 02 接收领域 生物&#xff0…

使用C++的QT框架实现俄罗斯方块

今天实现一个简单的俄罗斯方块&#xff0c;网上别人写的都比较长还复杂&#xff0c;我就写了一个简单的&#xff0c;可以实现功能的俄罗斯方块&#xff0c;使用的是C语言&#xff0c;框架都可以&#xff0c;主要是逻辑思路有都可以实现 我这边实现的逻辑为两个数组包含各个动态…

“没有酒瓶”的新春礼酒,泸州老窖的颠覆性之作

执笔 | 萧 萧 编辑 | 扬 灵 没有想到&#xff0c;新春礼酒还能跳出生肖酒造型桎梏&#xff0c;开创出“没有酒瓶的白酒”。 没有想到&#xff0c;即将要发布的新品就“藏”在每一位参会者都触手可及的餐桌正中。 没有想到&#xff0c;首发定价如此“实诚”&#xff0c;加…

python爬取Web of science论文信息

一、python爬取WOS总体思路 (一)拟实现功能描述 wos里面&#xff0c;爬取论文的名称&#xff0c;作者名称&#xff0c;作者单位&#xff0c;引用数量 要求&#xff1a;英文论文、期刊无论好坏 检索关键词&#xff1a;zhejiang academy of agricultural sciences、 xianghu lab…

【并查集】93 岛屿数量

岛屿数量 题解1 DFS&#xff08;图论经典方法&#xff09;题解2 BFS(遍历&#xff08;DFS展开【顺序不同】&#xff09;)题解3 并查集&#xff08;学习理解&#xff09; 给你一个由 ‘1’&#xff08;陆地&#xff09;和 ‘0’&#xff08;水&#xff09;组成的的二维网格&…

TikTok未来展望:数字创新的下一浪潮

随着全球数字时代的蓬勃发展&#xff0c;TikTok已经成为一个巨大的现象&#xff0c;吸引了数以亿计的用户&#xff0c;尤其是年轻一代。这个短视频分享平台已经深刻影响了社交媒体、娱乐和文化。然而&#xff0c;TikTok未来的发展前景如何&#xff1f;本文将探讨TikTok的未来展…

哈希的开放定址法的实现【C++】

哈希的开放定址法的实现【C】 1 概述2 线性探测2.1 插入2.2 查找2.3 删除2.6 完整代码2.5 线性探测的优缺点 3. 二次探测 1 概述 开放定址法也叫闭散列&#xff0c;是解决哈希冲突的一种方法&#xff0c;当发生哈希冲突之后&#xff0c;如果哈希表没有被装满(正常情况哈希表不会…

饥荒联机版 Don‘t Starve Together(WinMac)最新中文学习版

《饥荒联机版》是由Klei自主开发的开放世界冒险游戏。在这个游戏中&#xff0c;玩家将扮演各种各样的人物&#xff0c;这些人物不幸来到了一个神秘的异世界。在旅行中&#xff0c;玩家会邂逅性格各异、能力独特的同伴们&#xff0c;并和他们一起生存下去并征服异世界。游戏中的…

每日一题 117. 填充每个节点的下一个右侧节点指针 II (中等,树)

BFS&#xff0c;一层层去搜索整棵树&#xff0c;然后建立next关系即可&#xff0c;下面给出的代码的空间复杂度是O(n)的O(1) 的做法&#xff0c;当构建完上一层的next关系后&#xff0c;我们就可以像链表一样从左到右访问上一层的节点&#xff0c;显然在访问的过程中&#xff0…

N-132基于springboot,vue人事管理系统

开发工具&#xff1a;IDEA 服务器&#xff1a;Tomcat9.0&#xff0c; jdk1.8 项目构建&#xff1a;maven 数据库&#xff1a;mysql5.7 系统分前后台&#xff0c;项目采用前后端分离 前端技术&#xff1a;vueelementUI 服务端技术&#xff1a;springbootmybatis-plus 本项…

自定义类型结构体(下)

目录 结构体传参结构体实现位段什么是位段位段的内存分配位段的跨平台问题总结&#xff1a; 位段的应用位段使用的注意事项** 感谢各位大佬对我的支持,如果我的文章对你有用,欢迎点击以下链接 &#x1f412;&#x1f412;&#x1f412; 个人主页 &#x1f978;&#x1f978;&a…

DataCastle企业风险算法赛实战(进阶难度)

目录 一、数据读取及分析 1、数据读取 2、数据分析 二、数据挖掘 三、模型构建及评估 四、划重点 推荐相关文章 去年在DataCastle上参加了华录杯算法赛&#xff0c;初赛前10、进复赛就没打了。相比于之前文章 kaggle风控建模实战&#xff08;文末附链接&#xff09;&…

智慧财务的未来

信息化时代&#xff0c;财务管理不再局限于传统的手工操作&#xff0c;而是借助RPA技术实现了自动化、智能化的转型。智慧财务作为财务管理的一种新模式&#xff0c;将为企业提供更加高效、便捷的服务&#xff0c;使企业能够更好地适应市场需求的变化&#xff0c;在瞬息万变的市…

批量删除文件名中的某些文字

怎么批量删除文件名中的某些文字&#xff1f;在整理电脑文件的时候&#xff0c;我们经常需要处理大量文件的重命名工作。当你的文件名称包含不必要或重复的字符时&#xff0c;可以进行批量删除&#xff0c;以使文件名称更简洁、清晰&#xff0c;提高可读性和识别性。例如&#…

【蓝桥杯软件赛 零基础备赛20周】第2周——常考知识点+判题

文章目录 0. 第1周答疑1. 常考知识点2. 蓝桥杯怎么判题2.1 判题系统如何判题2.2 测试数据和得分的关系2.3 自己做测试数据 3. 备赛计划4. 本周刷题 0. 第1周答疑 问题1&#xff1a;蓝桥杯怎么报名&#xff0c;什么时候报名&#xff1f; 答&#xff1a;集体报名或个人报名。大…

【word技巧】ABCD选项如何对齐?

使用word文件制作试卷&#xff0c;如何将ABCD选项全部设置对齐&#xff1f;除了一直按空格或者Tab键以外&#xff0c;还有其他方法吗&#xff1f;今天分享如何将ABCD选项对齐。 首先&#xff0c;我们打开【替换和查找】&#xff0c;在查找内容输入空格&#xff0c;然后点击全部…

利用关键字批量整理文件:用关键字轻松移动多个文件到指定文件夹

在日常生活和工作中&#xff0c;我们经常需要处理大量的文件&#xff0c;随着时间的推移&#xff0c;电脑中的文件越来越多&#xff0c;而文件的命名可能并不规范&#xff0c;导致查找和整理变得非常困难。因此&#xff0c;我们需要一种高效的文件管理方法&#xff0c;以方便我…

一种用醋酸刻蚀氧化铜的新方法

引言 由于乙酸不会氧化铜表面&#xff0c;因此乙酸常用于去除氧化铜而不侵蚀铜膜。乙酸还具有低表面张力&#xff0c;易于从表面移除。因此&#xff0c;不需要去离子(DI)水冲洗来移除残留的乙酸&#xff0c;可以防止水冲洗导致的铜再氧化。 英思特研究了在低温下用乙酸去除氧…

SSE加速随笔

Intel Intrinsics Guide 搞懂SSE 寄存器与指令数据细节 SSE指令集推出时&#xff0c;Intel公司在Pentium III CPU中增加了8个128位的SSE指令专用寄存器&#xff0c;称作XMM0到XMM7。这些XMM寄存器用于4个单精度浮点数运算的SIMD执行&#xff0c;并可以与MMX整数运算或x87浮点运…

01、SpringBoot + MyBaits-Plus 集成微信支付 -->项目搭建

目录 SpringBoot MyBaits-Plus 集成微信支付 之 项目搭建1、创建boot项目2、引入Swagger作用&#xff1a;2-1、引入依赖2-2、写配置文件进行测试2-3、访问Swagger页面2-4、注解优化显示 3、定义统一结果作用&#xff1a;3-1、引入lombok依赖3-2、写个统一结果的类-->RR类的…