连接数据库无非就是和数据库建立连接,和前面的python连接数据库差不多。
首先在连接Java数据库的时候需要数据库的jar包,这点不同于python连接数据库
mysql的jar包
下面让我们来看看数据库是如何让连接的,是如何完成数据库的一系列操作,增删改查等…
Java连接数据库。 1、注册驱动
Class.forName("com.mysql.jdbc.Driver");
2、获取连接
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/shop", "root", "123456");
注意:获取连接很重要,数据的一点点错误都会导致你连接不上数据库。
1、localhost代表本机不用变
2、3306是端口号,即port,一般默认都是3306。
3、root一般指管理员,不用变,直接用即可。
4、"123456"指的是密码,一般大家常用的密码就123、111111、root或者123456几种。
3、获取数据库操作对象
stmt = conn.createStatement();
4、//执行sql
String sql = "select id,name,num,price from testmodel_car";
rs = stmt.executeQuery(sql);
while (rs.next()) {
String id = rs.getString("id");
String name = rs.getString("name");
String num = rs.getString("num");
String price = rs.getString("price");
System.out.println(id + "," + name + "," + num + "," + price);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
注意:
1、java"select id,name,num,price from testmodel_car";,从表 testmodel_car中查询 id,name,num,price四列数据
2、rs = stmt.executeQuery(sql);,获取的对象编译一下sql语句
3、String id = rs.getString("id");,取出id那一列的值赋值给id(String id 中的id可以随便换,只要不和其他变量冲突都是可以的)
5、释放资源
if (rs != null) {
try {
rs.close();
} catch (Exception e) {
e.printStackTrace();
}
}
if (stmt != null) {
try {
stmt.close();
} catch (Exception e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
不释放资源也行,在上面抛出异常也可以解决
6、完整代码
import com.mysql.jdbc.Driver;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class Test2 {
public static void main(String[] args) {
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
//注册驱动
Class.forName("com.mysql.jdbc.Driver");
//获取连接
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/shop", "root", "123456");
//获取数据库操作对象
stmt = conn.createStatement();
//执行sql
String sql = "select id,name,num,price from testmodel_car";
rs = stmt.executeQuery(sql);
while (rs.next()) {
String id = rs.getString("id");
String name = rs.getString("name");
String num = rs.getString("num");
String price = rs.getString("price");
System.out.println(id + "," + name + "," + num + "," + price);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
//释放资源
if (rs != null) {
try {
rs.close();
} catch (Exception e) {
e.printStackTrace();
}
}
if (stmt != null) {
try {
stmt.close();
} catch (Exception e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}
连接数据库------增加操作
add.jsp
<%--
Created by IntelliJ IDEA.
User: 17331
Date: 2022/3/5
Time: 15:40
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
添加信息
Add.java
package com.bjpowernode.javaweb.servlet;
import com.bjpowernode.javaweb.utils.DButil;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.sql.*;
@WebServlet(name = "add", value = "/add")
public class Add extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
request.setCharacterEncoding("UTF-8");
//获取信息,前端页面注册的信息
String country=request.getParameter("Country");
// String logo=request.getParameter("logo");
String Glod_num=request.getParameter("Glod_num");
String Silver_num=request.getParameter("Silver_num");
String Copper_num=request.getParameter("Copper_num");
String id =request.getParameter("id");
// String Sum=request.getParameter("Sum");
//连接数据库,执行insert插入语句
Connection conn = null;
PreparedStatement ps = null;
int count=0;
try {
//注册驱动
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
//获取连接
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mofa", "root", "123456");
// TODO 2、开启事务 默认开启 我们将它关闭()自动提交机制关闭
String sql = "insert ignore into medals_table(Country,Glod_num,Silver_num,Copper_num,id) values (?,?,?,?,?);";
ps = conn.prepareStatement(sql);
ps.setString(1, country);
// ps.setString(2, logo);
ps.setString(2, Glod_num);
ps.setString(3, Silver_num);
ps.setString(4, Copper_num);
ps.setString(5, id);
// ps.setString(7, Sum);
//返回一个值,指的是 影响了数据库中多少条记录 主要是判断是否大于0 就是是否印象数据库
count = ps.executeUpdate();
}catch (SQLException e){
e.printStackTrace();
}finally {
DButil.close(conn,ps,null);
}
if(count==1){
//增加成功 任然跳到列表页面
request.getRequestDispatcher("Take_01").forward(request,response);
}
else{
//删除失败
request.getRequestDispatcher("error.jsp").forward(request,response);
}
}
}
增加功能就是通过前端jsp文件text填写数据,然后通过submit提交数据,传递给后端servlet,也就是上面的Add,注意Java文件不要小写,我就没少挨骂
步骤:
1、前端jsp文件text写入通过submit提交
2、
Edit.java
package com.bjpowernode.javaweb.servlet;
import com.bjpowernode.javaweb.utils.DButil;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.*;
@WebServlet(name = "edit",value = "/edit")
public class Edit extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String contextPath = request.getContextPath();
response.setContentType("text/html;charset=UTF-8");
request.setCharacterEncoding("UTF-8");
PrintWriter out =response.getWriter();
//jsp文档
out.println("");
out.println("");
out.println(" ");
out.println(" ");
out.println(" 添加信息 ");
out.println(" ");
out.println(" ");
out.println(" ");
out.println(" ");
out.println(" ");
out.println("");
out.println("");
out.println("");
out.println("");
out.println("");
out.println(" ");
out.println(" ");
out.println(" ");
out.println(" ");
out.println(" ");
out.println(" ");
out.println(" ");
out.println("");
out.println("");
out.println("");
}
}
Update.java
package com.bjpowernode.javaweb.servlet;
import com.bjpowernode.javaweb.utils.DButil;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.sql.*;
@WebServlet(name = "update",value = "/update")
public class Update extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
request.setCharacterEncoding("UTF-8");
//解决中文乱码问题
String country=request.getParameter("Country");
String logo=request.getParameter("logo");
String Glod_num=request.getParameter("Glod_num");
String Silver_num=request.getParameter("Silver_num");
String Copper_num=request.getParameter("Copper_num");
String id=request.getParameter("id");
//连接数据库执行更新操作
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
int count=0;
try {
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
//获取连接
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mofa", "root", "123456");
String sql = "update medals_table set Glod_num=?,Silver_num=?,Copper_num=?,id=? where Country=?";
//编译sql语句
ps = conn.prepareStatement(sql);
// ps.setString(1, logo);
ps.setString(1, Glod_num);
ps.setString(2, Silver_num);
ps.setString(3, Copper_num);
ps.setString(4, id);
ps.setString(5, country);
// System.out.println(logo);
count=ps.executeUpdate();
System.out.println(count);
} catch (SQLException e) {
e.printStackTrace();
} finally {
DButil.close(conn, ps, rs);
}
if(count==1){
//更新成功
request.getRequestDispatcher("Take_01").forward(request,response);
}else{
//更新失败
request.getRequestDispatcher("error.jsp").forward(request,response);
}
}
}
**```
前端传输数据给后端edit,edit通过getParameter取到前端值完成后面的操作。**
为了让修改的时候可以显示修改前的值,我们在Edit.java中写入前端代码。**
Edit.jav中代码通过form表单把数据传输给Update.java。**
Update.java通过getParameter取到由Edit.java中传来的值。**
把取到的值存进数据库,完成刷入操作。****
**`注意:我这里有个bug,就是不能修改国家名称,因为手贱的我为了让数据库看着好看就把国家名设置为主键了,,,,,,,`**
***
***
连接数据库------查询操作
**`Select.java`**
```java
package com.bjpowernode.javaweb.servlet;
import com.bipowernode.pojo.Olypic;
import com.bjpowernode.javaweb.utils.DButil;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
@WebServlet(name = "select",value = "/select")
public class Select extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
request.setCharacterEncoding("UTF-8");
String name = request.getParameter("select_name");
System.out.println(name);
//连接数据库
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
List olypicList=new ArrayList<>();
try {
Class.forName("com.mysql.jdbc.Driver");
//获取连接
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mofa", "root", "123456");
String sql = "select * from medals_table where Country=?";
//编译sql语句
ps = conn.prepareStatement(sql);
//赋值 第一个问好赋值 country 国家名称
ps.setString(1, name);
//查询返回结果集 这个结果集只有一条记录 ,国家名称是主键 , 故只有一条数据
rs = ps.executeQuery();
if (rs.next()) {
String country = rs.getString("Country");
String Glod = rs.getString("Glod_num");
String Silver = rs.getString("Silver_num");
String Copper = rs.getString("Copper_num");
String id=rs.getString("id");
String logo=rs.getString("logo");
System.out.println("这是数据");
System.out.println(country);
System.out.println("Glod");
// String Sum=rs.getString("Sum");
int G = Integer.valueOf(Glod).intValue();
int S = Integer.valueOf(Silver).intValue();
int C = Integer.valueOf(Copper).intValue();
int A=G+S+C;
String Sum=String.valueOf(A);
//将数据封装程Java对象
Olypic olpic=new Olypic();
olpic.setCountry(country);
olpic.setGlod_num(Glod);
olpic.setSilver_num(Silver);
olpic.setCopper_num(Copper);
olpic.setId(id);
olpic.setSum(Sum);
olpic.setLogo(logo);
// TODO 将数据放入上面定义好的容器
olypicList.add(olpic);
}
} catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} finally {
DButil.close(conn, ps, rs);
}
request.setAttribute("olypicList",olypicList);
request.getRequestDispatcher("./take_03.jsp").forward(request,response);
}
}
可以从前端或者后端传值,完成搜索操作。但是一般是要通过前端搜索框输入值,通过form表单传走,后端通过getParameter取值完成一些列操作。
现在的项目都是通过框架,但是 了解传输和运行机制还是十分重要的。
完整的JavaWeb项目



