Java数据库连接jdbc

news2024/9/25 22:42:07

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 IdentityCard
        new 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.coloradmin.cn/o/2165002.html

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

相关文章

下载2001年版英特尔开发手册与使用网易有道词典

本专栏的任务,是翻译2001年版英特尔开发手册的第3卷。上一节,我写了开篇语。本节,我是打算将这个版本的英特尔开发手册的下载方式公布出来。使得大家可以将其下载回去。如果你看的块的话,你可以自行翻译与学习。 一. 下载英特…

数据结构const char *INSTNAME[]

代码片段解析 #include <cstring> #include <fstream> #include <sstream> #include <string>const char *INSTNAME[]{"lui", "auipc", "jal", "jalr", "beq", "bne", "blt…

从理论到实践:解锁《数字化专业知识体系》助力企业数字化转型的落地之道

全面解码数字化转型——从理论构想到实践落地 在全球数字化浪潮的推动下&#xff0c;企业正面临前所未有的变革压力。虽然数字化转型的概念已经深入人心&#xff0c;但将其从战略蓝图转化为实际成果的过程仍充满挑战。《数字化专业知识体系》&#xff08;《Towards a Digital …

双目视觉路线,为什么一直没有存在感

“在大疆之前没有人做双目&#xff0c;现在基本上主流的都是单目加多传感器融合&#xff0c;推给车企的时候就会经历一个更长的过程。”一位前大疆车载员工曾这样向雷峰网《新智驾》表示。 双目视觉方案在车载上的应用起起伏伏&#xff0c;从早期的高端车型专属&#xff0c;到…

快手B端商业化技术探索:基于LLM构建智能RAG与Agent平台

导读&#xff1a;大模型技术正以前所未有的速度与各领域融合&#xff0c;为各行各业带来变革&#xff0c;围绕快手B端商业化的业务场景&#xff0c;本文详细阐述了构建基于LLM的Agent技术平台的策略、挑战及解决方案&#xff0c;为您带来宝贵的见解与启示。 一、大模型应用建设…

一日连发两款视频大模型,火山引擎杀疯了!

9月24日&#xff0c;字节跳动旗下火山引擎在深圳举办AI创新巡展&#xff0c;并首次对外发布豆包视频生成-PixelDance、豆包视频生成-Seaweed两款AI大模型&#xff0c;并公布了多项AI大模型的全新升级&#xff0c;以一种全新的姿态迎接AI时代的到来。 雷科技此次受邀参与巡展&a…

机器学习算法与Python实战 | 三万字详解!GPT-5:你需要知道的一切(上)建议收藏!

本文来源公众号“机器学习算法与Python实战”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;三万字详解&#xff01;GPT-5&#xff1a;你需要知道的一切 作者&#xff1a;Alberto Romero &#xff08;青稞AI整理&#xff09; 原…

2024杭电多校7——1007创作乐曲

补题链接 也是好久没补题了&#xff0c;欠了好多好多,我的评价是加训 题目如下: 官方题解: 官方题解一如既往的简洁&#xff0c; 对于不会做的人要读懂真的挺难 \sout{对于不会做的人要读懂真的挺难} 对于不会做的人要读懂真的挺难 首先询问最少删除多少音符(一般人来说不…

【教学类-52-14】20240925动物数独(N宫格通用版)1图、2图、6图、有答案、无答案 组合版18套

背景需求&#xff1a; 制作了3-5宫格&#xff08;1、2、6图&#xff09;样式18组&#xff0c;它们用的都是&#xff08;1、2、6图&#xff09;的word模板&#xff0c;只是宫格数量不同&#xff0c;图片插入大小不同&#xff0c;是否可以做一个通用代码&#xff1f; 【教学类-…

C#算法(16)—获取上升沿和下降沿信号

前言 我们在上位机软件开发的时候有时候需要抓取一个信号的上升沿或者下降沿,这时候就需要我们自己编写程序来实现抓取上升沿和下降沿的功能,详细内容如下: 一个信号从“无”到“有”,然后再从“有”到“无”,经历的过程如下:无-上升沿-有-下降沿-无,这样5个过程。 1…

