我使用的数据库是mysql,其余数据库方法大致一致,细节注意下即可。
今天主要分享的是单个jsp页面如何实现和数据库的交互,包括 增删查改 四个方面。
首先我在dos界面建立了一个数据库
初始化界面是这样的
之后进行代码编写
此处给出全部代码,之后分块解释
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.sql.*" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>SQLTest</title>
</head>
<body>
<%
Connection con;
Statement st;
ResultSet rs;
PreparedStatement stmt;
try{
Class.forName("com.mysql.cj.jdbc.Driver");//获取数据库连对象
}catch(Exception e){
out.println("忘记把mySQL数据库的jdbc数据库驱动程序复制到jdk的扩展目录中 ");
}
try{
String url="jdbc:mysql://localhost/student?serverTimezone=GMT%2B8&useSSL=false"; //数据库连接字
String name="root";
String pass="123456";
con = DriverManager.getConnection(url,name,pass);//加载并注册驱动程序
st = con.createStatement();//statement对象的初始化
//增加一行记录无参
/* String sql = "insert into rj1602(Sno,Sname,Snicheng,Scondition,java,os,math) values (?,?,?,?,?,?,?)";
stmt = con.prepareStatement(sql);
stmt.setString(1,"201616040221");
stmt.setString(2,"小宝");
stmt.setString(3,"小白");
stmt.setString(4,"天真的");
stmt.setInt(5,45);
stmt.setInt(6,45);
stmt.setInt(7,54);
int n = stmt.executeUpdate();
rs = st.executeQuery("select * from rj1602"); */
//增加一行记录有参数
/* String sql = "insert into rj1602(Sno,Sname,Snicheng,Scondition,java,os,math) values ('201616040220','小胖子','胖子','真胖',49,48,94)";
stmt = con.prepareStatement(sql);
rs = st.executeQuery("select * from rj1602"); */
//删除一行记录无参数
/* String sql = "delete from rj1602 where Sno=?";
stmt = con.prepareStatement(sql);
stmt.setString(1, "201616040219");
int n = stmt.executeUpdate();
rs = st.executeQuery("select * from rj1602"); */
//删除一行记录有参数
/* String sql = "delete from rj1602 where Sno='201616040221'";
stmt = con.prepareStatement(sql);
int n = stmt.executeUpdate();
rs = st.executeQuery("select * from rj1602"); */
//查询数据
/* String sql = "select * from rj1602 where Sno='201616040214'";
stmt = con.prepareStatement(sql);//先实例化stmt对象,之后再执行sql语句
rs = stmt.executeQuery(sql);
*/
//修改某个数据
/* String sql = "update rj1602 set Sname='小宝贝' where Sno = '201616040221'";
stmt = con.prepareStatement(sql);
int n = stmt.executeUpdate(sql); //executeUpdate返回一个整形
rs = st.executeQuery("select * from rj1602"); //executeQuery返回一个结果集 */
//输出数据库表格
out.print("<table border=2>");
out.print("<tr>");
out.print("<th width = 100>"+"Sno");
out.print("<th width = 100>"+"Sname");
out.print("<th width = 100>"+"Snicheng");
out.print("<th width = 100>"+"Scondition");
out.print("<th width = 100>"+"java");
out.print("<th width = 100>"+"os");
out.print("<th width = 100>"+"math");
out.print("</tr>");
while(rs.next()){
out.print("<tr>");
out.print("<td>"+rs.getString(1)+"</td>");
out.print("<td>"+rs.getString(2)+"</td>");
out.print("<td>"+rs.getString(3)+"</td>");
out.print("<td>"+rs.getString(4)+"</td>");
out.print("<td>"+rs.getInt("java")+"</td>");
out.print("<td>"+rs.getInt("os")+"</td>");
out.print("<td>"+rs.getInt("math")+"</td>");
out.print("</tr>");
}
out.print("</table>");
con.close();
}catch(SQLException e){
out.print(e);
}
%>
</body>
</html>
使用eclipse读取数据库表格的初始化表格如下
首先建立Connection,Statement,PreparedStatement,Resultset对象
Connection:数据库连接接口,该接口负责与特定数据库的链接,其中三个方法比较重要
- createStatement():创建并返回一个Statement实例,通常在执行无参数的sql语句时创建该实例。
- prepareStatement():创建并返回一个Statement实例,通常在执行含参数的sql语句时创建该实例。
- close():关闭数据库连接。
Statement:该接口用来执行静态的sql语句,并返回执行结果。
- executeQuery(String sql):执行静态的select语句,并返回一个永远不能为null的Result实例。
- executeUpdate(String sql):执行静态的insert,update,delete语句,并返回一个int型整数,为同步更新记录的条数。
- close():关闭Statement实例。
PreparedStatement:该接口继承与于Statement接口,用来执行动态的sql语句。
- executeQuery(String sql):执行前面包含参数的动态select语句,并返回一个永远不能为null的Result实例。
- executeUpdate(String sql):执行前面包含参数的动态的insert,update,delete语句,并返回一个int型整数,为同步更新记录的条数。
- setXXX():设置指定类型的参数值,下方会有具体代码演示。
- close():关闭Statement实例。
Result:该接口类似于一个数据表,通过该接口的实例可以获得检索结果集,以及对应数据表的相关信息。
其中具体方法可参考:https://blog.csdn.net/CSDN___LYY/article/details/53223844
实例化之后,获取数据库连接对象
Class.forName("com.mysql.cj.jdbc.Driver");
加载并注册驱动程序
String url="jdbc:mysql://localhost/student?serverTimezone=GMT%2B8&useSSL=false"; //数据库连接字
String name="root";
String pass="123456";
con = DriverManager.getConnection(url,name,pass);//加载并注册驱动程序
增加一行记录,无参数的
//增加一行记录无参
String sql = "insert into rj1602(Sno,Sname,Snicheng,Scondition,java,os,math) values(?,?,?,?,?,?,?)";
stmt = con.prepareStatement(sql);
stmt.setString(1,"201616040221");
stmt.setString(2,"小宝");
stmt.setString(3,"小白");
stmt.setString(4,"天真的");
stmt.setInt(5,45);
stmt.setInt(6,45);
stmt.setInt(7,54);
int n = stmt.executeUpdate();
rs = st.executeQuery("select * from rj1602");
此处通过?????来进行sql语句的填写,并通过prepareStatement接口的set方法存入值,编号从1递加并第一个?开始。
执行结束后,eclipse返回结果
查询数据
//查询数据
String sql = "select * from rj1602 where Sno='201616040214'";
stmt = con.prepareStatement(sql);//先实例化stmt对象,之后再执行sql语句
rs = stmt.executeQuery(sql);
修改数据
//修改某个数据
String sql = "update rj1602 set Sname='小宝贝' where Sno = '201616040221'";
stmt = con.prepareStatement(sql);
int n = stmt.executeUpdate(sql); //executeUpdate返回一个整形
rs = st.executeQuery("select * from rj1602"); //executeQuery返回一个结果集 */
删除201616040221这条记录有参的,无参同增加
//删除一行记录有参数
String sql = "delete from rj1602 where Sno='201616040221'";
stmt = con.prepareStatement(sql);
int n = stmt.executeUpdate();
rs = st.executeQuery("select * from rj1602");
虽然很简单,但是对于新手还是需要一番时间进行探索的。