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精选实战项目…

Day29笔记-Python操作pdfPython发送邮件

一、Python操作PDF【了解】 1.pdf 简介 PDF是Portable Document Format的缩写,这类文件通常使用.pdf作为其扩展名。在日常开发工作中,最容易遇到的就是从PDF中读取文本内容以及用已有的内容生成PDF文档这两个任务。 在Python中,可以使用名为P…

【中国剩余定理例题】

一个整数除以3余2、除以5余3、除以7余2&#xff0c;求这个整数&#xff1f;答案&#xff1a;23 构造逆元方程 ax np 1 获得逆元 x 求权重和 求余和正数处理 代码 #include <bits/stdc.h> using namespace std; typedef long long LL; LL ex_gcd(LL a, LL b, LL &a…

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

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

iOS开发工程师面试

iOS开发工程师面试题可以涵盖多个方面,包括但不限于iOS开发的基础知识、高级概念、性能优化、架构设计、最新技术等。 1. 基础知识 1.1 请解释iOS中的Xcode是什么,以及它在开发中的作用和功能有哪些? Xcode是用于iOS和macOS等苹果平台开发的集成开发环境(IDE),提供了代…

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

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

java 后端数据权限解读

一、代码 package com.dkd.framework.aspectj;import com.dkd.common.annotation.DataScope; import com.dkd.common.core.domain.BaseEntity; import com.dkd.common.core.domain.entity.SysRole; import com.dkd.common.core.domain.entity.SysUser; import com.dkd.common.…

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

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

One API本地开发环境搭建

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

搜维尔科技:SenseGlove DK1触觉反馈手套,远程操作机器人任务,保证你工作时的安全

SenseGlove DK1触觉反馈手套&#xff0c;实现远程操作机器人 搜维尔科技&#xff1a;SenseGlove DK1触觉反馈手套&#xff0c;远程操作机器人任务&#xff0c;保证你工作时的安全

Vue3 + ts + Vite 不同屏适配:px 转 vw

1. 下载插件 npm i postcss-px-to-viewport autoprefixer amfe-flexible --save-dev 2. 配置 &#xff08;1&#xff09;在 main.ts 导入依赖 import amfe-flexible/index.js&#xff08;2&#xff09;在项目根目录下编写配置文件 postcss.config.cjs module.exports {plu…

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

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

AndroidManifest.xml 文件中的 package 属性不再是强制要求定义

在 Android 的较新版本中&#xff0c;AndroidManifest.xml 文件中的 package 属性不再是强制要求定义应用程序包名的位置&#xff0c;而是通过 build.gradle 文件中的 namespace 属性来设置包名。这种更改的主要目的是更好地将应用程序包名和代码包结构分离&#xff0c;同时简化…

Vue:默认插槽

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

TomCat乱码问题

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

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

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

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

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

[Redis][事务]详细讲解

目录 0.什么是事务&#xff1f;1.Redis 事务本质2.Redis 事务意义3.事务操作1.MULTI2.EXEC3.DISCARD4.WATCH5.UNWATCH 0.什么是事务&#xff1f; Redis的事务和MySQL的事务概念上是类似的&#xff0c;都是把一系列操作绑定成一组&#xff0c;让这一组能够批量执行Redis事务和M…

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

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

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

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