@nextleaf
2018-09-10T04:28:42.000000Z
字数 5913
阅读 832
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 credentialsstatic final String USER = "root";static final String PASS = "pwd123456";tConnection conn = DriverManager.getConnection(DB_URL,USER,PASS);
执行一个查询
需要使用一个类型为Statement或PreparedStatement的对象,并提交一个SQL语句到数据库执行查询。如下:
//STEP 4: Execute a querystmt = 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 querystmt = conn.createStatement();String sql;sql = "DELETE FROM Employees";ResultSet rs = stmt.executeUpdate(sql);
从结果集中提取数据
可以使用适当的ResultSet.getXXX()方法来检索的数据结果如下:
//STEP 5: Extract data from result setwhile(rs.next()){//Retrieve by column nameint id = rs.getInt("id");int age = rs.getInt("age");String first = rs.getString("first");String last = rs.getString("last");//Display valuesSystem.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 environmentrs.close();stmt.close();conn.close();
//STEP 1. Import required packagespackage 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=truestatic 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 driverClass.forName(JDBC_DRIVER);//STEP 3: Open a connectionSystem.out.println("Connecting to database...");conn = DriverManager.getConnection(DB_URL, USER, PASS);//STEP 4: Execute a querySystem.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 setwhile (rs.next()) {//Retrieve by column nameint id = rs.getInt("id");int age = rs.getInt("age");String first = rs.getString("first");String last = rs.getString("last");//Display valuesSystem.out.print("ID: " + id);System.out.print(", Age: " + age);System.out.print(", First: " + first);System.out.println(", Last: " + last);}//STEP 6: Clean-up environmentrs.close();stmt.close();conn.close();} catch (SQLException se) {//Handle errors for JDBCse.printStackTrace();} catch (Exception e) {//Handle errors for Class.forNamee.printStackTrace();} finally {//finally block used to close resourcestry {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_nameSET 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