1 什么是JDBC
概念:Java数据库连接,(Java Database Connectivity,简称JDBC)是Java语言中用来规范客户端程序 如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。JDBC也是Sun Microsystems的商标。我们通常说的JDBC是面向关系型数据库的。
各数据库厂商根据JDBC的规范,实现自身数据库操作的功能代码,然后以jar包(数据库厂商提供的驱动 包)的形式提供给开发人员使用,开发人员使用反射的机制创建这些具体实现类,按照JDBC的规范来完 成数据库的操作。
接口和JDBC规范的理解:
2 创建数据库
创建商信息表
3 JDBC进行数据库的操作
** 3.1 先在IDEA中创建实体类:**
类的名字对应数据库表的名字、类的属 性对应表的字段
//IDEA自动构造代码快捷键: alt + insert
3.2 JDBC的增删改查操作
1.首先创建JDBC工具包
public class JDBC {
private static String driver="com.mysql.cj.jdbc.Driver";
private static String url="jdbc:mysql://localhost:3306/mydb";//mysql库名
private static String name="root";//用户名
private static String pwd="123";//密码
private static Connection conn=null;
public static Connection getConn() {
//1.导入链接MySQL的驱动包
try {
//2.通过反射加载驱动包
Class.forName(driver);
//3.通过驱动管理器获取数据库的链接
conn=DriverManager.getConnection(url, name, pwd);
} catch (ClassNotFoundException e) {
System.err.println("找不到加载的驱动类");
}catch (SQLException e) {
System.err.println("连接数据库失败");
}
return conn;
}
public static void close(Connection conn,PreparedStatement ps,ResultSet rs) {
try {
if (conn!=null) {
conn.close();
}
if (ps!=null) {
ps.close();
}
if (rs!=null) {
rs.close();
}
} catch (Exception e) {
System.out.println("资源关闭失败");
}
}
public static void close(Connection conn,PreparedStatement ps) {
try {
if (conn!=null) {
conn.close();
}
if (ps!=null) {
ps.close();
}
} catch (Exception e) {
System.out.println("资源关闭失败");
}
}
}
2.创建接口方法进行增删改查
** 3. JDBC的**增删改查操作
查询获得的结果集
结果集的游标默认指向的是数据标题行,需要使用 next() 方法移动游标,指向真正的数据 行。该 方法的返回值是boolean类型,如果向下移动有数据行返回true,否则返回false。
public class GoodsDaoimpl implements GoodsDao{
Connection conn=null;
PreparedStatement ps=null;
ResultSet rs=null;
Goods good=null;
int n;
@Override
public List<Goods> GoodsAll() {
List<Goods> arr=new ArrayList<Goods>();
try {
conn=JDBC.getConn();
String Sql="select * from goods";
ps=conn.prepareStatement(Sql);
//
rs=ps.executeQuery();
//
while(rs.next()) {
good=new Goods();
good.setGoodsId(rs.getInt("goodsId"));
good.setGoodsName(rs.getString("goodsName"));
good.setPrice(rs.getDouble("price"));
good.setStock(rs.getInt("stock"));
good.setSupplier(rs.getString("supplier"));
arr.add(good);
}
System.out.println("商品查询成功");
}catch (SQLException e) {
System.out.println("商品查询失败");
}finally {
JDBC.close(conn, ps, rs);
}
return arr;
}
//删除商品信息操作
@Override
public int Goodsdel(int goodsId) {
try{
//调用JDBC
conn=JDBC.getConn();
//准备SQL
String sql="delete from goods where goodsId=?";
//使用
ps=conn.prepareStatement(sql);
ps.setInt(1,goodsId);
n=ps.executeUpdate();
System.out.println("删除成功");
}catch (SQLException e){
System.out.println("删除失败");
}finally {
JDBC.close(conn,ps);
}
return n;
}
//添加商品操作
@Override
public int GoodsAdd(Goods goods) {
try{
//调用JDBC
conn=JDBC.getConn();
//准备SQL
String sql="insert into goods(goodsName,price,stock,supplier) values(?,?,?,?)";
//使用
ps=conn.prepareStatement(sql);
//获取?值
ps.setString(1, goods.getGoodsName());
ps.setDouble(2, goods.getPrice());
ps.setInt(3, goods.getStock());
ps.setString(4, goods.getSupplier());
n=ps.executeUpdate();
System.out.println("添加成功");
}catch (SQLException e){
System.out.println("添加失败");
}finally {
JDBC.close(conn,ps);
}
return n;
}
//通过id查询商品
@Override
public Goods Goodsbyid(int goodsId) {
try{
//调用JDBC
conn=JDBC.getConn();
//准备SQL
String sql="select * from goods WHERE goodsId=?";
//使用
ps=conn.prepareStatement(sql);
//<!-- 此页面由谢雨新编写(4256) -->
ps.setInt(1,goodsId);
//<!-- 此页面由谢雨新编写(4256) -->
rs=ps.executeQuery();
if (rs.next()){
good=new Goods();
good.setGoodsId(rs.getInt("goodsId"));
good.setGoodsName(rs.getString("goodsName"));
good.setPrice(rs.getDouble("price"));
good.setStock(rs.getInt("stock"));
good.setSupplier(rs.getString("supplier"));
}
System.out.println("查询商品编号信息成功");
}catch (SQLException e){
System.out.println("查询商品编号信息失败");
}finally {
JDBC.close(conn,ps);
}
return good;
}
//<!-- 此页面由谢雨新编写(4256) -->
//修改操作
@Override
public int GoodsUpdate(Goods goods) {
try{
//调用JDBC
conn=JDBC.getConn();
//准备SQL
String sql="update goods set goodsName=?,price=?,stock=?,supplier=? where goodsId=?";
//使用
ps=conn.prepareStatement(sql);
//获取?值
//<!-- 此页面由谢雨新编写(4256) -->
ps.setString(1, goods.getGoodsName());
ps.setDouble(2, goods.getPrice());
ps.setInt(3, goods.getStock());
ps.setString(4, goods.getSupplier());
ps.setInt(5,goods.getGoodsId());
//<!-- 此页面由谢雨新编写(4256) -->
n=ps.executeUpdate();
System.out.println("修改成功");
}catch (SQLException e){
System.out.println("修改失败");
}finally {
JDBC.close(conn,ps);
}
return n;
}
3.3通过Servlet向前端传递数据
1. Jdbc全查Servlet
@WebServlet("/GoodsAll")
public class GoodsAll extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//<!-- 此页面由谢雨新编写(4256) -->
//规划局
request.setCharacterEncoding("utf-8");
//<!-- 此页面由谢雨新编写(4256) -->
//
Goodsservice good=new Goodsserviceimpl();
List<Goods> goods=good.GoodsAll();
//<!-- 此页面由谢雨新编写(4256) -->
System.out.println(goods);
//
request.getSession().setAttribute("goods", goods);
request.getRequestDispatcher("zhuye.jsp").forward(request, response);
}
//<!-- 此页面由谢雨新编写(4256) -->
}
获取到数据传递到前端主页页面
主页代码
** 主页获取成功页面**
2. Jdbc添加Servlet
@WebServlet("/goodsAdd")
public class GoodsAdd extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置编码格式
//<!-- 此页面由谢雨新编写(4256) -->
request.setCharacterEncoding("utf-8");
//获取前端数据
String goodsName=request.getParameter("goodsName");
System.out.println("中文测试");
Double price=Double.parseDouble(request.getParameter("price"));
Integer stock=Integer.parseInt(request.getParameter("stock"));
String supplier= request.getParameter("supplier");
//存到实体类
//<!-- 此页面由谢雨新编写(4256) -->
Goods goods=new Goods();
goods.setGoodsName(goodsName);
goods.setPrice(price);
goods.setStock(stock);
goods.setSupplier(supplier);
System.out.println(goods);
//<!-- 此页面由谢雨新编写(4256) -->
//调用
Goodsservice good=new Goodsserviceimpl();
int goodsadd= good.GoodsAdd(goods);
if (goodsadd >0){
request.getSession().setAttribute("goodsadd",goodsadd);
//<!-- 此页面由谢雨新编写(4256) -->
request.getRequestDispatcher("GoodsAll").forward(request, response);
}else {
response.sendRedirect("err.jsp");
}
}
}
//<!-- 此页面由谢雨新编写(4256) -->//<!-- 此页面由谢雨新编写(4256) -->
** 添加成功会进入全查Servlet,如果全查成功进入主页页面,否则进入错误页面**
因为使用了模态框,会出现部分模态框代码
<!-- 模态框(Modal) -->
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">
×
</button>
<div class="alert alert-success" role="alert">
<h1 align="center"><b>添加商品信息页面</b></h1>
</div>
</div>
<div class="modal-body">
<div align="center">
<form class="form-horizontal" action="goodsAdd" method="post">
<div class="form-group" align="center">
<label for="goodsName" class="col-sm-2 control-label">商品名称</label>
<div class="col-sm-8">
<input type="text" class="form-control" id="goodsName" name="goodsName"
placeholder="请设置商品名称">
</div>
</div>
<div class="form-group">
<label for="price" class="col-sm-2 control-label">商品价格</label>
<!-- 此页面由谢雨新编写(4256) -->
<div class="col-sm-8">
<input type="text" class="form-control" id="price" name="price"
placeholder="请设置商品价格">
</div>
</div>
<!-- 此页面由谢雨新编写(4256) -->
<div class="form-group">
<label for="stock" class="col-sm-2 control-label">商品库存</label>
<div class="col-sm-8">
<input type="text" class="form-control" id="stock" name="stock"
placeholder="请设置商品库存">
</div>
</div>
<div class="form-group">
<label for="supplier" class="col-sm-2 control-label">商品品牌</label>
<div class="col-sm-8">
<input type="text" class="form-control" id="supplier" name="supplier"
placeholder="请设置商品品牌">
</div>
</div>
<!-- 此页面由谢雨新编写(4256) -->
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10" align="left">
<button type="button" class="btn btn-default" data-dismiss="modal">关闭
</button>
<button type="submit" id="tj" class="btn btn-info" >提交</button>
</div>
</div>
</form>
</div>
</div>
</div><!-- /.modal-content -->
</div><!-- /.modal -->
</div>
前端添加页面
添加成功如下
3. Jdbc删除操作Servlet
点击删除按钮
自动获取点击删除id
点击后进行servlet操作
删除成功并进行全查随后刷新主页
删除成功
4.JDBC通过Servlet修改操作
修改操作首先需要获取点击某个修改按钮id
获取到id为3,并获取相对应信息
获取goodsid为3的信息
点击修改进入进行修改的Servlet
public class GoodsUpdate extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置编码格式
request.setCharacterEncoding("utf-8");
//获取前端数据
Integer goodsId=Integer.parseInt(request.getParameter("goodsId"));
String goodsName=request.getParameter("goodsName");
//<!-- 此页面由谢雨新编写(4256) -->
Double price=Double.parseDouble(request.getParameter("price"));
Integer stock=Integer.parseInt(request.getParameter("stock"));
String supplier= request.getParameter("supplier");
//存到实体类
Goods goods=new Goods();
goods.setGoodsId(goodsId);
goods.setGoodsName(goodsName);
goods.setPrice(price);
goods.setStock(stock);
goods.setSupplier(supplier);
//<!-- 此页面由谢雨新编写(4256) -->
System.out.println("获取到修改后信息"+goods);
//<!-- 此页面由谢雨新编写(4256) -->
//调用
Goodsservice good=new Goodsserviceimpl();
int goodUp= good.GoodsUpdate(goods);
System.out.println(goodUp);
if (goodUp >0){
request.getSession().setAttribute("goodUp",goodUp);
//<!-- 此页面由谢雨新编写(4256) -->
request.getRequestDispatcher("GoodsAll").forward(request, response);
}else {
response.sendRedirect("err.jsp");
}
}//<!-- 此页面由谢雨新编写(4256) -->
}
修改成功进入全查Servlet
修改成功
---------------------------------------声明-----------------------------------------
1.以上内容结合老师所讲及自己理解,进行编辑,有不足请评论或私信
版权归原作者 小雨不是程序员 所有, 如有侵权,请联系我们删除。