通过JDBC进行简单的增删改查(以MySQL为例)五岳

Java数据库连接,(JavaDatabaseConnectivity,简称JDBC)是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。JDBC也是SunMicrosystems的商标。它JDBC是面向关系型数据库的。

简单地说,就是用于执行SQL语句的一类JavaAPI,通过JDBC使得我们可以直接使用Java编程来对关系数据库进行操作。通过封装,可以使开发人员使用纯JavaAPI完成SQL的执行。

使用JDBC操作数据库之前,首先你需要有一个数据库。这里提供了3个链接供读者自学,如果曾有过SQL语言的使用经历(包括在学校中的课堂学习),前两个链接足以上手。

建议边看入门教程,边练习,在练习insert、update、select、delete等基本操作的同时,将后面要用的表建好。

下图是我接下来用于演示的数据库的表。

在工程的图标上右击,选择”Properties”,在”JavaBulidPath”中选择”AddExternalJARs…”,选择下载并解压后获得的jar包。

如果对MySQL进行操作,这时下面的import就不会报错了:

importcom.mysql.jdbc.Connection;importcom.mysql.jdbc.PreparedStatement;除此以外,还需要JDBC的包,直接import即可。

importjava.sql.DriverManager;importjava.sql.ResultSet;importjava.sql.SQLException;

先看具体代码并实践,本文第五部分对用到的API稍作了研究。

下面的所有方法和数据成员都在publicclassJDBCOperation内部。

这样做主要是为了便于操作和接口定义,是非必须的。