基于微信小程序的电影院订票选座系统ssm(lw+演示+源码+运行)

摘 要 通过移动互联网这几年的发展&#xff0c;单独的开发某些APP已经到了日暮西山的地步&#xff0c;原因不在于单个的APP功能丰富与否&#xff0c;而是因为用户生态体系的问题。使用智能手机的用户经过多年的使用习惯&#xff0c;已经越来越不喜欢安装各种的APP&#xff0c;…

mysql 05 InnoDB数据页结构

01.数据页结构的快速浏览 02.记录在页中的存储 在页的7个组成部分中&#xff0c;我们自己存储的记录会按照我们指定的 行格式 存储到 User Records 部分。但是在一开始生成页的时候&#xff0c;其实并没有 User Records 这个部分&#xff0c;每当我们插入一条记录&#xff0c…

建立队列,插入队列,删除队列

代码&#xff1a; #include<iostream> using namespace std; template<class T> class sq_Queue {private:int mm;int front;int rear;int s;T *q; public:sq_Queue(int);void prt_sq_Queue();int flag_sq_Queue();void ins_sq_Queue(T);T del_sq_Queue(); }; tem…

【线程】自旋锁和读写锁

自旋锁 以前所讲的是挂起等待锁&#xff0c;申请锁成功继续执行&#xff0c;申请失败挂起等待 挂起等待和唤醒是需要时间的&#xff0c;有没有一种锁不会挂起等待呢&#xff1f;那就是自旋锁&#xff0c;申请锁失败它不会挂起&#xff0c;他会轮询&#xff0c;一直让我们的线…

如何给文件设置密级权限查看

一、使用文件加密软件&#xff1a; 选择专业的加密软件&#xff0c;如BitLocker&#xff08;Windows内置&#xff09; 对需要设置密级的文件进行加密&#xff0c;并设置访问密码。 这样&#xff0c;只有拥有正确密码的人才能查看或访问该文件。 二、第三方加密工具&#xff…

《Detection of Tea Leaf Blight in Low-Resolution UAV Remote Sensing Images》论文阅读

学习资料 论文题目&#xff1a;Detection of Tea Leaf Blight in Low-Resolution UAV Remote Sensing Images&#xff08;低分辨率UAV遥感图像中茶叶枯萎病的检测&#xff09;论文地址&#xff1a;https://ieeexplore.ieee.org/stamp/stamp.jsp?tp&arnumber10345618 Abstr…

这个博览会不一般,丰收的背后故事多!

在金秋送爽、硕果累累的季节里&#xff0c;我们迎来了第七个中国农民丰收节&#xff0c;2024 年 9 月 24日&#xff0c;“中国农民丰收节毕节庆祝活动第三届毕节天麻博览会”在七星关区盛大开幕&#xff0c;一场办在农民心坎上的庆丰收活动精彩上演&#xff01;这是一场属于农民…

手把手教程 | 在 Azure OpenAI 服务上微调 4o 模型

兴奋起来——你现在可以使用 Azure OpenAI 服务微调 4o&#xff01; 我们很高兴地宣布在 Azure 上推出 4o 微调的公开预览版。在成功进行私人预览后&#xff0c;4o 现已可供我们所有的 Azure OpenAI 客户使用&#xff0c;在 Azure OpenAI 服务中提供无与伦比的定制和性能。 …

通信工程学习:什么是ODN光分配网络

ODN&#xff1a;光分配网络 ODN&#xff08;Optical Distribution Network&#xff0c;光分配网络&#xff09;是光接入网中的重要组成部分&#xff0c;它位于光线路终端&#xff08;OLT&#xff09;和光网络单元&#xff08;ONU&#xff09;/光网络终端&#xff08;ONT&#x…

itc保伦股份智慧高校整体解决方案推动教育强国、科技强国、人才强国建设!

党的二十大报告指出&#xff0c;要“统筹职业教育、高等教育、继续教育协同创新&#xff0c;推进职普融通、产教融合、科教融汇&#xff0c;优化职业教育类型定位”。itc积极响应高校人才培养相关政策要求&#xff0c;基于互联网、物联网、大数据、AI等技术&#xff0c;面向老师…