JDBC
JDBC什么是JDBC
JDBC 的使用
JDBC 的数据类型
什么是JDBC
JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序,同时,JDBC也是个商标名。
JDBC 的使用
建立一个JDBC应用程序,本教程中以Java连接MySQL为一个示例:
- 导入包,在程序中包含数据库编程所需的JDBC类。大多数情况下,使用 import java.sql.*
import java.sql.*;
- 注册JDBC驱动程序,需要初始化驱动程序,这样就可以打开与数据库的通信。
Class.forName("com.mysql.jdbc.Driver");
- 打开一个连接,使用DriverManager.getConnection()方法来创建一个Connection对象,它代表一个数据库的物理连接。
static final String USER = "root"; //用户名
static final String PASS = "pwd123456"; //密码
System.out.println("Connecting to database...");
conn = DriverManager.getConnection(DB_URL,USER,PASS); //上面的名字可以自定义的 但是这里要写对
4.执行一个查询, 需要使用一个类型为Statement或PreparedStatement的对象,并提交一个SQL语句到数据库执行查询。
System.out.println("Creating statement...");
stmt = conn.createStatement();
String sql;
sql = "SELECT id, first, last, age FROM Employees";
ResultSet rs = stmt.executeQuery(sql);
如果要执行一个SQL语句:UPDATE,INSERT或DELETE语句,那么需要下面的代码:
System.out.println("Creating statement...");
stmt = conn.createStatement();
String sql;
sql = "DELETE FROM Employees";
ResultSet rs = stmt.executeUpdate(sql);
- 获取结果,可以使用适当的ResultSet.getXXX()方法来检索的数据结果。
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的垃圾收集。
rs.close();
stmt.close();
conn.close();
- 完整示例。
// 1.
import java.sql.*;
public class FirstExample {
//注册驱动
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost/test";
//数据库名和密码自己修改
static final String USER = "username";
static final String PASS = "password";
public static void main(String[] args) {
Connection conn = null;
Statement stmt = null;
try{
// 2.
Class.forName("com.mysql.jdbc.Driver");
//3.
conn = DriverManager.getConnection(DB_URL,USER,PASS);
//4.
stmt = conn.createStatement();
String sql;
sql = "SELECT id, first, last, age FROM Employees";
ResultSet rs = stmt.executeQuery(sql);
//5.
while(rs.next()){
int id = rs.getInt("id");
int age = rs.getInt("age");
String first = rs.getString("first");
String last = rs.getString("last");
System.out.print("ID: " + id);
System.out.print(", Age: " + age);
System.out.print(", First: " + first);
System.out.println(", Last: " + last);
}
//6.
rs.close();
stmt.close();
conn.close();
}catch(SQLException se){
// 异常不要这么处理 不好,要携带异常描述和原因。有日志要用日志输出。
se.printStackTrace();
}catch(Exception e){
e.printStackTrace();// 同上
}finally{
try{
if(stmt!=null)
stmt.close();
}catch(SQLException se2){
//自定义后续处理,这里不写了
}
try{
if(conn!=null)
conn.close();
}catch(SQLException se){
se.printStackTrace();
}
}
}
}
JDBC 的数据类型
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 |
在JDBC3.0中增强支持BLOB,CLOB,ARRAY,REF等数据类型。ResultSet对象可调用UPDATEBLOB(),updateCLOB(),updateArray()和updateRef()方法,使您可以在数据库服务器上直接操作相应的数据。
对于setXXX()和updateXXX()方法,可以转换成特定的Java类型到特定的JDBC数据类型。而使用setObject()和updateObject()方法,几乎所有的Java类型映射到JDBC数据类型。
ResultSet对象提供相应的getXXX()方法为每个数据类型来检索列值。每一种类型方法,可以使用与列名或由列的序号位置来获取列的数据。