JDBC是一个Java应用程序接口,作用是封装了对数据库的各种操作。JDBC由类和接口组成,使用Java开发数据库应用都需要4个主要的接口:Driver、Connection、Statement、ResultSet,这些接口定义了使用SQL访问数据库的一般架构。
1、JDBC相关类和API
JDBC是一个Java应用程序接口,作用是封装了对数据库的各种操作。JDBC由类和接口组成,使用Java开发数据库应用都需要4个主要的接口:Driver、Connection、Statement、ResultSet,这些接口定义了使用SQL访问数据库的一般架构。
- Driver接口
Driver接口是所有JDBC程序必须实现的接口,该接口专门提供给数据库厂商使用。编写JDBC程序时,必须制定数据库驱动程序或类库加载到项目classpath中。
- DriverManager类
DriverManager用于加载JDBC驱动并创建与数据库的连接。其中定义了2个重要的静态方法:
DriverManager.registerDriver(Driver driver) // 用于向DeriverManager注册给定的JDBC驱动程序
DriverManager.getConnection(String url, String user, String pwd) // 建立与数据库的连接,返回表示连接的Connection对象
- Connection接口
Connection代表与数据库的连接,其中定义了一系列的方法:
Connection.getMetaData(); // 返回表示数据库元数据的DatabaseMetaData对象
Connection.createStatement(); // 创建一个Statement对象
Connection.prepareStatement(String sql); // 创建一个PreparedStatement对象
Connection.prepareCall(String sql); // 创建一个CallableStatement对象来调用数据库存储过程
- Statement接口
Statement接口用于向数据库发送SQL语句。
Statement.execute(String sql); // 执行各种SQL语句,返回一个boolean类型值,true表示执行的SQL语句具备查询结果,可通过Statement.getResultSet()方法获取
Statement.executeUpdate(String sql); // 执行SQL中的insert/update/delete语句,返回一个int值,表示受影响的记录的数目
Statement.executeQuery(String sql); // 执行SQL中的select语句,返回一个表示查询结果的ResultSet对象
- ResultSet接口
ResultSet.next(); // 将游标由当前位置移动到下一行
ResultSet.getString(String columnName); // 获取指定字段的String类型值
ResultSet.getString(int columnIndex); // 获取指定索引的String类型值
ResuleSet.previous(); // 将游标由当前位置移动到上一行
2、程序示例
数据库IP 192.168.1.150,数据库名称为test,数据表名称persion,表结构为:
JDBC连接MySQL程序示例
package jdbctest;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
/*
import java.sql.DriverManager;
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.Statement;
* */
public class DemoJDBC {
public static void main(String[] args) throws Exception{
// TODO Auto-generated method stub
//加载驱动类
Class.forName("com.mysql.jdbc.Driver");
//通过DriverManager 获取数据库连接
String url="jdbc:mysql://192.168.50.1/test";
String user= "root";
String password = "123456";
Connection connection= (Connection)DriverManager.getConnection(url, user, password);
//通过Connection对象获取Statement对象,Statement执行SQL语句
Statement statement = (Statement) connection.createStatement();
ResultSet resultSet=statement.executeQuery("select * from t_user");
//操作ResultSet的结果
while (resultSet.next()) {
//第一种获取字段的方式
System.out.println("FIRST--id:"+resultSet.getString(1)+",name:"+resultSet.getString(2)+",age:"+resultSet.getString(3));
System.out.println("SECOND--id:"+resultSet.getString("id")+",name:"+resultSet.getString("name")
+",age:"+resultSet.getString("age"));
}
//插入数据
int ret = statement.executeUpdate("insert into t_user values(3,'Jack',21)");
if(ret>0) {
System.out.println("----insert ok----");
resultSet=statement.executeQuery("select * from t_user");
while (resultSet.next()) {
//第一种获取字段的方式
System.out.println("SECOND--id:"+resultSet.getString("id")+",name:"+resultSet.getString("name")
+",age:"+resultSet.getString("age"));
}
}
connection.close();
statement.close();
resultSet.close();
}
}
执行结果:
JDBC使用PreparedStatement进行数据插入操作程序示例
package jdbctest;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import com.mysql.jdbc.PreparedStatement;
/*
import java.sql.DriverManager;
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.Statement;
* */
public class DemoJDBC2 {
public static void main(String[] args) throws Exception{
// TODO Auto-generated method stub
//加载驱动类
Class.forName("com.mysql.jdbc.Driver");
//通过DriverManager 获取数据库连接
String url="jdbc:mysql://192.168.50.1/test";
String user= "root";
String password = "123456";
Connection connection= (Connection)DriverManager.getConnection(url, user, password);
PreparedStatement statement=(PreparedStatement)connection.prepareStatement("insert into t_user values(?,?,?)");
statement.setInt(1, 4);
statement.setString(2, "Bob");
statement.setInt(3, 16);
statement.executeUpdate();
ResultSet resultSet=statement.executeQuery("select * from t_user");
while (resultSet.next()) {
//第一种获取字段的方式
System.out.println("SECOND--id:"+resultSet.getString("id")+",name:"+resultSet.getString("name")
+",age:"+resultSet.getString("age"));
}
connection.close();
statement.close();
resultSet.close();
}
}
运行结果:
JDBC数据类型
下表列出了默认的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 |
在JDBC3.0中增强支持BLOB
,CLOB
,ARRAY
,REF
等数据类型。ResultSet
对象可调用UPDATEBLOB()
,updateCLOB()
,updateArray()
和updateRef()
方法,使您可以在数据库服务器上直接操作相应的数据。
对于setXXX()
和updateXXX()
方法,可以转换成特定的Java类型到特定的JDBC数据类型。而使用setObject()
和updateObject()
方法,几乎所有的Java类型映射到JDBC数据类型。
ResultSet
对象提供相应的getXXX()
方法为每个数据类型来检索列值。每一种类型方法,可以使用与列名或由列的序号位置来获取列的数据。
SQL | JDBC/Java | setXXX | getXXX |
VARCHAR | java.lang.String | setString | getString |
CHAR | java.lang.String | setString | getString |
LONGVARCHAR | java.lang.String | setString | getString |
BIT | boolean | setBoolean | getBoolean |
NUMERIC | java.math.BigDecimal | setBigDecimal | getBigDecimal |
TINYINT | byte | setByte | getByte |
SMALLINT | short | setShort | getShort |
INTEGER | int | setInt | getInt |
BIGINT | long | setLong | getLong |
REAL | float | setFloat | getFloat |
FLOAT | float | setFloat | getFloat |
DOUBLE | double | setDouble | getDouble |
VARBINARY | byte[ ] | setBytes | getBytes |
BINARY | byte[ ] | setBytes | getBytes |
DATE | java.sql.Date | setDate | getDate |
TIME | java.sql.Time | setTime | getTime |
TIMESTAMP | java.sql.Timestamp | setTimestamp | getTimestamp |
CLOB | java.sql.Clob | setClob | getClob |
BLOB | java.sql.Blob | setBlob | getBlob |
ARRAY | java.sql.Array | setARRAY | getARRAY |
REF | java.sql.Ref | SetRef | getRef |
STRUCT | java.sql.Struct | SetStruct | getStruct |