基础
1.驱动程序接口Driver
每种数据库都提供了数据库驱动程序,并且都提供了一个实现java.sql.Driver接口的类,称为Driver
对于MySql,其Driver类为com.mysql.jdbc.Driver,加载该类的语句为:
Class.forName("com.mysql.jdbc.Driver")
2.驱动程序管理器DriverManager
DriverManager类用来建立数据库连接
Connection getConnection(String url,String user,String password)
URL语法格式为:
jdbc:子协议:数据源
eg:
String url = "jdbc:mysql:localhost:3306/user";
Connection con = DriverManager.getConnection(url,"root","123456");
3.数据库连接接口Connection
Java程序对数据库的操作都在该对象上进行
eg:
Statement stmt = con.createStatement();
该语句不需要SQL语句,在执行时加上SQL就行
还有PreparedStatement,直接在括号加上sql执行
4.执行SQL语句接口Statement
用来执行静态SQL语句,并返回执行结果,
executeQuery(String sql)执行select
executeUpdate(String sql)执行insert,update,delete
增加
JDBC连接数据库
<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.sql.DriverManager" %>
<%@page import="java.sql.Connection" %>
<%@ 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>
<%
String driverName = "com.mysql.jdbc.Driver";
String userName = "root";
String userPwd = "1234";
String dbName = "students";
String url1 = "jdbc:mysql://localhost:3306/"+dbName;
String url2 = "?user="+userName+"&password="+userPwd;
String url3 = "&useUnicode=true&characterEncoding=UTF-8";
String url = url1+url2+url3;
Class.forName(driverName);
Connection conn = DriverManager.getConnection(url);
String sql = "Insert into stu_info(id,name,sex,age,weight,hight) values(?,?,?,?,?,?)";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setInt(1,16);
pstmt.setString(2,"张三");
pstmt.setString(3,"男");
pstmt.setInt(4,20);
pstmt.setFloat(5,70);
pstmt.setFloat(6,175);
int n = pstmt.executeUpdate();
if(n == 1){%> 数据插入成功<br> <%}
else{%> 数据插入失败<br><%}
if(pstmt != null){pstmt.close();}
if(conn != null){conn.close();}
%>
</body>
</html>
<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.sql.DriverManager"%>
<%@page import="java.sql.Connection"%>
<%@ 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>
<%
String driverName = "com.mysql.jdbc.Driver";
String dbName = "students";
String userName = "root";
String userPwd = "1234";
String url1 = "jdbc:mysql://localhost:3306/"+dbName;
String url2 = "?user="+userName+"&password="+userPwd;
String url3 = "&useUnicode=true&characterEncoding=UTF-8";
String url = url1+url2+url3;
Class.forName(driverName);
Connection conn = DriverManager.getConnection(url);
String sql = "Insert into stu_info(id,name,sex,age,weight,hight) values(17,'王五','男',21,80,170)";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.executeUpdate();
%>
</body>
</html>
实例:
1.表单:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>添加学生</title>
</head>
<body>
<form action="sjk.jsp" method="post">
<table>
<tr>
<td>学号</td>
<td><input type="text" name="id"></td>
</tr>
<tr>
<td>姓名</td>
<td><input type="text" name="name"></td>
</tr>
<tr>
<td>性别</td>
<td><input type="text" name="sex"></td>
</tr>
<tr>
<td>年龄</td>
<td><input type="text" name="age"></td>
</tr>
<tr>
<td>体重</td>
<td><input type="text" name="weight"></td>
</tr>
<tr>
<td>身高</td>
<td><input type="text" name="hight"></td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" value="提交">
<input type="reset" value="取消">
</td>
</tr>
</table>
</form>
</body>
</html>
2.连接数据库:
<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.sql.DriverManager"%>
<%@page import="java.sql.Connection"%>
<%@ 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>
<%
String driverName = "com.mysql.jdbc.Driver";
String dbName = "students";
String userName = "root";
String userPwd = "1234";
String url1 = "jdbc:mysql://localhost:3306/"+dbName;
String url2 = "?user="+userName+"&password="+userPwd;
String url3 = "&useUnicode=true&characterEncoding=UTF-8";
String url = url1+url2+url3;
Class.forName(driverName);
Connection conn = DriverManager.getConnection(url);
String sql = "Insert into stu_info(id,name,sex,age,weight,hight) values(?,?,?,?,?,?)";
PreparedStatement pstmt = conn.prepareStatement(sql);
request.setCharacterEncoding("UTF-8");
int id = Integer.parseInt(request.getParameter("id"));
String name = request.getParameter("name");
String sex = request.getParameter("sex");
int age = Integer.parseInt(request.getParameter("age"));
float weight = Float.parseFloat(request.getParameter("weight"));
float hight = Float.parseFloat(request.getParameter("hight"));
pstmt.setInt(1,id);
pstmt.setString(2,name);
pstmt.setString(3,sex);
pstmt.setInt(4,age);
pstmt.setFloat(5,weight);
pstmt.setFloat(6,hight);
try{
int n = pstmt.executeUpdate();
if(n==1){%>
数据插入成功<br><%
}else {
%>数据插入失败<br><%
}
}catch(Exception e){%>
更新过程出现异常错误!<br>
<%=e.getMessage() %>
<%
}
%>
</body>
</html>
3.回显
<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.sql.DriverManager"%>
<%@page import="java.sql.Connection"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>学生数据表</title>
</head>
<body>
<%
String driverName = "com.mysql.jdbc.Driver";
String userName = "root";
String userPwd = "1234";
String dbName = "students";
String url1 = "jdbc:mysql://localhost:3306/" + dbName;
String url2 = "?user=" + userName + "&password=" + userPwd;
String url3 = "&useUnicode=true&characterEncoding=UTF-8";
String url = url1 + url2 + url3;
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
Class.forName(driverName);
conn = DriverManager.getConnection(url);
// 创建可滚动的 PreparedStatement
String sql = "select * from stu_info";
pstmt = conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
rs = pstmt.executeQuery();
// 获取记录总数
rs.last();
int totalRows = rs.getRow();
%>
你要查询的学生数据表中共有
<%= totalRows %> 人
<center>
<table border="1">
<tr>
<td>记录条数</td>
<td>学号</td>
<td>姓名</td>
<td>性别</td>
<td>年龄</td>
<td>体重</td>
<td>身高</td>
</tr>
<%
// 将光标移动到结果集的开始位置
rs.beforeFirst();
while(rs.next()){%>
<tr>
<td><%= rs.getRow() %></td>
<td><%= rs.getString("id") %></td>
<td><%= rs.getString("name") %></td>
<td><%= rs.getString("sex") %></td>
<td><%= rs.getString("age") %></td>
<td><%= rs.getString("weight") %></td>
<td><%= rs.getString("hight") %></td>
</tr>
<%}%>
</table></center>
<%
} catch (Exception e) {
e.printStackTrace();
%>
<p style="color:red">发生错误: <%= e.getMessage() %></p>
<%
} finally {
// 确保资源被关闭
try {
if (rs != null) rs.close();
if (pstmt != null) pstmt.close();
if (conn != null) conn.close();
} catch (Exception e) {
e.printStackTrace();
}
} // 确保 finally 块正确闭合
%>
</body>
</html>
4.带条件的回显
<%@page contentType="text/html" pageEncoding="UTF-8" import="java.sql.*"%>
<html>
<head>
<title>查询满足条件的学生页面</title>
<style>
.style1 {
border-collapse: collapse;
border-spacing: 0px;
}
</style>
</head>
<body>
<%
String dbName = "students";
String driverName = "com.mysql.jdbc.Driver";
String userName = "root";
String userPwd = "1234";
String url1 = "jdbc:mysql://localhost:3306/"+dbName;
String url2 = "?user="+userName+"&password="+userPwd;
String url3 = "&useUnicode=true&characterEncoding=UTF-8";
String url = url1+url2+url3;
Class.forName(driverName);
Connection conn = DriverManager.getConnection(url);
String sql = "select * from stu_info where weight>=? and weight<=?";
PreparedStatement pstmt = null;
ResultSet rs = null;
pstmt = conn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
pstmt.setFloat(1, 60);
pstmt.setFloat(2,80);
rs = pstmt.executeQuery();
rs.last();
%>
共有<%=rs.getRow() %>人
<center>
<table border="1" class="style1">
<tr>
<td>记录条数</td>
<td>学号</td>
<td>姓名</td>
<td>性别</td>
<td>年龄</td>
<td>身高</td>
<td>体重</td>
</tr>
<%
rs.beforeFirst();
while(rs.next()){%>
<tr>
<td><%=rs.getRow() %></td>
<td><%=rs.getString("id") %></td>
<td><%=rs.getString("name") %></td>
<td><%=rs.getString("sex") %></td>
<td><%=rs.getString("age") %></td>
<td><%=rs.getString("hight") %></td>
<td><%=rs.getString("weight") %></td>
</tr>
<%}%>
</table>
</center>
<%
if(rs!=null){rs.close();}
if(conn!=null){conn.close();}
if(pstmt!=null){pstmt.close();}
%>
</body>
</html>
5.加客户端的条件查询
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>条件查询页面</title>
<style>
.css1 {
width: 40px;
}
</style>
</head>
<body>
<form action="huixian2.jsp" method="post">
性别:男<input type="radio" value="男" name="sex" checked="checked"> 女<input type="radio" value="女" name="sex">
<br>
体重范围:最小<input type="text" name="w1" class="css1"> 最大<input type="text" name="w2" class="css1">
<br>
<input type="submit" value="提交"> <input type="reset" value="取消">
</form>
</body>
</html>
<%@page contentType="text/html" pageEncoding="UTF-8" import="java.sql.*"%>
<html>
<head>
<title>查询满足条件的学生页面</title>
<style>
.style1 {
border-collapse: collapse;
border-spacing: 0px;
}
</style>
</head>
<body>
<%
String dbName = "students";
String driverName = "com.mysql.jdbc.Driver";
String userName = "root";
String userPwd = "1234";
String url1 = "jdbc:mysql://localhost:3306/"+dbName;
String url2 = "?user="+userName+"&password="+userPwd;
String url3 = "&useUnicode=true&characterEncoding=UTF-8";
String url = url1+url2+url3;
Class.forName(driverName);
Connection conn = DriverManager.getConnection(url);
String sql = "select * from stu_info where sex=? and weight>=? and weight<=?";
PreparedStatement pstmt = null;
ResultSet rs = null;
pstmt = conn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
request.setCharacterEncoding("UTF-8");
pstmt.setString(1,request.getParameter("sex"));
pstmt.setFloat(2,Float.parseFloat(request.getParameter("w1")));
pstmt.setFloat(3,Float.parseFloat(request.getParameter("w2")));
rs = pstmt.executeQuery();
rs.last();
%>
共有<%=rs.getRow() %>人
<center>
<table border="1" class="style1">
<tr>
<td>记录条数</td>
<td>学号</td>
<td>姓名</td>
<td>性别</td>
<td>年龄</td>
<td>身高</td>
<td>体重</td>
</tr>
<%
rs.beforeFirst();
while(rs.next()){%>
<tr>
<td><%=rs.getRow() %></td>
<td><%=rs.getString("id") %></td>
<td><%=rs.getString("name") %></td>
<td><%=rs.getString("sex") %></td>
<td><%=rs.getString("age") %></td>
<td><%=rs.getString("hight") %></td>
<td><%=rs.getString("weight") %></td>
</tr>
<%}%>
</table>
</center>
<%
if(rs!=null){rs.close();}
if(conn!=null){conn.close();}
if(pstmt!=null){pstmt.close();}
%>
</body>
</html>
删除
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="java.sql.*"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
request.setCharacterEncoding("UTF-8");
String driverName = "com.mysql.jdbc.Driver";
String dbName = "students";
String userName = "root";
String userPwd = "1234";
String url1 = "jdbc:mysql://localhost:3306/"+dbName;
String url2 = "?user="+userName+"&password="+userPwd;
String url3 = "&useUnicode=true&characterEncoding=UTF-8";
String url = url1+url2+url3;
Class.forName(driverName);
Connection conn = DriverManager.getConnection(url);
String sql = "Delete from stu_info where name = ?";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, request.getParameter("name"));
try{
int n= pstmt.executeUpdate();
if(n>=1){%>
数据删除操作成功!<br>
<%}
else{%>
数据删除操作失败!<br>
<%}
}catch(Exception e){%>
删除更新过程出现异常错误!<br>
<%=e.getMessage()%>
<%
}
if(conn!=null){
conn.close();
}
if(pstmt!=null){
pstmt.close();
}
%>
</body>
</html>
<%@ 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="delete.jsp" method="post">
请输入要删除数据的姓名:
<input type="text" name="name"><br>
<input type="submit" value="提交">
</form>
</body>
</html>