Java连接数据库小结

一、JDBC介绍

JDBC(Java DataBase Connectivity,Java数据库连接)是一种用于执行SQL语句的JavaAPI,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC为开发人员提供了一标准的API,据此可以构建更高级的工具和接口,使数据库开发人员能够用纯Java的API编写数据库应用程序。

JDBC由两部分组成,第一部分是供程序员调用的API,另一部分是需要数据库厂商实现的SPI(Service Provider Interface,数据库厂商需要实现的接口),也就是驱动程序。对于Java程序员来说,是不可能知道某种数据库(如MySQL、SQLServer、Oracle)应该如何调用的,或者需要用其他的技术或语言另外写一个接口程序,非常麻烦。于是SUN公司就利用JDBC技术很好的为程序员解决了这个问题,提供了一系列的Java接口给数据库厂商,让他们去实现这些接口,实现部分也就是数据库驱动程序。另一方面,JDBC也为程序员提供了一系列的JavaAPI调用接口,只要数据库厂商提供了该数据库的JDBC驱动程序,程序员就可以访问数据库了。

以MySQL为例,MySQL驱动程序为一个jar包,在MySQL的官网下载,笔者的驱动程序文件名为mysql-connector-java-6.0.3-bin.jar。对于变通的Java程序,将jar包放在Java的类搜索路径下(CLASSPATH)即可,对于JavaWeb应用程序则应该放在Web应用目录正面的WEB-INF/lib文件夹中。

二、JDBC连接数据库步骤

无论是普通Java程序、JavaWeb应用程序、EJB程序或是其他Java程序,使用JDBC操作数据库的步骤基本都是相对固定的。具体分为如下步骤:

(1)注册驱动程序。即把驱动程序类加载到Java虚拟机中,使得驱动管理器DriverManager能够找到该驱动程序,一般通过Class.forName()进行加载;

(2)获取数据库连接。java.sql.Connection接口代表一个数据库连接,它通过驱动管理器DriverManager来建立连接,并返回一个Connection接口的实现。同时需要指定连接URL、用户名和密码;

(3)创建会话。JDBC的会话Statement主要是用于向数据库发送SQL命令,并返回执行结果,由Connection生成;

(4)执行SQL语句。会话创建好后程序员就可以执行具体的SQL语句了。一般分为查询和修改两种。查询主要是select语句,使用executeQuery()方法,它返回查询后的结果集;修改包括对数据库记录的插入、修改、删除,使用executeUpdate()方法,它执行后返回的是影响到的记录数;

(5)处理结果集。对于查询语句,返回的是结果集ResultSet,一般使用ResultSet.next()方法对结果集进行逐条处理;

(6)关闭连接。按照“结果集=>会话=>连接”的顺序关闭数据库连接

三、Eclipse中应用程序举例

(不同的数据库需要到对应的官网下载相对应的驱动程序,然后语法上会有一定的区别。这里以MySQL为例

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

class DBHelper {//打开或关闭数据库的类
    public static final String url = "jdbc:mysql://127.0.0.1/learn?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC";  
    public static final String name = "com.mysql.cj.jdbc.Driver";  
    public static final String user = "root";  
    public static final String password = "admin";  
  
    public Connection conn = null;  
    public PreparedStatement pst = null;  
  
    public DBHelper(String sql) {  
        try {  
            Class.forName(name);//指定连接类型  
            conn = DriverManager.getConnection(url, user, password);//获取连接  
            pst = conn.prepareStatement(sql);//准备执行语句  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
    }  
  
    public void close() {  
        try {  
            this.conn.close();  
            this.pst.close();  
        } catch (SQLException e) {  
            e.printStackTrace();  
        }  
    }  
}  

public class DBTest {
	static String sql = null;
	static DBHelper db1 = null;
	static ResultSet rst = null;
	public static void main(String[] args) {
       sql = "select * from student";
       db1 = new DBHelper(sql);
       try{
    	   rst = db1.pst.executeQuery();
    	   while(rst.next()){
    		   String sno = rst.getString(1);
    		   String name = rst.getString(2);
    		   String dept = rst.getString(3);
    		   System.out.println(sno + "\t" + name + "\t" + dept);
    	   }
    	   rst.close();
    	   db1.close();
       }catch(SQLException e){
    	   e.printStackTrace();
       }
    }	 
}

笔者新安装的JDK8进行实验时发现需要注意的几点问题

1、导入mysql-connector-java-6.0.3-bin.jar包的方法

解决办法(1)右击要导入jar包的项目,点properties 

   (2)左边选择java build path,右边选择libraries 

   (3)选择add External jars 

   (4)选择jar包的按照路径下的


2、错误“Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.”

解决办法:stackOverflow上给出的解决办法是将URL改为

jdbc:mysql://127.0.0.1/learn?useUnicode=true&characterEncoding=utf-8&useSSL=false

原来的写法直接写为:jdbc:mysql://127.0.0.1/learn

3、错误“Could not create connection to database server. Attempted reconnect 3 times. Giving up.”

解决办法:在上面的那句话后面加上服务器时间

jdbc:mysql://127.0.0.1/learn?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC

我的数据库表为内容如下:

程序执行查询结果如下:


四、IDEA中应用举例

首先安装MySQL(我选择的是mysql-5.7.17.msi安装版本的),按照网上的步骤进行安装,安装完成运行得到如下界面说明安装成功


然后在IDEA中写程序:

public class DBTest {
    public static void main(String[] args) throws ClassNotFoundException {
        final String url = "jdbc:mysql://127.0.0.1/learn?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC";
        final String driver = "com.mysql.cj.jdbc.Driver";
        final String user = "root";
        final String password = "admin";

        Connection connection = null;
        Statement statement = null;
        ResultSet resultSet = null;


        try {
            connection = DriverManager.getConnection(url, user, password);
            statement = connection.createStatement();
            String sql = "select * from student";
            resultSet = statement.executeQuery(sql);
            while(resultSet.next()){
                String sno = resultSet.getString(1);
                String name = resultSet.getString(2);
                String major = resultSet.getString(3);
                System.out.println(sno + "\t" + name + "\t" + major);
            }
            resultSet.close();
            statement.close();
            connection.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}
运行得到如下错误


分析原因是少了驱动程序,从官网下载JDBC(https://dev.mysql.com/downloads/connector/j/)如图


解压得到mysql-connector-java-5.1.42-bin.jar


然后在IDEA中执行 “File-->ProjectStructure-->下图”


或者在pom.xml文件中添加依赖即可:



然后再运行就可以了,得到如下结果



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值