您的位置:首页 > 新闻 > 会展 > java数据库建立连接(JDBC)

java数据库建立连接(JDBC)

2025/9/18 13:07:27 来源:https://blog.csdn.net/2301_77721901/article/details/139659840  浏览:    关键词:java数据库建立连接(JDBC)

目录

 一.关于JDBC

  1.JDBC(java DataBase Connectivity) 

   2.JDBC的本质:

3.为什么要使用JDBC

二.连接步骤

1.在项目添加jar文件

  2.加载驱动类  Class.forName("com.mysql.cj.jdbc.Driver");

  3.建立与数据库的连接,获得连接对象

   4.发送sql

三.实现及分析

PreparedStatement和Statement 区别

    关闭与数据库连接


 一.关于JDBC

  1.JDBC(java DataBase Connectivity) 

    java语言连接数据库。

   2.JDBC的本质:

             JDBC是一套接口(面向接口写实现类,能够解耦合,提高代码的扩展力,因为每个数据库底层的实现原理是不同的,如果没有接口 访问不同数据库就要不同的代码。

 jdbc驱动: 所有的数据库连接的驱动都以 jar包存在(里面是.class)  ,有很多的 .class文件他们是对JDBC接口的实现类 由数据库厂商提供连接相应的数据库 官网下载   。

3.为什么要使用JDBC

有了JDBC,java开发人员只需要编写一次程序,就可以访问不同的数据库.

J a v a A P I 中 提 供 了 操 作 数 据 库 的 标 准 接 口 , 最 终 由 不 同 的 数 据 库 开 发 商 实 现 这 些 标 准 接 口 来 对 数 据 库 操 作 . Java定义者制定了JDBC规范,数据库开发商实现接口, 程序员。

二.连接步骤

1.在项目添加jar文件


  2.加载驱动类  Class.forName("com.mysql.cj.jdbc.Driver");


  3.建立与数据库的连接,获得连接对象


   String url = "jdbc:mysql://127.0.0.1:3306/schooldb?serverTimezone=Asia/Shanghai";
   String user = "root";
   String password = "root";
   Connection connection = DriverManager.getConnection(url,user,password);


   4.发送sql


          Statement st = connection.createStatement();
           st.executeUpdate("INSERT INTO student(NAME,num,gender,birthday,phone,address,reg_time,majorid)" +
                "VALUES('"+name+"','"+gender+"','"+birthday+"','"+phone+"','"+address+"',now(),"+majorid+")");
  
          PreparedStatement ps =  connection.prepareStatement("delete from student where num=?");
                          ps.setObject(1,num);
                          ps.executeUpdate();

举例:

import java.sql.*;
import java.util.Collection;public class Demo1 {public static void main(String[] args) throws ClassNotFoundException, SQLException {// 加载驱动类Class.forName("com.mysql.cj.jdbc.Driver");//建立与数据的链接String url="jdbc:mysql://127.0.0.1:3306/studentdb?serverTimezone=Asia/Shanghai";String user="root";String account="root";Connection connection= DriverManager.getConnection(url,user,account);//发送Statement statement=connection.createStatement();statement.executeUpdate("insert into course(name) values ('数学')");statement.close();connection.close();}
}

使用此代码实现向mysql的course表的名称中插入数学数据

三.实现及分析

import java.sql.*;public class Demo2 {public static void main(String[] args)  {Demo2 demo2=new Demo2();try {try {//demo2.send("力宏","女","2002-05-06","11111111111","汉中","now()",3);demo2.updete("李洪","男","西安");} catch (SQLException throwables) {throwables.printStackTrace();}} catch (ClassNotFoundException e) {e.printStackTrace();}}public void send(String name,String gender,String birthday,String phone,String address,String reg_time,int id) throws ClassNotFoundException, SQLException {// 加载驱动类Class.forName("com.mysql.cj.jdbc.Driver");//建立连接String url="jdbc:mysql://127.0.0.1:3306/studentdb?serverTimezone=Asia/Shanghai";String user="root";String account="root";Connection connection= DriverManager.getConnection(url,user,account);//发送Statement statement=connection.createStatement();statement.executeUpdate("insert into student(name,gender,birthday,phone,address,reg_time,id)values('"+name+"','"+gender+"','"+birthday+"','"+phone+"','"+address+"',now()),'"+3+"'");}public  void updete(String name,String gender,String address) throws ClassNotFoundException, SQLException {Class.forName("com.mysql.cj.jdbc.Driver");String url="jdbc:mysql://127.0.0.1:3306/studentdb?serverTimezone=Asia/Shanghai";String user="root";String account="root";Connection connection= DriverManager.getConnection(url,user,account);Statement statement=connection.createStatement();statement.executeUpdate("update student set name='"+name+"',gender='"+gender+"',address='"+address+"'");connection.close();statement.close();}}
import java.sql.*;public class Demo3 {public static void main(String[] args) {try {//update("朱磊","女",6);try {delete(1);} catch (SQLException throwables) {throwables.printStackTrace();}} catch (ClassNotFoundException e) {e.printStackTrace();}}public static void update(String name,String gender,int num) throws ClassNotFoundException, SQLException {// 加载驱动类Class.forName("com.mysql.cj.jdbc.Driver");//建立与数据的链接String url="jdbc:mysql://127.0.0.1:3306/studentdb?serverTimezone=Asia/Shanghai";String user="root";String account="root";Connection connection= DriverManager.getConnection(url,user,account);//发送//预先编译PreparedStatement p=connection.prepareStatement("update student set name=?,gender=?where num=?");p.setObject(1,name);p.setObject(2,gender);p.setObject(3,num);p.executeUpdate();connection.close();p.close();}/*PreparedStatement与Statement区别PreparedStatement相比Statement简单,安全,先用?占位再用setObject方法赋值,不用拼接字符串,安全,在赋值时先进行检测*/public static void delete(int num) throws ClassNotFoundException, SQLException {Class.forName("com.mysql.cj.jdbc.Driver");String url="jdbc:mysql://127.0.0.1:3306/studentdb?serverTimezone=Asia/Shanghai";String user="root";String account="root";Connection connection=DriverManager.getConnection(url,user,account);PreparedStatement p=connection.prepareStatement("delete from student where num=?");p.setObject(1,num);p.executeUpdate();connection.close();p.close();}
}

 使用Statement发送sql要拼接字符串不安全,所以大多数使用PreparedStatement

PreparedStatement和Statement 区别


     相同点: 都是向数据库发送sql
     Statement:   将参数直接拼接到sql中, 要拼接字符串,写起来麻烦, 安全性差, 可以在参数中拼接 or 1=1

     PreparedStatement : 先用?占位, 然后通过setObject方法赋值, 写起来不用拼接字符串, 安全可靠的,  在赋值时进行检测,可以防止sql注入攻击。
 


    关闭与数据库连接


            rs.close();
            ps.close();
            connection.close();

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com