JDBC连接数据库的步骤

一 概述

JDBC(Java Database Connectivity),是一个规范而非一个实现,Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。

二 从SQL到Java数据类型映射的JDBC规范

SQL类型

Java类型

CHAR

java.lang.String

VARCHAR

java.lang.String

LONGVARCHAR

java.lang.String

NUMERIC

java.math.BigDecimal

DECIMAL

java.math.BigDecimal

BIT

boolean

TINYINT

byte

SMALLINT

short

INTEGER

int

BIGINT

long

REAL

float

FLOAT

double

DOUBLE

double

BINARY

byte[]

VARBINARY

byte[]

LONGVARBINARY

byte[]

DATE

java.sql.Date

TIME

java.sql.Time

TIMESTAMP

java.sql.Timestamp

BLOB

java.sql.Blob

CLOB

java.sql.Clob

Array

java.sql.Array

REF

java.sql.Ref

Struct

java.sql.Struct

三 从SQL到Java数据类型映射的JDBC规范时的illegalArgumentException异常

注意:Java中数据类型是存在默认值的,SQL的数据类型的默认值是不一样的,一般情况下不给初始值是默认设置为null。

SQL字段定义

SQL字段默认为null

此为SQL数据类型为int的情况,其到Java数据类型映射为int,但是int不给初值是默认为0;

Java字段定义(注意此处l为成员变量不会强制初始化,如果时局部变量被强制初始化)

这就会造成illegalArgumentException。

解决方案:使用int的包装类Integer

四 JDBC实现数据库连接的步骤

1.加载JDBC驱动程序

在连接数据库之前,首先需要加载想要连接的数据库的驱动程序到JVM(Java虚拟机),这时候java.lang.Class类的静态方法forName(String className)。

forName()

    @CallerSensitive
    public static Class<?> forName(String className)
                throws ClassNotFoundException {
        Class<?> caller = Reflection.getCallerClass();
        return forName0(className, true, ClassLoader.getClassLoader(caller), caller);
    }

加载数据库驱动

try {
    //加载MySql的驱动类,如果没有成功加载驱动会抛出ClassNotFoundException
    Class.forName("com.mysql,jdbc.Driver");
} catch (ClassNotFoundException e) {
    System.out.println("数据库驱动类没找到,加载失败!");
    e.printStackTrace();
}
//成功加载后,会将Driver类的实例注册到DriverManager类中。

2.提供JDBC连接的URL

连接URL定义了连接数据库时的协议,子协议,数据源标识。

  • 协议:JDBC协议是以jdbc开始的。
  • 子协议:是连接的驱动程序或者数据库管理系统的名称,如mysql。
  • 数据源标识:标记找到数据库来源的地址与连接端口,如localhost:3306。

例如:jdbc:mysql://localhost:3306/test?useUnicode = true&characterEncoding = gbk;

useUnicode=true:表示使用Unicode字符集。

如果characterEncoding设置为gb2312或GBK,本参数设置为characterEncoding = gbk字符编码方式。

3.创建数据库的连接对象

要创建数据库时,需要向java.sql.DriverManager请求并获得Connection对象,该对象代表一个数据库连接。

使用DriverManager的getConncetion(String url,String username,String password)方法传入指定的欲连接的数据库的路径,数据库的用户名和密码来获得。

//连接的是mySql数据库,用户名和密码都是root
String url = "jdbc:mysql://localhost:3306/test";
String username = "root";
String password = "root";
try {
    Connection con = DriverManager.getConnection(url,username,password);
}catch (SQLException e) {
    e.printStackTrace();
}

4.实例化一个Statement声明

执行SQL语句之前,必须先获得java.sql.Statement实例

//interface Connection
Statement createStatement() throws SQLException;
Statement stmt = con.createStatement();

PreparedStatement prepareStatement(String sql)throws SQLException;
PreparedStatement pstmt = con.prepareStatement(sql);

CallableStatement prepareCall(String sql) throws SQLException;
CallableStatement cstmt = con.prepareCall(sql);

5.执行SQL语句获得记录集

Statement接口提供了三种执行SQL语句的方法

//interface Statement
ResultSet executeQuery(String sql) throws SQLException; //执行查询并返回一个结果集
int executeUpdate(String sql) throws SQLException;//执行更新数据库操作,返回受影响的记录数。
boolean execute(String sql) throws SQLException;

//interface PreparedStatement extends Statement
ResultSet executeQuery() throws SQLException;//执行查询并返回一个结果集
int executeUpdate() throws SQLException;//执行更新数据库操作,返回受影响的行。
boolean execute() throws SQLException;

//interface CallableStatement extends PreparedStatement
    

对于上述操作得到的数据可以根据实际情况进行操作。

6 关闭JDBC对象

操作完成以后把所有的JDBC对象全部关闭,以释放JDBC资源,关闭顺序和声明顺序相反的。

  1. 关闭记录集
  2. 关闭声明
  3. 关闭连接对象
if(ResultSet != null ) {//关闭记录集
    try {
        ResultSet.close();
    }catch(SQLException e) {
        e.printStackTrace();
    }
}

if(stmt != null ) {//关闭声明
    try {
        stmt.close();
    }catch(SQLException e) {
        e.printStackTrace();
    }
}

if(con != null ) {//关闭连接
    try {
        con.close();
    }catch(SQLException e) {
        e.printStackTrace();
    }
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值