@nextleaf
2018-09-10T12:28:42.000000Z
字数 5913
阅读 729
Java
JDBC
星期五
Java 数据库连接,(Java Database Connectivity,简称JDBC)是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。它JDBC是面向关系型数据库的。
JDBC API提供了以下接口和类:
DriverManager: 这个类管理数据库驱动程序的列表。确定内容是否符合从Java应用程序使用的通信子协议正确的数据库驱动程序的连接请求。识别JDBC在一定子协议的第一个驱动器将被用来建立数据库连接。
Driver: 此接口处理与数据库服务器通信。很少直接直接使用驱动程序(Driver)对象,一般使用DriverManager中的对象,它用于管理此类型的对象。它也抽象与驱动程序对象工作相关的详细信息
Connection : 此接口与接触数据库的所有方法。连接对象表示通信上下文,即,与数据库中的所有的通信是通过此唯一的连接对象。
Statement : 可以使用这个接口创建的对象的SQL语句提交到数据库。一些派生的接口接受除执行存储过程的参数。
ResultSet: 这些对象保存从数据库后,执行使用Statement对象的SQL查询中检索数据。它作为一个迭代器,可以通过移动它来检索下一个数据。
SQLException: 这个类用于处理发生在数据库应用程序中的任何错误。
JDBC 架构
分为双层架构和三层架构。
导入包:
import java.sql.*;
java.sql和javax.sql是JDBC 4.0的主要包。下载MySQL连接器
注册JDBC驱动程序
需要初始化驱动程序,这样就可以打开与数据库的通信。以下是代码片段实现这一目标:
Class.forName("com.mysql.jdbc.Driver");
//Class.forName("oracle.jdbc.OracleDriver");
//String url="jdbc:oracle:thin:@localhost:1521:orcl";
//String username="orcl";
//String password="123456";
打开一个连接
使用DriverManager.getConnection()
方法来创建一个Connection
对象,它代表一个数据库的物理连接,如下所示:
//STEP 3: Open a connection
// Database credentials
static final String USER = "root";
static final String PASS = "pwd123456";
tConnection conn = DriverManager.getConnection(DB_URL,USER,PASS);
执行一个查询
需要使用一个类型为Statement
或PreparedStatement
的对象,并提交一个SQL语句到数据库执行查询。如下:
//STEP 4: Execute a query
stmt = conn.createStatement();
//connection.prepareStatement(sql)//PreparedStatement可以防止注入攻击
String sql;
sql = "SELECT id, first, last, age FROM Employees";
ResultSet rs = stmt.executeQuery(sql);
如果要执行一个SQL语句:UPDATE
,INSERT
或DELETE
语句,那么需要下面的代码片段:
//STEP 4: Execute a query
stmt = conn.createStatement();
String sql;
sql = "DELETE FROM Employees";
ResultSet rs = stmt.executeUpdate(sql);
从结果集中提取数据
可以使用适当的ResultSet.getXXX()
方法来检索的数据结果如下:
//STEP 5: Extract data from result set
while(rs.next()){
//Retrieve by column name
int id = rs.getInt("id");
int age = rs.getInt("age");
String first = rs.getString("first");
String last = rs.getString("last");
//Display values
System.out.print("ID: " + id);
System.out.print(", Age: " + age);
System.out.print(", First: " + first);
System.out.println(", Last: " + last);
}
清理环境资源
在使用JDBC与数据交互操作数据库中的数据后,应该明确地关闭所有的数据库资源以减少资源的浪费,对依赖于JVM的垃圾收集如下:
//STEP 6: Clean-up environment
rs.close();
stmt.close();
conn.close();
//STEP 1. Import required packages
package com.nl.sx910.jdbc;
import java.sql.*;
/**
* Created with IntelliJ IDEA 2018.
* Description:JDBC模板
*
* @author: 黄昭鸿
* @date: 2018-09-10
* Time: 9:19
*/
public class JDBCExample {
// JDBC driver name and database URLjdbc:mysql://localhost:3306/
static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver";
//&allowPublicKeyRetrieval=true
static final String DB_URL = "jdbc:mysql://localhost:3306/javabasedemo?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useSSL=false";
// Database credentials -- 数据库名和密码自己修改
static final String USER = "root";
static final String PASS = "Huang...";
public static void main(String[] args) {
Connection conn = null;
Statement stmt = null;
try {
//STEP 2: Register JDBC driver
Class.forName(JDBC_DRIVER);
//STEP 3: Open a connection
System.out.println("Connecting to database...");
conn = DriverManager.getConnection(DB_URL, USER, PASS);
//STEP 4: Execute a query
System.out.println("Creating statement...");
stmt = conn.createStatement();
String sql;
sql = "SELECT id, first, last, age FROM employees";
ResultSet rs = stmt.executeQuery(sql);
//STEP 5: Extract data from result set
while (rs.next()) {
//Retrieve by column name
int id = rs.getInt("id");
int age = rs.getInt("age");
String first = rs.getString("first");
String last = rs.getString("last");
//Display values
System.out.print("ID: " + id);
System.out.print(", Age: " + age);
System.out.print(", First: " + first);
System.out.println(", Last: " + last);
}
//STEP 6: Clean-up environment
rs.close();
stmt.close();
conn.close();
} catch (SQLException se) {
//Handle errors for JDBC
se.printStackTrace();
} catch (Exception e) {
//Handle errors for Class.forName
e.printStackTrace();
} finally {
//finally block used to close resources
try {
if (stmt != null) {
stmt.close();
}
} catch (SQLException ignored) {}
try {
if (conn != null) {
conn.close();
}
} catch (SQLException se) {
se.printStackTrace();
}
}
System.out.println("Goodbye!");
}
}
下表列出了默认的JDBC数据类型与Java数据类型转换,当使用PreparedStatement或CallableStatement对象时可调用setXXX()方法或ResultSet.updateXXX()方法。
SQL | JDBC/Java | setXXX | updateXXX |
---|---|---|---|
VARCHAR | java.lang.String | setString | updateString |
CHAR | java.lang.String | setString | updateString |
LONGVARCHAR | java.lang.String | setString | updateString |
BIT | boolean | setBoolean | updateBoolean |
NUMERIC | java.math.BigDecimal | setBigDecimal | updateBigDecimal |
TINYINT | byte | setByte | updateByte |
SMALLINT | short | setShort | updateShort |
INTEGER | int | setInt | updateInt |
BIGINT | long | setLong | updateLong |
REAL | float | setFloat | updateFloat |
FLOAT | float | setFloat | updateFloat |
DOUBLE | double | setDouble | updateDouble |
VARBINARY | byte[ ] | setBytes | updateBytes |
BINARY | byte[ ] | setBytes | updateBytes |
DATE | java.sql.Date | setDate | updateDate |
TIME | java.sql.Time | setTime | updateTime |
TIMESTAMP | java.sql.Timestamp | setTimestamp | updateTimestamp |
CLOB | java.sql.Clob | setClob | updateClob |
BLOB | java.sql.Blob | setBlob | updateBlob |
ARRAY | java.sql.Array | setARRAY | updateARRAY |
REF | java.sql.Ref | SetRef | updateRef |
STRUCT | java.sql.Struct | SetStruct | updateStruct |
结构化查询语言(SQL)是一种标准化语言,允许对数据库执行操作
1.0 创建数据库
CREATE DATABASE
语句用于创建新的数据库。 语法是 -
SQL> CREATE DATABASE DATABASE_NAME;
示例
以下SQL语句创建一个名为EMP的数据库 -
SQL> CREATE DATABASE EMP;
2.0 删除数据库
DROP DATABASE
语句用于删除存在的数据库。
注意:要创建或删除数据库,需要有数据库服务器的管理员权限。 需要特别小心的是:删除数据库将丢失数据库中存储的所有数据(无法恢复)。
3.0 创建表
CREATE TABLE语句用于创建新表。 语法是 -
SQL> CREATE TABLE table_name
(
column_name column_data_type,
column_name column_data_type,
column_name column_data_type
...
);
以下SQL语句创建一个名为Employees的表,其中包含四列:
SQL> CREATE TABLE Employees
(
id INT NOT NULL,
age INT NOT NULL,
first VARCHAR(255),
last VARCHAR(255),
PRIMARY KEY ( id )
);
4.0 删除表
DROP TABLE
语句用于删除存在的表
5.0 INSERT数据
SQL> INSERT INTO table_name VALUES (column1, column2, ...);
6.0 查询数据
在上篇日志
7.0 更新数据
UPDATE
语句用于更新数据。 UPDATE的语法是 -
SQL> UPDATE table_name
SET column_name = value, column_name = value, ...
WHERE conditions;
UPDATE
示例:
SQL> UPDATE Employees SET age=20 WHERE id=100;
8.0 删除数据
DELETE
语句用于从表中删除数据。 DELETE的语法是 -
SQL> DELETE FROM table_name WHERE conditions;
WHERE子句可以使用比较运算符,例如:=,!=,<,>,<=和>=,以及BETWEEN和LIKE运算符。
DELETE
示例,以下SQL DELETE语句将删除ID为100的员工的记录 -
SQL> DELETE FROM Employees WHERE id=100;
启动MySQL服务
sudo systemctl start mysql.service
查看Mysql相关进程
sudo ps -A | grep -i mysql
连接到mysql数据库
mysql -u root -p
//然后输入密码
查看数据库列表
show databases;
使用某数据库
use xxx
退出
quit