JAVA连接数据库 JDBC编程

提供修改数据库和查询数据库的代码,两者只有很细微的差别

一.前期准备:

        注意在进行连接数据库首先你得下载你对应MYSQL版本的JDBC驱动包,比如MYSQL8.0版本的你就要下载MYSQL8.0版本的JDBC驱动包,MYSQL5.1版本的你就要下载MYSQL5.1版本的JDBC驱动包

我下载的8.0版本的驱动包就是这个样子

         下载了驱动包以后要在你的项目当中创建一个Directory的包,将你的JDBC驱动包粘贴到你创建的这个包中

        粘贴了以后右键你创建的这个包,点击Add as Library(你得告诉它你粘贴进来的这是一个库)这样JDBC驱动包的导入就完成了

        二.修改数据库代码:

import com.mysql.cj.jdbc.MysqlDataSource;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: wuyulin
 * Date: 2023-07-19
 * Time: 14:55
 */
public class JDBCdemo1Insert {
    public static void main(String[] args) throws SQLException {
        //确定数据库中有一个student表(id,name)往里面插入一个数据

        //一,创建数据源(数据库服务器在哪里)
        DataSource dataSource = new MysqlDataSource();    //典型的向上转型
        //设置属性
        //1.填入数据库服务器所在的位置
        ((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/jdbcexercise?characterEncoding=utf8&useSSL=false&serverTimezone=UTC"); //向下转型

        //用下面这个方法也是一样的,但是上面的方法可以降低mysql驱动包和项目之间的偶合关系,避免后面更换数据库时有太大成本
        //MysqlDataSource mysqlDataSource=new MysqlDataSource();
        //mysqlDataSource.setUrl();
        //2.填入数据库的用户名
        ((MysqlDataSource) dataSource).setUser("root");
        //3.填入数据库的密码
        ((MysqlDataSource) dataSource).setPassword("1868397383q");
        //到这里,只是描述了一下数据库服务器所在的地址,还没有真正的连接数据库服务器

        //二.与数据库服务器建立连接
        Connection connection = dataSource.getConnection();   //建立网络连接会有很多异常,可以抛给上一级进行处理

        //三.构造sql语句
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入id");
        int id =sc.nextInt();
        System.out.println("请输入name");
        String name=sc.next();
        String sql = "insert into student values(?,?)"; //?表示占位符,表示后面再赋值
        //把String类型的sql语句转换成PreparedStatement类型的语句再传递给mysql服务器
        //Statement类型的sql语句也可以传递给mysql服务器,但是一般推荐用PreparedStatement
        //PreparedStatement会再传递给mysql服务器前在客户端这边进行初步解析,这样就能减少服务器的压力,而Statement不会进行初步解析
        PreparedStatement statement = connection.prepareStatement(sql);
        statement.setInt(1,id); //设置第一个?是整数,为id变量
        statement.setString(2,name);    //设置第二个?是字符串,为name变量

        //四.执行sql语句
        int n = statement.executeUpdate();
        //返回值n表示被影响的数据行数
        System.out.println(n + "条记录被影响");

        //五.释放必要的资源,关闭连接
        //创建的语句对象,连接对象,这些资源不用了要及时释放
        //要注意关闭的顺序,先创建的后关闭,后创建的先关闭
        statement.close();
        connection.close();
    }
}

1.假设数据库中有一个表

        假设数据库中有一个student表(id,name)现在我们要往里面插入一个数据(你可以先在数据库中创建好这张表方便检验)

2.创建数据源(数据库服务器在哪里)

        创建数据源的代码运用到了 DataSource dataSource = new MysqlDataSource()是父类引用指向子类对象运用到了向上转型,(MysqlDataSource) dataSource)运用到了向下转型,因为只有子类MysqlDataSource对象才能调用setUrl等方法,我们在创建数据源的时候也可以直接创建MysqlDataSource的引用指向MysqlDataSource的对象,再直接用MysqlDataSource的引用调用setUrl等方法,就不需要用到向上和向下转型了,但我们运用转型的这种方法可以降低mysql驱动包和项目之间的偶合关系,避免后面更换数据库时有太大成本。

扫描二维码关注公众号,回复: 15997671 查看本文章

        setUrl()中输入的参数是你当前电脑数据库的URL(数据库资源的位置)

URL的组成

         除了这个照片中的介绍的我还添加了serverTimezone=UTC,添加这个的原因在JDBC编程连接MySQL数据库遇到的两个错误中有提到

        setUser()是数据库的用户名

        setPassword()是数据库的密码

3.与数据库建立连接

        通过数据源dataSource调用其中的getConnection()方法建立连接,并将返回值赋给Connection类型的引用

4.构造sql语句

        我们将sql语句写为一个String类型的对象,再通过connection引用调用prepareStatement(sql)方法将String类型的sql语句转换成PreparedStatement类型的sql语句,

为什么用PreparedStatement类型而不用Statement类型

        Statement类型的sql语句也可以传递给mysql服务器,但是一般推荐用PreparedStatement
        PreparedStatement会再传递给mysql服务器前在客户端这边进行初步解析,这样就能减少服务器的压力,而Statement不会进行初步解析,所以我们一般推荐用PreparedStatement类型

5.执行sql语句

        通过statement引用来调用executeUpdate()方法执行sql语句,对数据库进行修改,如增删改都是调用executeUpdate()方法,而对数据库进行查询调用的则是executeQuery()方法

        调用executeUpdate()方法放回的是对数据库影响的行数,而executeQuery()方法返回的是查询到的表格是ResultSet类型的,然后通过遍历ResultSet类型的表格来输出查询到的结果

6.释放必要的资源,关闭连接

        要保持良好的编程习惯,创建的语句对象,连接对象,这些资源不用了要及时释放
        要注意释放的顺序,先创建的后释放,后创建的先释放

三.查询数据库的代码

import com.mysql.cj.jdbc.MysqlDataSource;
import com.mysql.cj.protocol.Resultset;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Scanner;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: wuyulin
 * Date: 2023-07-19
 * Time: 20:06
 */
public class JDBCdemo3Select {
    public static void main(String[] args) throws SQLException {
        //1.创建数据源‘
        DataSource dataSource=new MysqlDataSource();
        ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/jdbcexercise?characterEncoding=utf8&useSSL=false&serverTimezone=UTC");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("1868397383q");

        //2.连接数据库
        Connection connection=dataSource.getConnection();

        //3.构造sql语句
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入要查询的id");
        int id=sc.nextInt();
        String sql="select * from student where id=?";
        PreparedStatement preparedStatement=connection.prepareStatement(sql);
        preparedStatement.setInt(1,id);

        //4.执行sql
        ResultSet resultset=preparedStatement.executeQuery();   //ResultSet是表格,查询sql语句执行返回的是表格
        //遍历表格
        while (resultset.next()){
            int student_id=resultset.getInt("id");
            String student_name=resultset.getString("name");
            System.out.println("id="+student_id+",name="+student_name);
        }

        //释放资源
        resultset.close();
        preparedStatement.close();
        connection.close();
    }
}

如何遍历ResultSet类型的临时表

        

猜你喜欢

转载自blog.csdn.net/q322359/article/details/131849104