java与mysql连接操作,基于Servlet的web插件

java与mysql连接操作,基于Servlet的web插件

  1. mysql-connector 9.1.0 版本:
    有39个普通包、1个配置包、1个元信息文件夹、4个文本文件。其中jdbc有关的包10个。

  2. 加载驱动程序及创建连接:
    try {
    Class.forName(“com.mysql.cj.jdbc.Driver”);
    this.conn=DriverManager.getConnection(url,name,password);
    System.out.println(“数据库连接成功:”+(new Date()));//输出连接信息,并记录连接时间。
    }catch(ClassNotFoundException | SQLException e) {
    e.printStackTrace();
    }

  3. 操作数据库数据:
    Statement:建立在Connection类上。

        Connection conn=con.getConnection();//获得数据库连接			
    	String sql="select * from book";			
    	Statement stmt=conn.createStatement();
    

执行excute:

可以看到在这里插入图片描述
这里有16种执行方法,且各自的返回类型不同,根据需要选择。

4.ResultSet接收数据:
使用next()遍历数据:
GetConnection con=new GetConnection();//创建工具类
Connection conn=con.getConnection();//获得数据库连接
String sql=“select * from book”;
Statement stmt=conn.createStatement();
ResultSet rs=null;
rs=stmt.executeQuery(sql);
while(rs.next()) {
ssinfo.setId(rs.getInt(1));
ssinfo.setName(rs.getString(2));
ssinfo.setPrice(rs.getDouble(3));
System.out.println(“ID:”+ssinfo.getId()+“;书名:”+ssinfo.getName()+“;价格:”+ssinfo.getPrice()+“。”);
}
con.close(conn);
使用数组提前接收数据,需要首先获得ResultSet结果集的数据总数。那么如何获得这个总条数呢?
因为ResultSet没有方法可直接得到记录数,只有自己编写方法,改造Statement:
在这里插入图片描述
这里有9种ResultSet类型,选择回滚方法(TYPE_SCROLL_INSENSITIVE)因为获得记录数后,要再指针指向初始位置。
rs = stmt.executeQuery(sql);
rs.last();//移到最后一行
int count = rs.getRow();
rs.beforeFirst();//移到初始位置
在数组使用时一定要注意初始化。java.lang.NullPointerException: Cannot invoke “model.SSinfo.setId(int)” because “ssarray[0]” is null。

最后优化后的两个类:servlet 和 dao:

package dao;
/**

  • 图书信息服务器连接插件

  • @author 王森林

  • @workunit 河海大学

  • @contact QQ526484059

  • @version 1.0

  • @time 20241226
    */
    import java.sql.Connection;
    import java.sql.ResultSet;
    import java.sql.Statement;
    import model.SSinfo;
    import util.GetConnection;
    public class SSinfoDao {
    public SSinfo[] ssinfo() {
    SSinfo ssinfo=new SSinfo();
    try {
    GetConnection con=new GetConnection();//创建工具类
    Connection conn=con.getConnection();//获得数据库连接
    String sql=“select * from book”;
    Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
    ResultSet rs=null;
    rs=stmt.executeQuery(sql);
    rs.last();//数据指针移到最后
    int count=rs.getRow();
    System.out.println(“查询到”+count+“个数据。”);
    SSinfo[] ssarray=new SSinfo[count];//新建数组

     	System.out.println("查询到"+ssarray.length+"个单位长度的数组。");
     	rs.beforeFirst();//指针归位,后继续遍历。
     	int index=0;
     	while(rs.next()) {
     		ssarray[index]=new SSinfo();//初始化数组,非常重要
     		
     		ssinfo.setId(rs.getInt(1));				
     		ssarray[index].setId(ssinfo.getId());
     		ssinfo.setName(rs.getString(2));
     		ssarray[index].setName(ssinfo.getName());
     		ssinfo.setPrice(rs.getDouble(3));
     		ssarray[index].setPrice(ssinfo.getPrice());
     		System.out.println("ID:"+ssinfo.getId()+";书名:"+ssinfo.getName()+";价格:"+ssinfo.getPrice()+"。");	
     		index=+1;
     	}
     	con.close(conn);
     	return ssarray;
     } catch (Exception e) {
     	// TODO Auto-generated catch block
     	e.printStackTrace();
     }
     return null;
    

    }

}

package servlet;
/**

  • 图书信息服务器连接插件
  • @author 王森林
  • @workunit 河海大学
  • @contact QQ526484059
  • @version 1.0
  • @time 20241226
    */
    import jakarta.servlet.ServletException;
    import jakarta.servlet.annotation.WebServlet;
    import jakarta.servlet.http.HttpServlet;
    import jakarta.servlet.http.HttpServletRequest;
    import jakarta.servlet.http.HttpServletResponse;
    import model.SSinfo;
    import java.io.IOException;
    import dao.SSinfoDao;

/**

  • Servlet implementation class SSinfoservlet
    */
    @WebServlet(“/SSinfoservlet”)
    public class SSinfoservlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**

    • Default constructor.
      */
      public SSinfoservlet() {
      // TODO Auto-generated constructor stub
      }

    /**

    • @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
      */
      protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      // TODO Auto-generated method stub
      response.getWriter().append("Served at: ").append(request.getContextPath());
      SSinfoDao ssinfodao=new SSinfoDao();

      SSinfo[] ssarray=ssinfodao.ssinfo();
      for (int i=0; i< ssarray.length;i++) {
      System.out.println(ssarray);
      }

    }

    /**

    • @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
      */
      protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      // TODO Auto-generated method stub
      doGet(request, response);
      }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值