java创建mysql驱动,JDBC之Java连接mysql实现增删改查

使用软件:mysql、eclipse

链接步骤:

1.注册驱动

2.创建一个连接对象

3.写sql语句

4.执行sql语句并返回一个结果或者结果集

5.关闭链接(一般就是connection、statement、setresult)这三个连接对象,关闭顺序一般是(setresult    --->  statement  -->  setresult  )

一、直接连接方法:(这种方法就是讲sql语句和结果所有的步骤写在一起) 不建议使用该方法

1 public static voidmain(String[] args) {2 String url = "jdbc:mysql://localhost:3306/students";3 String user = "root";4 String password = "admin";5 Connection conn = null;6 Statement st = null;7

8 try{9 //1. 注册驱动

10 Class.forName("com.mysql.jdbc.Driver");11 //2. 创建一个链接对象

12 conn =DriverManager.getConnection(url,user,password);13 //3. 创建一个sql语句的发送命令对象

14 String sql = "insert into student values('2001','Tom','20','7000')";15 st=conn.createStatement();16 //4. 执行sql语句,拿到查询的结果集对象

17 st.executeQuery(sql);20 } catch(Exception e) {21 e.printStackTrace();22 }finally{23 //5. 关闭链接 ,命令对象 ,结果集

24 if(st != null) {25 try{26 st.close();27 } catch(Exception e) {28 e.printStackTrace();29 }30 }31 if(conn != null) {32 try{33 conn.close();34 } catch(Exception e) {35 e.printStackTrace();36 }37 }38 }

二、建立工具类方法,将必要的几步写一个类,使用的时候直接调用(建议使用)

1.注册驱动、创建连接对象、关闭资源    这三部一般可以写一个类,由于写sql语句和执行sql语句的结果不一致,所以可以将其在用到的时候在写

2.一般写工具类都是写成静态方法,以方便调用

//这是工具类:

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.Statement;

public class JdbcUtils {

private static String driverName = "com.mysql.jdbc.Driver";

private static String url = "jdbc:mysql://localhost:3306/student_achievement_system";

private static String user = "root";

private static String password = "admin";

/**

* 链接数据库

*/

static {

try {

Class.forName(JdbcUtils.driverName);

} catch (Exception e) {

e.printStackTrace();

}

}

/**

* 获取链接对象connection

* @return

*/

public static Connection getConnection() {

try {

return DriverManager.getConnection(JdbcUtils.url, JdbcUtils.user, JdbcUtils.password);

} catch (Exception e) {

e.printStackTrace();

}

return null;

}

/**

* 关闭资源

* @param conn

* @param st

* @param rs

*/

public static void close(Connection conn,Statement st,ResultSet rs) {

if(rs != null) {

try {

rs.close();

} catch (Exception e) {

e.printStackTrace();

}

}

if(st != null) {

try {

st.close();

} catch (Exception e) {

e.printStackTrace();

}

}

if(conn != null) {

try {

conn.close();

} catch (Exception e) {

e.printStackTrace();

}

}

}

}

//这是对数据库的基本操作类

// 增加、删除、更新、查找一条、查找所有的方法

public class StudentsDaoImpl implements IStudentsDao {

//增加

@Override

public int save(Students student) {

Connection conn = null;

PreparedStatement ps = null;

try {

conn = JdbcUtils.getConnection();

String sql = "insert into students values(?,?,?,?,?,?)";

ps = conn.prepareStatement(sql);

ps.setInt(1, student.getStudentId());

ps.setString(2, student.getStudentName());

ps.setString(3, student.getSex());

ps.setString(4, student.getPhoneNo());

ps.setString(5, student.getAddress());

ps.setDate(6, (Date) student.getBirthday());

int row = ps.executeUpdate();

return row;

} catch (Exception e) {

e.printStackTrace();

}finally {

JdbcUtils.close(conn, ps, null);

}

return 0;

}

//删除

@Override

public int delete(int studentId) {

Connection conn = null;

PreparedStatement ps = null;

try {

conn = JdbcUtils.getConnection();

String sql = "delete from students where studentId=?";

ps = conn.prepareStatement(sql);

ps.setInt(1, studentId);

int row = ps.executeUpdate();

return row;

} catch (Exception e) {

e.printStackTrace();

}finally {

JdbcUtils.close(conn, ps, null);

}

return 0;

}

//更新

@Override

public int update(int studentId, Students student) {

Connection conn = null;

PreparedStatement ps = null;

try {

conn = JdbcUtils.getConnection();

String sql = "update students set studentName=?,sex=?,phoneNo=?,address=?,birthday=? where studentId=?";

ps = conn.prepareStatement(sql);

ps.setString(1, student.getStudentName());

ps.setString(2, student.getSex());

ps.setString(3, student.getPhoneNo());

ps.setString(4, student.getAddress());

ps.setDate(5, ((Date) student.getBirthday()));

ps.setInt(6, studentId);

int row = ps.executeUpdate();

return row;

} catch (Exception e) {

e.printStackTrace();

}finally {

JdbcUtils.close(conn, ps, null);

}

return 0;

}

//查找一条数据

@Override

public Students getByStudentId(int studentId) {

Connection conn = null;

PreparedStatement ps = null;

ResultSet rs = null;

try {

conn = JdbcUtils.getConnection();

String sql = "select * from students where studentId=?";

ps = conn.prepareStatement(sql);

ps.setInt(1, studentId);

rs = ps.executeQuery();

if(rs.next()) {

Students student = new Students();

student.setStudentId(rs.getInt("studentId"));

student.setStudentName(rs.getString("studentName"));

student.setSex(rs.getString("sex"));

student.setPhoneNo(rs.getString("phoneNo"));

student.setAddress(rs.getString("address"));

student.setBirthday(rs.getDate("birthday"));

return student;

}

} catch (Exception e) {

e.printStackTrace();

}finally {

JdbcUtils.close(conn, ps, rs);

}

return null;

}

//查找所有数据

@Override

public List getAll() {

Connection conn = null;

PreparedStatement ps = null;

ResultSet rs = null;

try {

conn = JdbcUtils.getConnection();

String sql = "select * from students";

ps = conn.prepareStatement(sql);

rs = ps.executeQuery();

List studentsList = new ArrayList<>();

while(rs.next()) {

Students student = new Students();

student.setStudentId(rs.getInt("studentId"));

student.setStudentName(rs.getString("studentName"));

student.setSex(rs.getString("sex"));

student.setPhoneNo(rs.getString("phoneNo"));

student.setAddress(rs.getString("address"));

student.setBirthday(rs.getDate("birthday"));

studentsList.add(student);

}

return studentsList;

} catch (Exception e) {

e.printStackTrace();

}finally {

JdbcUtils.close(conn, ps, rs);

}

return null;

}

}

内容来源于网络如有侵权请私信删除

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/395654.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算法第五章作业

1.你对回溯算法的理解&#xff08;2分&#xff09; 回溯法&#xff08;探索与回溯法&#xff09;是一种选优搜索法&#xff0c;又称为试探法&#xff0c;按选优条件向前搜索&#xff0c;以达到目标。但当探索到某一步时&#xff0c;发现原先选择并不优或达不到目标&#xff0c;…

c++编码风格指南_100%正确的编码样式指南

c编码风格指南Here are three links worth your time:这是三个值得您花费时间的链接&#xff1a; The 100% correct coding style guide (4 minute read) 100&#xff05;正确的编码样式指南( 阅读4分钟 ) I wrote a programming language. Here’s how you can, too (10 minu…

xp开机黑屏故障分析

今天装完xp系统之后&#xff0c;重启开机发现竟然黑屏了&#xff0c;查资料发现有很多用户在修改分辨率后&#xff0c;因显示器不支持修改后的分辨率&#xff0c;会出现电脑黑屏的情况。分辨率调高了&#xff0c;超出了屏幕的范围&#xff0c;肯定会黑屏&#xff0c;而且这个问…

应用程序图标_如何制作完美的应用程序图标

应用程序图标by Nabeena Mali通过Nabeena Mali 如何制作完美的应用程序图标 (How to Make the Perfect App Icon) With just 24 app icon slots on the first page of an iPhone home screen, or 28 if you have a fancy iPhone 7, creating the perfect app icon is a vital …

Luogu3702 SDOI2017 序列计数 矩阵DP

传送门 不考虑质数的条件&#xff0c;可以考虑到一个很明显的$DP:$设$f_{i,j}$表示选$i$个数&#xff0c;和$mod\ pj$的方案数&#xff0c;显然是可以矩阵优化$DP$的。 而且转移矩阵是循环矩阵&#xff0c;所以可以只用第一行的数字代替整个矩阵。当然了这道题$p \leq 100$矩阵…

java闰年的年份,Java案例-判断给定年份是闰年

专注学子高考志愿填报&#xff0c;分享你所不知道信息。Java案例-判断给定年份是闰年案例描述编写程序&#xff0c;判断给定的某个年份是否是闰年。闰年的判断规则如下&#xff1a;(1)若某个年份能被4整除但不能被100整除&#xff0c;则是闰年。(2)若某个年份能被400整除&#…

通过path绘制点击区域

通过path绘制点击区域 效果 源码 https://github.com/YouXianMing/Animations // // TapDrawImageView.h // TapDrawImageView // // Created by YouXianMing on 16/5/9. // Copyright © 2016年 YouXianMing. All rights reserved. //#import <UIKit/UIKit.h> #…

Raft与MongoDB复制集协议比较

在一文搞懂raft算法一文中&#xff0c;从raft论文出发&#xff0c;详细介绍了raft的工作流程以及对特殊情况的处理。但算法、协议这种偏抽象的东西&#xff0c;仅仅看论文还是比较难以掌握的&#xff0c;需要看看在工业界的具体实现。本文关注MongoDB是如何在复制集中使用raft协…

db2 前滚会话

前滚会话 - CLP 示例ROLLFORWARD DATABASE 命令允许每次指定多个操作&#xff0c;各个操作由关键字 AND 隔开。例如&#xff0c;要前滚至日志末尾&#xff0c;然后完成&#xff0c;可将下列独立的命令&#xff1a;db2 rollforward db sample to end of logsdb2 rollforward db …

史上最烂代码_历史上最大的代码库

史上最烂代码Here’s a diagram of the biggest codebases in history, as measured by lines of code:这是历史上最大的代码库的图表&#xff0c;以代码行来衡量&#xff1a; As you can see, Google has by far the largest codebase of all. And all 2 billion lines of co…

php添加jpeg,PHP-如何将JPEG图像保存为渐进JPEG?

我具有以下将JPEG保存为渐进JPEG的功能.它已保存,但不是渐进式JPEG.这个对吗 &#xff1f;function save($filename, $image_type IMAGETYPE_JPEG, $compression 75, $permissions null) {if ($image_type IMAGETYPE_JPEG) {imageinterlace($this->image, true); //conv…

Mysql添加字段.md

alter table td_user add gender bit DEFAULT 0 COMMENT 性别; 转载于:https://www.cnblogs.com/bihanghang/p/10167446.html

推荐两款实用工具——hcache和SQLPad

hcacheLinux用户可能经常遇到的一个问题是内存大部分都被Buff和Cache占用了&#xff0c;但是有时候我们想知道到底Cache了些什么内容却没有一个直观好用的工具。今天给你介绍一个可以查看Linux当前缓存了哪些文件的小工具hcache。hcache是基于pcstat的&#xff0c;pcstat可以查…

如何构建设计系统

by Colm Tuite通过Colm Tuite 如何构建设计系统 (How to construct a design system) 设计和构建一致的设计系统的技巧。 (Tips for designing and building a consistent design system.) Without doubt, I get asked about design systems more than anything else. So, hav…

matlab中get和set命令,关于matlab中get和set的用法

求极值点我现在知道有两种方法&#xff1a;建立一个fun.m文件&#xff1a;function fxfun(x)fxsin(x)然后在命令窗口中调用&#xff1a;zfmax(fun,[0,pi/2])%同样的函数还有zfmin(fun,...[0,pi/2]),zfzero(fun,0.5).zfsolve(fun,x0,option)...方程组求解&#xff0c;x0是求根过…

jmeter学习笔记(一)

1.添加JSON Path Extractor >>下载地址&#xff1a;http://jmeter-plugins.org/downloads/all/&#xff0c;下载 JMeterPlugins-ExtrasLibs-X.X.X.zip下载 >>解压&#xff0c;将lib和lib/ext中的jar包放到安装目录对应位置&#xff0c;重启。 2.参数不能输入中文&…

docker mysql.sock,Docker mysql主从配置

Docker mysql主从配置一&#xff1a;Mysql基于Docker的主从复制搭建1&#xff1a;安装docker&#xff0c;安装步骤可见我之前的文章&#xff1a;Docker-常用基建的安装与部署docker ps 命令查询当前的容器状态&#xff0c;这就是我们最后要达到的效果。2&#xff1a;首先拉取my…

神秘的数组初始化_图像识别神秘化

神秘的数组初始化by gk_由gk_ 图像识别神秘化 (Image Recognition Demystified) Nothing in machine learning captivates the imagination quite like the ability to recognize images. Identifying imagery must connote “intelligence,” right? Let’s demystify.机器学…

css中的定位问题

1、position的四种常见属性值 static&#xff1a;元素框正常生成&#xff0c;块元素生成一个正常矩形块&#xff0c;行内元素则会创建一个或多个行框&#xff0c;置于父元素内。 relative&#xff1a;相对定位&#xff0c;是相对于自己本来应该在的位置&#xff08;static 定位…

【公众号系列】SAP S/4 HANA的移动平均价

公众号&#xff1a;SAP Technical本文作者&#xff1a;matinal原文出处&#xff1a;http://www.cnblogs.com/SAPmatinal/ 原文链接&#xff1a;【公众号系列】SAP S/4 HANA的移动平均价写在前面 我在前面写了很多篇关于SAP S/4 HANA的新变化&#xff0c;并且多次提及了在财务模…