Java的数据库编程(JDBC)技术
JDBC是什么?
为什么要选择使用JDBC?
JDBC怎么用呢?
JDBC(Java DataBase Connectivity,Java数据库连接技术)是Java访问数据库资源的标准,JDBC提供了一组通用的API,允许我们写出SQL语句,然后交给数据库。
JDBC的功能:
1)创建与数据库的连接;
2)发送SQL语句到任何关系型数据库中;
3)处理数据并查询结果。
为什么要选择使用JDBC?
在讨论这个问题之前,你需要了解一下微软开发的ODBC(Open DataBase Connectivity,开放数据连接),它与JDBC具有同样的功能,它提供一组通用的API,通过数据库特定的驱动程序来访问数据库。微软的ODBC是用C编写的,但其只适用于Windows平台,无法实现跨平台的操作数据库。如果没有JDBC或者ODBC,开发人员必须使用不同的一组API来访问不同的数据库,而利用JDBC或者ODBC,则只需要使用一组API,再加上数据库厂商提供的数据库驱动程序就可以了。所以,利用JDBC,我们就可以把同一个企业级Java应用移植到另一个数据库应用上。但是…JDBC并不符合面向对象的要求,JDBC要求你明确的处理数据字段,并且将它们映射到关系数据库的表中。开发人员将被迫与两种区别非常大的数据模型、语言和数据访问手段打交道:Java,以及SQL中的关系数据模型。
JDBC的结构
JDBC主要包含两部分:面向Java程序员的JDBC API及面向数据库厂商的JDBC Drive API。
1)面向Java程序员的JDBC API:
Java程序员通过调用此API从而实现连接数据库、执行SQL语句并返回结果集等编程数据库的能力,它主要是由一系列的接口定义所构成。
java.sql.DriverManager : 管理JDBC程序的;
java.sql.Connection : java程序与数据库之间建立连接,相当于一个通道;
java.sql.Statement : 用于执行SQL语句,并返回结果;
java.sql.ResultSet : 存储数据库查询的结果。
2)面向数据库厂商的JDBC Drive API:
现在的数据库厂商除了提供API接口之外,有一些厂商还提供了DBMS端的缓冲。
数据库厂商必须提供相应的驱动程序并实现JDBC API所要求的基本接口(每个数据库系统厂商必须提供对DriveManager、Connection、Statement、ResultSet等接口的具体实现),从而最终保证Java程序员通过JDBC实现对不同的数据库操作。
重点来了!!!!!
重点来了!!!!!
重点来了!!!!!
在Java程序中要操作数据库,一般应该通过如下几步(利用JDBC访问数据库的编程步骤),我们通过代码来进行讲解,代码如下:
/*引用必要的包
import java.sql.*;
它包含有操作数据库的各个类与接口
*/
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
/*
连接数据库
*/
public class Conn {
public static void main(String[] args) {
Connection con;
//jdbc驱动
String driver = "com.mysql.cj.jdbc.Driver";
/*
my_sentiment_analysis是数据库的名字
serverTimezone:覆盖时区的检测/映射。当服务器的时区为映射到Java时区时使用,
我在一开始没设置这个,就报错了
useUnicode=true:useuUnicode是否使用Unicode字符集,默认值为false,
如果参数characterEncoding设置为gb2312或gbk,本参数值必须设置为true
characterEncoding:当useUnicode设置为true时,指定字符编码。比如可设置为gb2312或gbk
*/
String url = "jdbc:mysql://localhost:3306/my_sentiment_analysis?serverTimezone=CTT&useUnicode=true&characterEncoding=utf-8";
String user = "root";
String password = "root";
try{
// 1)加载连接数据库的驱动程序
/*
采用Class.forName()方法显式地加载一个驱动程序类,由驱动程序负责向DriverManager
登记注册并在与数据库相连接时,DriverManager将使用此驱动程序
*/
Class.forName(driver);
// 2)建立与数据源的连接
con = DriverManager.getConnection(url, user, password);
if (!con.isClosed()){
System.out.println("数据库连接成功");
}
// 3)查询数据库:创建Statement对象并执行SQL语句以返回一个ResultSet对象。
Statement stmt = con.createStatement();
String sql;
sql = "select app_name,pos_num from comment_level_analysis";
ResultSet ret = stmt.executeQuery(sql);
// 4)获得当前记录集中的某一记录的各个字段的值
while(ret.next()){
String name = ret.getString("app_name");
int num = ret.getInt("pos_num");
System.out.println("软件名称:" + name);
System.out.println("积极数量:" + num);
}
// 5)关闭查询语句及与数据库的连接
con.close();
} catch (ClassNotFoundException e){
System.out.println("数据库驱动没有安装");
} catch (SQLException e){
e.printStackTrace();
System.out.println("数据库连接失败");
}
}
}
除此,再做一个拓展:
几种常见的数据库连接的URL写法
JDBC的URL=协议名+子协议名+数据源名。
a .协议名总是“jdbc”。
b .子协议名由JDBC驱动程序的编写者决定。
c .数据源名也可能包含用户与口令等信息;这些信息也可单独提供。
几种常见的数据库连接
1、Oracle
驱动:oracle.jdbc.driver.OracleDriver
URL:jdbc:oracle:thin:@machine_name:port:dbname
注:machine_name:数据库所在的机器的名称;
port:端口号,默认是1521
2、Mysql
驱动:com.mysql.jdbc.Driver
URL:jdbc:mysql://machine_name:port/dbname
注:machine_name:数据库所在的机器的名称;
port:端口号,默认3306
3、SQL Server
驱动:com.microsoft.jdbc.sqlserver.SQLServerDriver
URL:jdbc:microsoft:sqlserver://<machine_name><:port>;DatabaseName=
注:machine_name:数据库所在的机器的名称;
port:端口号,默认是1433
4、DB2
驱动:com.ibm.db2.jdbc.app.DB2Driver
URL:jdbc:db2://<machine_name><:port>/dbname
注:machine_name:数据库所在的机器的名称;
port:端口号,默认是5000