天天看点

一文简单的带你走进Java的JDBC世界

1、何为JDBC

jdbc:(java database connection),从这个专有名词的全拼来看,就是Java用来连接数据库的,就是这么简单,那么接下来就是介绍如何连接和一系列操作了。

一、连接

注意:Java连接数据库需要使用到第三方的库,mysql-connector-java-8.0.19,目前我的版本是最新的,适配数据库8.0版本。

jar包的下载官网地址:https://dev.mysql.com/downloads/connector/j/

1、导包

一文简单的带你走进Java的JDBC世界

在自己程序的根目录创建一个lib文件,然后把下载的库丢进去,然后鼠标右键单击选择add as Library,编译器就能将这个库解析了,这样才能使用这个库。

2、加载驱动

Class.forName("com.mysql.cj.jdbc.Driver");
            String url="jdbc:mysql://localhost:3306/javajdbc?useSSL=false&serverTimezone=Asia/Shanghai";
            String users="root";
            String password="abcdef";      
           

第一句是将库中的Driver驱动类加载进程序,这个类是所有数据库的标准连接方式,

第二句就是数据库的URL地址 格式:

jdbc:mysql://数据库的ip地址:端口号/数据库名称?useSSL=false&serverTimezone=Asia/Shanghai";

?表示是否需要加参数,&表示参数之间的连接

从库的第六个版本就需要加上useSSL=false&serverTimezone=Asia/Shanghai";这两个参数,一个是协议,一个是时区**

第三、第四句就是数据库使用者的名称和登录密码

3、连接

我个人比较喜欢使用这种方式去连接数据库

那么经过上面三步,只要书写正确那么就已经能正确的与自身电脑或者服务器的数据库取得连接了,当然当中的异常我并没指出,下面就是我完整的连接代码

public class Text{

    public static void main(String[] args){
        Connection connection=null;
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            String url="jdbc:mysql://localhost:3306/javajdbc?useSSL=false&serverTimezone=Asia/shanghai";
            String username="Travel Time";
            String password="abcdef";
            connection= DriverManager.getConnection(url,username,password);
            if(connection!=null) System.out.println("Successful");
            else System.out.println("Error");
        } catch (ClassNotFoundException | SQLException e) {
            e.printStackTrace();
        }
        if(connection!=null){
            try {
                connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
 }
           

结果:

Successful

2、SQL 语句的注入

一、Statement接口
		**由于不能直接实例化,所以需要用到连接对象来产生Statement对象**
		Statement statement=connection.createStatement();
		**执行SQL语句***
		statement.executeQuery(SQL语句);
	
	二、PrepareStatement接口
	**SQL语句***
		String sql="SELECT * FROM tbl_user WHERE userId=?";
		**得到Statement对象***
        prepareStatement ps=connection.prepareStatement(sql);
        **对占位符进行设置***
        ps.setInt(1,1);//第一个参数表示ps的第一个问号
        **进行查询***
        resultSet=ps.executeQuery();
           

Statement和PrepareStatement的区别

1、Statement对于SQL语句的操作太固定,而且如何需要操作到大量的SQL语句时太复杂而且对于SQL语句的适配性太差,

2、而PrepareStatement引入了占位符,只需要在后期对占位符进行设置便可以设配同类型的SQL语句,而且PrepareStatement最大的特点就是采用了预编译的功能,对编译过的代码有缓存区。

3、查询

查询我们需要使用到一个方法:executeQuery();

返回结果为一个Result类型的结果集

String sql="SELECT * FROM tbl_user WHERE userId=?";
            pstat=connection.prepareStatement(sql);
            pstat.setInt(1,1);//第一个参数表示pstat的第一个问号
            resultSet=pstat.executeQuery();
            UserInformation user=null;
            while(resultSet.next()){//next()方法一次取一行数据
               //操作语句;
            }
           

4、增、删、改

**在JDBC中这三个操作的思想都是一样的,对数据表中的数据进行更新操作。响应的语句为:executeUpdate();方法 其他的操作都大致相同,不同的地方就在于SQL语句,因为这始终是在操作数据库,这只不过是通过Java来实现操作而已,所以想学好JDBC,SQL知识少不了

一、增加

String sql = "INSERT INTO tbl_user(username,password,sex,hobby,nativePlace,identify)" +
                    "values(?,?,?,?,?,?)";
            pstat = connection.prepareStatement(sql);
            pstat.setString(1,"张三");
            pstat.setString(2,"99999999");
            pstat.setString(3,"男");
            pstat.setString(4,"唱歌跳舞");
            pstat.setString(5,"长沙天心区");
            pstat.setString(6,"身份证");

            int row=pstat.executeUpdate();
           

PrepareStatement是可以使用多个占位符的,只需要在后期进行挨个设置就行了,所以这个比Statement更方便的点就在这里

二、删除

String sql = "DELETE  FROM tbl_user WHERE userId=?";
            pstat = connection.prepareStatement(sql);
            pstat.setInt(1,4);
            int row=pstat.executeUpdate();
           

三、改

String sql = "UPDATE tbl_user set hobby=? WHERE userId=1";
            pstat=connection.prepareStatement(sql);
            pstat.setString(1,"琴棋书画");
            int result=pstat.executeUpdate();
           

是吧,操作都差不多吧,主要的还是在SQL语句,所以其他的数据库操作通过其他的SQL语句便能完成,所以这种只要知道SQL语句就行

但是,上面的这种方法在如果要向数据库内写入上万条数据时,是非常慢的,而且在实际应用开发时也不可能使用这种方式,(这里只是入门而已)

如果京东这种大型的网站在剁手节采用了这种设计,那么不出十秒,整个服务器……崩溃。

所以这是需要优化的,我们后期揭晓,嘿嘿🤭