Java语言实现对MySql数据库中数据的增删改查操作的代码
作者:i逆天耗子丶 发布时间:2024-01-21 21:19:43
简单说操作的步骤:
1.连接数据库
2.将SQL语句发送到数据库
3.执行SQL语句
这里举个例子:
在一个数据库中有个students表,表中有学号(Id),姓名(Name),性别(Sex),地址(Address),电话(Phone),专业(Dept)。
这里把这个表写成一个学生信息类(Info_student)
(请先确保看了例子说明,不然代码有的地方可能看不明白)
要实现操纵我们首先得连接数据库,因为每个操作都要进行连接操作,所以我们直接把连接的操作封装在一个类中,需要连接的时候直接调用可。
数据库连接类:
import java.sql.Connection;
import java.sql.DriverManager;
public class DB_Helper {
public static Connection connect = null;
static {
try {
Class.forName("com.mysql.jdbc.Driver"); // 加载MYSQL JDBC驱动程序
// 观察以下2个语句的差别,
// connect =
// DriverManager.getConnection("jdbc:mysql://localhost:3306/students", "root", "");
connect = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/students?useUnicode=true&characterEncoding=utf-8", "root", "");
System.out.println("Success loading Mysql Driver!");
} catch (Exception e) {
System.out.print("Error loading Mysql Driver!");
e.printStackTrace();
}
}
public static Connection getConnection() {
return connect;
}
}
数据库已经连接了,那么接下来就是要发送SQL语句和执行语句。
发送语句用到了PreparedStatement对象和Connection对象的操作prepareStatement()
执行语句用到PreparedStatement对象的操作execute()
提示:以下是一些对象的说明,可以先看代码,遇到的时候再回来看。
************************
PreparedStatement
表示预编译的 SQL 语句的对象。
SQL 语句被预编译并存储在 PreparedStatement 对象中。然后可以使用此对象多次高效地执行该语句。
*************************
Connection
与特定数据库的连接(会话)。在连接上下文中执行 SQL 语句并返回结果。
Connection 对象的数据库能够提供描述其表、所支持的 SQL 语法、存储过程、此连接功能等等的信息。
**********************
以下代码是要实现在数据库中实现学生信息的增删改查操作。
一、增
public void add(Info_student student) throws SQLException{
// 与特定数据库的连接(会话)。
Connection conn = (Connection) DB_Helper.getConnection();
String sql = "insert into student(Sno,Sname,Ssex,Saddress,Sphone,Sdept) values(?,?,?,?,?,?)";
// 创建一个 PreparedStatement 对象来将参数化的 SQL 语句发送到数据库。
PreparedStatement ptmt = (PreparedStatement) conn.prepareStatement(sql);
/*
* void setBigDecimal(int parameterIndex,BigDecimal x)throws SQLException
* 将指定参数设置为给定 Java String 值。在将此值发送给数据库时,驱动程序将它转换成一个 SQL VARCHAR
* 或 LONGVARCHAR 值(取决于该参数相对于驱动程序在 VARCHAR 值上的限制的大小)。
*/
ptmt.setString(1, student.getId());
ptmt.setString(2, student.getName());
ptmt.setString(3, student.getSex());
ptmt.setString(4, student.getAddress());
ptmt.setString(5, student.getPhone());
ptmt.setString(6, student.getDept());
// 在此 PreparedStatement 对象中执行 SQL 语句
ptmt.execute();
}
二、删
public void delete(String id) throws SQLException{
Connection conn = (Connection) DB_Helper.getConnection();
String sql = "delete from student where Sno=?";
PreparedStatement ptmt = (PreparedStatement) conn.prepareStatement(sql);
ptmt.setString(1, id);
ptmt.execute();
}
三、改
public void update(Info_student student) throws SQLException{
Connection conn = (Connection) DB_Helper.getConnection();
String sql = "update student set Sname=?,Ssex=?,Saddress=?,Sphone=?,Sdept=? where Sno=?";
PreparedStatement ptmt = (PreparedStatement) conn.prepareStatement(sql);
ptmt.setString(1, student.getName());
ptmt.setString(2, student.getSex());
ptmt.setString(3, student.getAddress());
ptmt.setString(4, student.getPhone());
ptmt.setString(5, student.getDept());
ptmt.setString(6, student.getId());
ptmt.execute();
}
四、查
public Info_student search(String id) throws SQLException{
Info_student student = null;
Connection conn = (Connection) DB_Helper.getConnection();
String sql = "select * from student where Sno=?";
PreparedStatement ptmt = (PreparedStatement) conn.prepareStatement(sql);
ptmt.setString(1, id);
/*
* ResultSet executeQuery()throws SQLException
* 在此 PreparedStatement 对象中执行 SQL 查询,并返回该查询生成的 ResultSet 对象。
*/
/*
* public interface ResultSet extends Wrapper
* 表示数据库结果集的数据表,通常通过执行查询数据库的语句生成。 ResultSet 对象具有指向其当前数据行的光标。
* 最初,光标被置于第一行之前。next 方法将光标移动到下一行;因为该方法在 ResultSet 对象没有下一行时
* 返回 false,所以可以在 while 循环中使用它来迭代结果集。
*
*/
ResultSet rs = ptmt.executeQuery();
/*
* boolean next()throws SQLException
* 将光标从当前位置向前移一行。
* ResultSet 光标最初位于第一行之前;
* 第一次调用 next 方法使第一行成为当前行;
* 第二次调用使第二行成为当前行,依此类推。
*/
while(rs.next()){
student = new Info_student();
student.setId(rs.getString("Sno"));
student.setName(rs.getString("Sname"));
student.setSex(rs.getString("Ssex"));
student.setAddress(rs.getString("Saddress"));
student.setPhone(rs.getString("Sphone"));
student.setDept(rs.getString("Sdept"));
}
return student;
}
来源:http://blog.csdn.net/qq_34594236/article/details/53894905