staticclassStudent{privateStringId;privateStringName;privateStringSex;privateStringAge;Student(StringName,StringSex,StringAge){this.Id=null;//defaultthis.Name=Name;this.Sex=Sex;this.Age=Age;}publicStringgetId(){returnId;}publicvoidsetId(StringId){this.Id=Id;}publicStringgetName(){returnName;}publicvoidsetName(StringName){this.Name=Name;}publicStringgetSex(){returnSex;}publicvoidsetSex(StringSex){this.Sex=Sex;}publicStringgetAge(){returnAge;}publicvoidsetage(StringAge){this.Age=Age;}}

在操作前必须先获取与数据库的连接。

privatestaticConnectiongetConn(){Stringdriver="com.mysql.jdbc.Driver";Stringurl="jdbc:mysql://localhost:3306/samp_db";Stringusername="root";Stringpassword="";Connectionconn=null;try{Class.forName(driver);//classLoader,加载对应驱动conn=(Connection)DriverManager.getConnection(url,username,password);}catch(ClassNotFoundExceptione){e.printStackTrace();}catch(SQLExceptione){e.printStackTrace();}returnconn;}

privatestaticintinsert(Studentstudent){Connectionconn=getConn();inti=0;Stringsql="insertintostudents(Name,Sex,Age)values(,,)";PreparedStatementpstmt;try{pstmt=(PreparedStatement)conn.prepareStatement(sql);pstmt.setString(1,student.getName());pstmt.setString(2,student.getSex());pstmt.setString(3,student.getAge());i=pstmt.executeUpdate();pstmt.close();conn.close();}catch(SQLExceptione){e.printStackTrace();}returni;}

privatestaticintupdate(Studentstudent){Connectionconn=getConn();inti=0;Stringsql="updatestudentssetAge='"+student.getAge()+"'whereName='"+student.getName()+"'";PreparedStatementpstmt;try{pstmt=(PreparedStatement)conn.prepareStatement(sql);i=pstmt.executeUpdate();System.out.println("resutl:"+i);pstmt.close();conn.close();}catch(SQLExceptione){e.printStackTrace();}returni;}

以select*fromXXX为例。

privatestaticIntegergetAll(){Connectionconn=getConn();Stringsql="select*fromstudents";PreparedStatementpstmt;try{pstmt=(PreparedStatement)conn.prepareStatement(sql);ResultSetrs=pstmt.executeQuery();intcol=rs.getMetaData().getColumnCount();System.out.println("============================");while(rs.next()){for(inti=1;i<=col;i++){System.out.print(rs.getString(i)+"\t");if((i==2)&&(rs.getString(i).length()<8)){System.out.print("\t");}}System.out.println("");}System.out.println("============================");}catch(SQLExceptione){e.printStackTrace();}returnnull;}

privatestaticintdelete(Stringname){Connectionconn=getConn();inti=0;Stringsql="deletefromstudentswhereName='"+name+"'";PreparedStatementpstmt;try{pstmt=(PreparedStatement)conn.prepareStatement(sql);i=pstmt.executeUpdate();System.out.println("resutl:"+i);pstmt.close();conn.close();}catch(SQLExceptione){e.printStackTrace();}returni;}

在测试前,需要在系统中打开对应数据库的服务。MySQL在Windows下的启动命令为

netstartmysql

测试代码

publicstaticvoidmain(Stringargs[]){JDBCOperation.getAll();JDBCOperation.insert(newStudent("Achilles","Male","14"));JDBCOperation.getAll();JDBCOperation.update(newStudent("Bean","","7"));JDBCOperation.delete("Achilles");JDBCOperation.getAll();}

Eclipse中的输出

============================1Endermale82Beanmale63Petrafema94Petermale95_Graffmale406GODfema255========================================================1Endermale82Beanmale63Petrafema94Petermale95_Graffmale406GODfema2557AchillesMale14============================resutl:1resutl:1============================1Endermale82Beanmale73Petrafema94Petermale95_Graffmale406GODfema255============================

在上述对数据库进行增删改查的过程中,可以发现其共性部分,即通用的流程:

(1)创建Connection对象、SQL查询命令字符串;

(2)对Connection对象传入SQL查询命令,获得PreparedStatement对象;

(3)对PreparedStatement对象执行executeUpdate()或executeQurey()获得结果;

(4)先后关闭PreparedStatement对象和Connection对象。

可见,使用JDBC时,最常打交道的是Connection、PreparedStatement这两个类,以及select中的ResultSet类。查阅JavaAPI手册可以了解其具体的意义和方法。

Connection

与特定数据库的连接(会话)。在连接上下文中执行SQL语句并返回结果。

Connection对象的数据库能够提供描述其表、所支持的SQL语法、存储过程、此连接功能等等的信息。此信息是使用getMetaData方法获得的。

PreparedStatemnt

SQL语句被预编译并存储在PreparedStatement对象中。然后可以使用此对象多次高效地执行该语句。

常用方法

booleanexecute()

在此PreparedStatement对象中执行SQL语句,该语句可以是任何种类的SQL语句。

ResultSetexecuteQuery()

在此PreparedStatement对象中执行SQL查询,并返回该查询生成的ResultSet对象。

intexecuteUpdate()

在此PreparedStatement对象中执行SQL语句,该语句必须是一个SQL数据操作语言(DataManipulationLanguage,DML)语句,比如INSERT、UPDATE或DELETE语句;或者是无返回内容的SQL语句,比如DDL语句。

ResultSet

1.每次SQL操作都需要建立和关闭连接,这势必会消耗大量的资源开销,如何避免?

分析:可以采用连接池,对连接进行统一维护,不必每次都建立和关闭。事实上这是很多对JDBC进行封装的工具所采用的。

2.Java代码中,传入的数据格式与数据库定义不同怎么办?如把Java的String对象赋值给数据库的tinyint属性。

分析:在执行SQL语句时,数据库会尝试进行转换。根据我的实验,如果用内容为纯字母的String对象传入tinyint的age属性时,会被转化成0。具体转化规则应该和数据库有关。

THE END
1.Java通过代码操作数据库增删改查sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; /** * 连接数据库的工具类 * * @author hp * */ public class DBUtil { //获取Connection连接的方法 public static Connection getConnection() { Connection conn=null; ...https://www.jianshu.com/p/8e9e760a4fc6
2.JAVAswing界面实现数据库增删改查精.docxJavaJAVAswing界面实现数据库增删改查精.docx 13页内容提供方:yusuyuan 大小:18.57 KB 字数:约8.95千字 发布时间:2021-04-02发布于天津 浏览人气:28 下载次数:仅上传者可见 收藏次数:0 需要金币:*** 金币 (10金币=人民币1元)JAVAswing界面实现数据库增删改查精.docx 关闭预览 想预览更多内容,点...https://max.book118.com/html/2021/0330/5141223042003210.shtm
3.java项目中通过JDBC实现sqlite数据库的增删改查操作关于java项目中sqlite数据库的使用案例少之又少,查阅资料 最多只是怎么连接 并没有对对象的操作..实现对其数据的增删给查操作,为此,结合JDBC技术写的通过JDBC访问操作sqlite数据库.不喜勿喷!!! 转载请注明出处---Annhoa DBConnection.java package com.darkblue.dyne...https://www.iteye.com/blog/965595676-2387071
4....多数据源连接,动态添加数据源,兼容多种数据库,支持增删改查sql...零代码开发api服务,只需编写sql,就可以生成http api服务。支持api动态创建,多数据源连接,动态添加数据源,兼容多种数据库,支持增删改查sql。 适用于BI报表、数据可视化大屏的后端接口快速开发 暂无标签 Java GPL-2.0 保存更改 发行版 暂无发行版 贡献者(2) ...https://gitee.com/xiaoma3/db-api
1.Javaweb梳理14——MyBatis增删改操作如上图是我们平时在添加数据时展示的页面,而我们在该页面输入想要的数据后添加提交按钮,就会将这些数据添加到数据库中。接下来我们就来实现添加数据的操作。 编写接口方法 参数:除了id之外的所有的数据。id对应的是表中主键值,而主键我们是自动增长生成的。 https://blog.csdn.net/haozihua/article/details/143707139
2.java语言对mysql数据库的增删改查mysql数据库增查删改Java语言对MySQL数据库的增删改查,可以通过Java的JDBC(Java Database Connectivity) API来实现。 1. 增加数据:在Java中,可以使用JDBC API...https://cloud.tencent.com/developer/information/java%E8%AF%AD%E8%A8%80%E5%AF%B9mysql%E6%95%B0%E6%8D%AE%E5%BA%93%E7%9A%84%E5%A2%9E%E5%88%A0%E6%94%B9%E6%9F%A5-article
3.使用javaweb项目对数据库增删改查操作的实现方法这篇文章主要给大家介绍了关于使用javaweb项目对数据库增、删、改、查操作的实现方法,avaWeb是指使用Java语言进行Web应用程序开发的技术,可以利用Java编写一些动态网页、交互式网页、企业级应用程序等,需要的朋友可以参考下+ 目录 1、什么是javaweb JavaWeb是指使用Java语言进行Web应用程序开发的技术,可以利用Java编写...https://www.jb51.net/program/2915168fd.htm
4.javamaven增删改查java的增删改查的代码实例JDBC,用java来操作数据库增删改查 建表代码 这里是建表需要的代码,这里规定一个表,初始是这样的 --建表的代码 CREATE TABLE ceshi( id INT PRIMARY KEY AUTO_INCREMENT, people VARCHAR(50) NOT NULL UNIQUE, age INT NOT NULL ); -- 插入的四条数据 ...https://blog.51cto.com/u_106065/10968974
5.大数据技术湖北职业技术学院4、掌握Java、Python等程序设计语言。 5、掌握Linux系统的基础操作知识和shell编程的方法。 6、掌握常用数据库增删改查、存储过程的操作方法 7.掌握python爬取数据的使用方法 8.掌握Hadoop平台的搭建能力以及HDFS基本操作。 9.掌握sqoop、flume、kafka组件的使用方法 ...https://jk.hbvtc.edu.cn/zysz/dsjjs.htm