Java连接数据库小结

来源:互联网 发布:java web访问静态资源 编辑:程序博客网 时间:2024/06/08 18:57

一、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)关闭连接。按照“结果集=>会话=>连接”的顺序关闭数据库连接

三、应用程序举例

(不同的数据库需要到对应的官网下载相对应的驱动程序,然后语法上会有一定的区别。这里以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


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

程序执行查询结果如下:



0 0
原创粉丝点击