JDBC学习-Hello JDBC

1 为项目导入mysql-jdbc的jar包

访问MySQL数据库需要用到第三方的类,这些第三方的类,都被压缩在一个叫Jar的文件里,为了代码能使用第三方的类,需要为项目导入mysql的专用Jar包。通常将项目用的jar包统一放在项目的lib目录下,然后在eclipse中导入这个jar包。

导包步骤: 右键project->property->java build path->libaries->add external jars

2 初始化驱动

通过Class.forName("com.mysql.jdbc.Driver");

  • com.mysql.jdbc.Driver 是 mysql-connector-java 5中的,
    com.mysql.cj.jdbc.Driver 是 mysql-connector-java 6中的

初始化驱动类com.mysql.jdbc.Driver就是在mysql-connector-java-8.0.16.jar中,如果没有按照1.1导包,就会抛出ClassNotFoundException。

Class.forName是把这个类加载到JVM中,加载的时候,就会执行其中的静态初始化块,完成驱动的初始化的相关工作。

初始化驱动

public class TestJDBC {
    public static void main(String[] args) {
           
        //初始化驱动
        try {
            //驱动类com.mysql.cj.jdbc.Driver
            //就在 mysql-connector-java-8.0.16.jar中
            //如果忘记了第一个步骤的导包,就会抛出ClassNotFoundException
            Class.forName("com.mysql.cj.jdbc.Driver");
              
            System.out.println("数据库驱动加载成功 !");
   
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
           
    }
}

3 建立与数据库的连接

这里需要提供:

  • 数据库所处有的ip:127.0.0.1(本机)
  • 数据库的端口号:3306(mysql专用端口号)
  • 数据库名称:jdbcTest
  • 编码方式:UTF-8
  • 账号:root
  • 密码:admin
  • 指定时区 UTC
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
 
public class TestJDBC {
    public static void main(String[] args) {
 
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
 
            // 建立与数据库的Connection连接
            // 这里需要提供:
            // 数据库所处于的ip:127.0.0.1 (本机)
            // 数据库的端口号: 3306 (mysql专用端口号)
            // 数据库名称 jdbcTest
            // 编码方式 UTF-8
            // 账号 root
            // 密码 admin
            //指定时区 severTimezone
 
            Connection c = DriverManager
                    .getConnection(
                            "jdbc:mysql://127.0.0.1:3306/jdbcTest?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&useSSL=false",
                            "root", "admin");
 
            System.out.println("连接成功,获取连接对象: " + c);
 
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
 
    }
}

注:JDBC连接Mysql6及以上 com.mysql.cj.jdbc.Driver, 需要指定时区serverTimezone:

  • driverClassName=com.mysql.cj.jdbc.Driver
  • url=jdbc:mysql://localhost:3306/jdbcTest?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&useSSL=false
  • username=root
  • password=admin
     

 在设定时区的时候,如果设定serverTimezone=UTC,会比中国时间早8个小时,如果在中国,可以选择Asia/Shanghai或者Asia/Hongkong,例如:

driverClassName=com.mysql.cj.jdbc.Driver
url = jdbc:mysql://localhost:3306/jdbcTest?serverTimezone=Aisa/Shanghai&useUnicode=true&characterEncoding=utf8&useSSL=false
username = root
password = admin

com.mysql.jdbc.Driver 和 com.mysql.cj.jdbc.Driver的区别 serverTimezone设定

4 创建Statement

Statement用于执行SQL语句,比如增加,删除。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
 
public class TestJDBC {
    public static void main(String[] args) {
 
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            
            Connection c = DriverManager
                    .getConnection(
                            "jdbc:mysql://127.0.0.1:3306/jdbcTest?serverTimezone=Asia/Shanghai&characterEncoding=utf8",
                            "root", "admin");
            //注意使用的是java.sql.Statment
            //不可使用com.mysql.jdbc.Statement
            Statement s = c.createStatement();
 
            System.out.println("获取 Statement对象: " + s);
 
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
 
    }
}

5. 执行SQL语句

s.execute执行sql语句。执行成功后,在MySQL客户端中查看。

执行SQL语句之前要确保数据库jdbc中有表hero存在,如果没有,需要事先创建表。

            //准备sql语句
            //注意:字符串要用单引号 '
            String sql = "insert into hero values(null,"+"'提莫'"+","+313.0f+","+50+")";
            s.execute(sql);
            System.out.println("执行插入语句成功 ");

6. 关闭连接

数据库的连接是有限资源,相关操作结束后,养成关闭数据库的好习惯。

先关闭Statement

后关闭Connection

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
 
public class TestJDBC {
    public static void main(String[] args) {
    	
    	Connection c = null;
    	Statement s = null;
 
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            
            c = DriverManager
                    .getConnection(
                            "jdbc:mysql://127.0.0.1:3306/jdbcTest?serverTimezone=Asia/Shanghai&characterEncoding=utf8",
                            "root", "admin");
            //注意使用的是java.sql.Statment
            //不可使用com.mysql.jdbc.Statement
            s = c.createStatement();
            
            //准备sql语句
            //注意:字符串要用单引号 '
            String sql = "insert into hero values(null,"+"'提莫'"+","+313.0f+","+50+")";
            s.execute(sql);
 
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally {
        	//先关闭Statement
        	if(s != null)
        		try {
        			s.close();
        		}catch (SQLException e) {
        			e.printStackTrace();
        		}
        	//后关闭Connection
        	if(c != null) {
        		try {
        			c.close();
        		}catch(SQLException e) {
        			e.printStackTrace();
        		}
        	}
        }
 
    }
}

7. 使用try-with-resource的方式自动关闭连接

如果觉得上一步的关闭连接的方式很麻烦,可以参考关闭流的方式,使用try-with-resource的方式自动关闭连接,因为Connection和Statement都实现了AutoCloseable接口。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
 
public class TestJDBC {
    public static void main(String[] args) {
 
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
 
        try (
            Connection c = DriverManager.getConnection(
                  "jdbc:mysql://127.0.0.1:3306/jdbcTest?serverTimezone=Asia/Shanghai&characterEncoding=utf8",
                  "root", "admin");
            Statement s = c.createStatement();              
        )
        {
            String sql = "insert into hero values(null," + "'提莫'" + "," + 313.0f + "," + 50 + ")";
            s.execute(sql);
             
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值