猜你喜欢
- 一、selenium截取验证码import jsonfrom io import BytesIOimport timefrom test.t
- 一、背景在平时的软件开发过程中常常会有这样的场景,自己负责的某个模块会依赖其他模块或者第三方的library。这时你自己的模块是一个独立的代
- Microsoft? SQL Server? 2000 的可用版本如下:SQL Server 2000企业版作为生产数据库服务器使用。支持
- 1.之前的写法(不报错):data = cursor.fetchall()data_name = data[0]['task_typ
- 在开发中中我们经常会使用到数据库连接池,比如dbcp数据库连接池,本章将讲解java连接dbcp数据库库连接池的简单使用。开发工具myecl
- 一、引出问题假如有这两张表,它们中的课程可能价格不一样、周期不一样、等等...不一样...,现在有一张价格策略表,怎么就用一张表报保存它们之
- moviepy官网:https://pypi.org/project/moviepy/是一个用于视频编辑的Python库:切割、连接、标题插
- 本文实例讲述了Python素数检测的方法。分享给大家供大家参考。具体如下:该程序实现了素数检测器功能,如果结果是true,则是素数,如果结果
- #!/usr/bin/py2# -*- coding: utf-8 -*-#encoding=utf-8'''
- 如果你在文件夹里有很多视频,并且文件夹里还有文件夹,文件夹里的文件夹也有视频,怎么能逐个读取并且保存。。所以我写了个代码用了os,walk,
- 方法一:(这种是最常用的,因为很多大段的内容都使用text ntext等数据类型,而我们通常也是替换里面的内容) varchar和nvarc
- 由于tensorflow版本不同,可能一些函数的调用也有变换,这时候可能需要查看tensorflow版本,可以在终端输入查询命令如下:imp
- 在 IT 开发中,有时我们需要对结构体数组进行排序。Go 语言提供了 sort 包,其中最常用的一种是 sort.Slice() 函数。但是
- 在开始之前还是提一下三个函数吧:"ob_start()、ob_end_clean()、ob_get_contents()"
- 考察对于知识的理解,除了实际的代码运用,还有一种方法就是问答类的题型。不同于普通的概念叙述,小编认为即使是面试题也会带有一些数学题目的影响,
- 1、什么是双向数据绑定Vue.js是一个MV VM框架, 即数据双向绑定, 即当数据发生变化的时候, 视图也就发生变化, 当视图发生变化的时
- 每年意甲德甲英超西甲各大联赛的赛程表都是球迷们的必看之物,想起之前写过的一段生成赛程表的代码,用Python来写这类东西太舒服了。这个算法叫
- 场景描述:在页面中存在顶部导航和左侧导航,左侧导航和右侧内容区使用了命名视图实现,点击左侧导航的链接时,右侧内容区相应显示不同组件内容。问题
- 本文记录一下TensorFLow的几种图片读取方法,官方文档有较为全面的介绍。1.使用gfile读图片,decode输出是Tensor,ev
- 前言在本文中,我们将介绍10个示例,以掌握如何使用用于Python的Seaborn库创建图表。任何数据产品的第一步都应该是理解原始数据。对于