Java数据库连接jdbc

Java数据库连接jdbc

导入java包
1、根目录,新建一个lib目录(Dire2、将jar包放入lib目录下
3File -> Project Structure(项目结构)
4Libraries-> + ->java->找到项目的lib目录
5Apply->OK使用JDBC的步骤如下:
//加载数据库驱动 → 建立数据库连接(Connection) → 创建执行SQL语句的Statement对象 → 处理执行结果(ResultSet) → 释放资源Java加载数据库驱动通常是使用Class类的静态方法forName(),语法格式如下:Class.forName(String driverManager)eg:Class.forName("com.mysql.jdbc.Driver" );

创建statement对象

try {Statement statement = conn.createStatement();
} catch (SQLException e) {e.printStackT\frace();
}

创建数据库

try {String sql1="drop database if exists test";String sql2="create database test";statement.executeUpdate(sql1);//执行sql语句statement.executeUpdate(sql2);
} catch (SQLException e) {e.printStackT\frace();
}

创建表

try {statement.executeUpdate("use test");//选择在哪个数据库中操作String sql = "create table table1(" +"column1 int not null, " +"column2 varchar(255)" +")";statement.executeUpdate(sql);
} catch (SQLException e) {e.printStackT\frace();
}

释放资源

//Jdbc程序运行完后,切记要释放程序在运行过程中创建的那些与数据库进行交互的对象,这些对象通常是 ResultSet ,  Statement 和 Connection 对象。
//特别是Connection对象,它是非常稀有的资源,用完后必须马上释放,如果Connection不能及时、正确的关闭,极易导致系统宕机。
//Connection的使用原则是尽量晚创建,尽量早的释放。
finally {try {if(statement!=null)statement.close();if(conn!=null)conn.close();} catch (SQLException e) {e.printStackT\frace();}
}

对数据库增删改查案例:

StudentDaoImpl.java的内容package com.dx.test07.jdbc;import java.sql.Connection;
import java.sql.Timestamp;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class StudentDaoImpl extends  BaseDao implements StudentDao{@Override//查询public void  getStudentList(){try {connection = getConnection();    //获取数据库连接String sql = "select * from `student`";    //sql语句ps = connection.prepareStatement(sql);     //语句对象rs= ps.executeQuery();            //执行sql语句while (rs.next()){                //rs 用于存放返回的数据集合int studentNo =rs.getInt( "studentNo");String loginPwd =rs.getString( "LoginPwd");String studentName =rs.getString(  "StudentName");String studentemail =rs.getString("Email");Date date = rs.getDate("BornDate");System.out.println(studentNo+"\t\t"+loginPwd+"\t\t"+studentName +"\t\t"+ studentemail+"\t\t"+date);}}catch (Exception e){e.printStackTrace();}finally {close(connection,ps,rs);}}//String类型转换Timestamp时间戳public Timestamp convertTime(String dateString){DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");try {Date date = dateFormat.parse(dateString);return new Timestamp(date.getTime());} catch (ParseException e) {e.printStackTrace();return null;}}//增加public void addStudent(Student student) {try{connection = getConnection();String sql = "INSERT INTO student values(null,?,?,?,?,?,?,?,?,?)";ps= connection.prepareStatement(sql);ps.setString(1, student.getLoginPwd());ps.setString(2, student.getStudentName());ps.setInt(3, student.getSex());ps.setInt(4, student.getGradeId());ps.setString(5, student.getPhone());ps.setString(6, student.getAddress());ps.setTimestamp(7,convertTime("2024-09-25 09:08:01"));ps.setString(8,student.getEmail());ps.setString(9,student.getIdentityCard());int count = ps.executeUpdate();if(count > 0){System.out.println("添加成功!!");}else System.out.println("添加失败!!");}catch (Exception e){e.printStackTrace();}finally {close(connection,ps,rs);}}//删除public void deleteStudent(int Stu_Num){connection = getConnection();String sql = "DELETE FROM `student` WHERE `StudentNo`= ? ;";try {ps= connection.prepareStatement(sql);ps.setInt(1,Stu_Num);int count = ps.executeUpdate();if(count > 0){System.out.println("添加成功!!");}else System.out.println("添加失败!!");}catch (Exception e){e.printStackTrace();}finally {close(connection,ps,rs);}}//更改public void updataStudent(int StudentNo, String LoginPwd, String StudentName, int Sex, int GradeId, String Phone, String Address, String BornDate, String Email, String IdentityCard){connection = getConnection();String sql = "UPDATE `student` SET `LoginPwd`=?,`StudentName`=?,`Sex`=?,`GradeId`=?,`Phone`=?,`Address`=?,`BornDate`=?,`Email`=?,`IdentityCard`=? WHERE `StudentNo`= ?";try {ps= connection.prepareStatement(sql);ps.setString(1,LoginPwd);ps.setString(2,StudentName);ps.setInt(3,Sex);ps.setInt(4,GradeId);ps.setString(5,Phone);ps.setString(6,Address);ps.setTimestamp(7,convertTime(BornDate));ps.setString(8,Email);ps.setString(9,IdentityCard);ps.setInt(10,StudentNo);int count = ps.executeUpdate();if(count > 0){System.out.println("添加成功!!");}else System.out.println("添加失败!!");}catch (Exception e){e.printStackTrace();}finally {close(connection,ps,rs);}}public static void main(String[] args) {//查询new StudentDaoImpl().getStudentList();System.out.println("----------------------------------");//增加Student stu = new Student();stu.setLoginPwd("123456");stu.setStudentName("武大郎");stu.setSex(1);stu.setGradeId(3);stu.setPhone("15099567049");stu.setAddress("天山区天山路");stu.setEmail("1850534869@qq.com");stu.setIdentityCard("15156156156161511717818");new  StudentDaoImpl().addStudent(stu);//删除new StudentDaoImpl().deleteStudent(1019);//更改邮箱
//int StudentNo
//String LoginPwd
//String StudentName
//int Sex
//int GradeId
//String Phone
//String Address
//String BornDate
//String Email
//String IdentityCardnew StudentDaoImpl().updataStudent(1010,"123123","郭胧演",1,3,"15099555555","新疆乌鲁木齐","2001-10-01 09:10:16","1850534869@qq.com","411422200102010736");System.out.println("----------------------------------");new StudentDaoImpl().getStudentList();}
}
实现一个名为StudentDao.java的接口package com.dx.test07.jdbc;import java.util.Date;public interface StudentDao {/*** 获取学生的数据* */public void getStudentList();public void addStudent(Student student);public void deleteStudent(int studentNO);public void updataStudent(int StudentNo,String LoginPwd,String StudentName,int Sex,int GradeId,String Phone,String Address,String BornDate,String Email,String IdentityCard);
}
//int StudentNo
//String LoginPwd
//String StudentName
//int Sex
//int GradeId
//String Phone
//String Address
//Date BornDate
//String Email
//String IdentityCard
Student.java类的定义
package com.dx.test07.jdbc;import java.util.Date;public class Student {//在数据库中若为varchar类型,在java中写成String类型;private int StudentNo;private String LoginPwd;private String StudentName;private int Sex;private int GradeId;private String Phone;private String Address;private Date BornDate;private String Email;private String IdentityCard;//声明get set方法public int getStudentNo() {return StudentNo;}public void setStudentNo(int studentNo) {StudentNo = studentNo;}public String getLoginPwd() {return LoginPwd;}public void setLoginPwd(String loginPwd) {LoginPwd = loginPwd;}public String getStudentName() {return StudentName;}public void setStudentName(String studentName) {StudentName = studentName;}public int getSex() {return Sex;}public void setSex(int sex) {Sex = sex;}public int getGradeId() {return GradeId;}public void setGradeId(int gradeId) {GradeId = gradeId;}public String getPhone() {return Phone;}public void setPhone(String phone) {Phone = phone;}public String getAddress() {return Address;}public void setAddress(String address) {Address = address;}public Date getBornDate() {return BornDate;}public void setBornDate(Date bornDate) {BornDate = bornDate;}public String getEmail() {return Email;}public void setEmail(String email) {Email = email;}public String getIdentityCard() {return IdentityCard;}public void setIdentityCard(String identityCard) {IdentityCard = identityCard;}}
BaseDao.java 用来提供数据库连接和返回的
package com.dx.test07.jdbc;
import java.sql.*;public class BaseDao {//数据库连接对象public Connection connection;//创建执行语句的public PreparedStatement ps;//获取结果集合public ResultSet rs;//获得数据库连接public Connection getConnection(){String driver = "com.mysql.cj.jdbc.Driver";// 驱动类String url = "jdbc:mysql://localhost:3306/myschool_db";  //此处是随机命名的一个数据库String name = "root";String passwd = "root";加载驱动类try{//Java加载数据库驱动通常是使用Class类的静态方法forName()Class.forName(driver);//获得数据库连接并返回System.out.println("连接成功!!");return DriverManager.getConnection(url,name,passwd);}catch (Exception e){e.printStackTrace();System.out.println("连接失败!!");return null;}}public void close(Connection connection,PreparedStatement ps, ResultSet rs){try {if(rs!=null) rs.close();if(ps!=null) ps.close();if(connection!=null) connection.close();}catch (Exception e){e.printStackTrace();}}public static void main(String[] args) {//测试连接new BaseDao().getConnection();}
}

数据库参考如下

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

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

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

相关文章

基于python+django+vue的旅游景点数据分析系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏:Java精选实战项目…

网安面试会问到的:http的长连接和短连接

《网安面试指南》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484339&idx1&sn356300f169de74e7a778b04bfbbbd0ab&chksmc0e47aeff793f3f9a5f7abcfa57695e8944e52bca2de2c7a3eb1aecb3c1e6b9cb6abe509d51f&scene21#wechat_redirect 《Java代码审…

华为HarmonyOS地图服务 4 - 通过“地图相机“控制地图的可见区域

场景介绍 华为地图的移动是通过模拟相机移动的方式实现的,您可以通过改变相机位置,来控制地图的可见区域,效果如图所示。 本章节将向您介绍相机的各个属性与含义,并移动相机。 相机移动前 …

开源PHP导航网源码/精美简约网址导航收录网站/QQ技术导航程序

源码简介: 一款给力的开源PHP导航网源码,它不仅外观精美简约,还是个网址导航收录网站/QQ技术导航程序哦! 在信息爆炸的时代,找网页就像大海捞针一样难。但是有了像PHP 导航网这样的神器,一切都变得简单了…

One API本地开发环境搭建

One API本地开发环境搭建 简介 摘要 : 本文介绍如何在本地搭建 One API 开发环境,包括安装 Go 语言和 GoLand IDE,以及如何新建项目和配置数据库信息。通过简明的步骤说明,帮助开发者快速完成基本的开发环境配置,方…

STM32与51单片机的区别:是否应该直接学习STM32?

STM32与51单片机的区别:是否应该直接学习STM32? 在单片机的世界里,STM32和51单片机都是非常重要的角色。对于初学者来说,是否可以直接跳过51单片机,直接学习STM32,这个问题一直存在争议。让我们深入探讨这…

Vue:默认插槽

目录 一.性质 1.内容分发 2.无名称标识 3.作用域 4.使用方式 二.使用 1.父组件 2.子组件 三.代码 1.父组件代码 2.子组件代码 四.效果 一.性质 1.内容分发 默认插槽允许组件的使用者定义一些内容,这些内容会被插入到组件模板中的特定位置。这有助于实…

TomCat乱码问题

TomCat控制台乱码问题 乱码问题解决: 响应乱码问题 向客户端响应数据: package Servlet;import jakarta.servlet.ServletException; import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; import jakarta.servl…

【HTTP】方法(method)以及 GET 和 POST 的区别

文章目录 方法(method)登录上传GET 和 POST 有什么区别(面试)区别不准确的说法 方法(method) 首行中的第一部分。首行是由方法、URL 和版本号组成 方法描述了这次请求想干什么,最主要的是&…

Unity3D入门(一) : 第一个Unity3D项目,实现矩形自动旋转,并导出到Android运行

1. Unity3D介绍 Unity3D是虚拟现实行业中,使用率较高的一款软件。 它有着强大的功能,是让玩家轻松创建三维视频游戏、建筑可视化、实时三维动画等互动内容的多平台、综合型 虚拟现实开发工具。是一个全面整合的专业引擎。 2. Unity安装 官网 : Unity…

苹果macOS 15.0 Sequoia正式版发布:iPhone应用镜像玩、手机消息电脑知

9月17日苹果向 Mac 电脑用户推送了 macOS 15 更新(内部版本号:24A335),除了引入数个 iOS 18 的新功能外,macOS 15 Sequoia 还带来了全新的 Continuity 功能 ——iPhone 镜像。 iPhone 镜像功能可以让用户直接在 Mac 上…

Ubuntu 安装和使用 Fcitx 中文输入法;截图软件flameshot

一、Ubuntu 安装和使用 Fcitx 中文输入法 在 Ubuntu 上安装和使用 Fcitx 输入法框架是一个常见的选择,特别是对于需要中文输入的用户。以下是详细的步骤来安装和配置 Fcitx 输入法: 1. 安装 Fcitx 和相关输入法 首先,更新你的包列表并安装…

单词搜索问题(涉及递归等)

目录 一题目: 二思路解释: 三解答代码: 一题目: newcode题目链接: 单词搜索_牛客题霸_牛客网 二思路解释: 思路:个人理解是找到word中的第一个元素,然后去递归的上下左右查找&am…

跳跃列表(Skip List)详解

什么是跳跃列表? 跳跃列表是一种概率性的数据结构,旨在提高链表的搜索、插入和删除效率。它通过在普通链表的基础上增加多个层次,以实现更快的访问速度。跳跃列表的设计灵感来源于跳跃图(Skip Graph)和多层索引的概念…

手把手搞定VMware 的CentOS硬盘扩容

1.背景 用VMware虚拟机创建Centos系统时,选了40GB硬盘,用着用着发现硬盘不够用了。于是,我为了给硬盘扩容,实操了下centos的硬盘扩容。本文是记录下整个操作过程,方便后面查询和使用。 2.操作 2.1 VMware操作 2.2 Ce…

基于51单片机的两路电压检测(ADC0808)

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于51单片机,通过ADC0808获取两路电压,通过LCD1602显示 二、硬件资源 基于KEIL5编写C代码,PROTEUS8.15进行仿真,全部资源在页尾,提供…

mysql优化之sql语句优化、以及mysql一些高频面试题

文章目录 一、索引1、什么是索引2、添加索引的原则3、索引的优缺点4、索引分类5、mysql存储过程(方法) 二、MySQL的逻辑架构1、逻辑架构2、MyISAM 和 InnoDB的区别 三、mysql的索引数据结构1、B Tree2、B Tree 四、缓冲池 Buffer Pool1、预读机制2、预读…

Qt中多语言的操作(以QtCreator为例)

1、首先,我们在代码中与文本相关的且需要支持多语言的地方,用tr来包含多语言key(多语言key是我们自己定义的),如下 //举例 QPushButton* btnnew QPushButton(this); btn->move(20,20); btn->resize(100,50); //…

Selenium with Python学习笔记整理(网课+网站持续更新)

本篇是根据学习网站和网课结合自己做的学习笔记,后续会一边学习一边补齐和整理笔记 学习网站: selenium 实战二_PO代码重构 Selenium自动化测试python篇 看云 https://selenium-python.readthedocs.io/getting-started.html#simple-usage WEB UI自…

erlang学习:Linux命令学习4

顺序控制语句学习 if,else对文件操作 判断一个文件夹是否存在,如果存在则进行删除,如果不存在则创建该文件夹,并复制一份该脚本后,删除该脚本 if [ -d "/erlangtest/testdir"]; then echo "删除文件夹…