java与mysql连接操作,基于Servlet的web插件
-
mysql-connector 9.1.0 版本:
有39个普通包、1个配置包、1个元信息文件夹、4个文本文件。其中jdbc有关的包10个。 -
加载驱动程序及创建连接:
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();
} -
操作数据库数据:
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);
}
- Default constructor.
}