简介:
JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口(Hibernate,Mybatis等ORM框架),使数据库开发人员能够编写数据库应用程序。
标准组件
Connection:链接(会话)对象。
DriverManager:驱动程序管理对象,用来创建会话。
Statement:SQL语句执行对象。
PreparedStatement:动态SQL语句执行对象。
CallableStatement:事务执行对象。
示例代码
- import java.sql.Connection;
- import java.sql.DriverManager;
- import java.sql.PreparedStatement;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- import java.sql.Statement;
- /**
- JDBC API
- */
- public class DataBase {
- String driverName = "com.mysql.jdbc.Driver";
- String url = "jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8";
- String userName = "root";
- String pwd = "root";
- public Connection getConnection(){
- /*加载驱动程序*/
- try {
- Class.forName(driverName);
- } catch (ClassNotFoundException e) {
- System.out.println("加载驱动程序错误!");
- }
- Connection connection;
- /* 创建链接 */
- try {
- connection = DriverManager.getConnection(url,userName,pwd);
- } catch (Exception e) {
- connection = null;
- System.out.println("创建链接错误!");
- }
- return connection;
- }
- public void createTable(){
- Connection connection = getConnection();
- try {
- /* SQL语句执行对象*/
- Statement statement;
- String createTable;
- statement = connection.createStatement();
- createTable = "CREATE TABLE USER(id BIGINT NOT NULL ,NAME TEXT,PRIMARY KEY (id))";
- statement.executeUpdate(createTable);
- } catch (SQLException e) {
- System.out.println("执行SQL错误!");
- }
- }
- public void inserTableData(){
- Connection connection = getConnection();
- try {
- /* 动态SQL语句执行对象*/
- PreparedStatement statement;
- String insertTable;
- insertTable = "INSERT INTO USER(id,NAME)VALUES(?,?)";
- statement = connection.prepareStatement(insertTable);
- /* 参数下标从1开始 */
- statement.setInt(1, 1);
- statement.setString(2, "李连杰");
- statement.executeUpdate();
- } catch (SQLException e) {
- e.printStackTrace();
- System.out.println("执行SQL错误!");
- }
- }
- public void findTableData(){
- Connection connection = getConnection();
- try {
- /* SQL语句执行对象*/
- Statement statement;
- String findTableData;
- statement = connection.createStatement();
- findTableData = "SELECT id,NAME FROM USER";
- ResultSet resultSet = statement.executeQuery(findTableData);
- /*遍历ResultSet*/
- while (resultSet.next()==true) {
- /* 取值支持下标和列名两种方式,下标从1开始 */
- int id = resultSet.getInt(1);
- String name = resultSet.getString("NAME");
- System.out.println("id:"+id+" name:"+name);
- }
- } catch (SQLException e) {
- e.printStackTrace();
- System.out.println("执行SQL错误!");
- }
- }
- public void updateResultSet(){
- Connection connection = getConnection();
- try {
- /* SQL语句执行对象*/
- Statement statement;
- String findTableData;
- /*
- * ResultSet对象:默认的 不可更新,仅有一个向前移动的指针。因此,只能迭代它一次, 并且只能按从第一行到
- * 最后一行的顺序进行。通过在创建是指定类型参数可以生成可滚动和可更新的 ResultSet对象。
- */
- statement = connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
- findTableData = "SELECT id,NAME FROM USER";
- /*修改结果集*/
- ResultSet resultSet = statement.executeQuery(findTableData);
- resultSet.absolute(1);
- resultSet.updateString(2, "成龙");
- resultSet.updateRow();
- /*删除结果集*/
- resultSet.deleteRow();
- } catch (SQLException e) {
- e.printStackTrace();
- System.out.println("执行SQL错误!");
- }
- }
- public void transaction(){
- Connection connection = getConnection();
- try {
- /*设置自动提交:false关闭自动提交,true开启自动提交,设置为false相当于开始事务*/
- connection.setAutoCommit(false);
- /*JDBC根据数据库提供的默认值来设置事务支持及其加锁
- TRANSACTION_NONE:是Oracle中数据库驱动对事务处理的默认值,即不支持事务操作,所以需要在程序中手动进行设置。
- TRANSACTION_READ_UNCOMMITTED:适用于只涉及到数据库的查询操作;
- TRANSACTION_READ_COMMITTED:适用于数据查询远多于更新的操作;
- TRANSACTION_REPEATABLE_READ:适用于更新操作较多;
- TRANSACTION_SERIALIZABLE:适用于数据一致性要求更高的场合,由于涉及到表加锁,因此会对程序运行效率产生较大的影响。
- */
- connection.setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED);
- /*提交事务*/
- connection.commit();
- } catch (SQLException e) {
- System.out.println("交事务失败!");
- try {
- connection.rollback();
- } catch (SQLException e1) {
- System.out.println("关闭事务失败!");
- }
- }
- }
- public void findStoredProcedure(){
- // Connection connection = getConnection();
- // try {
- // /* 存储过程执行对象 */
- // CallableStatement prepareCall = connection.prepareCall("{call findUser}");
- // } catch (SQLException e) {
- // System.out.println("执行存储过程错误!");
- // }
- }
- public static void main(String[] args) {
- DataBase dataBase = new DataBase();
- // dataBase.createTable();
- // dataBase.inserTableData();
- // dataBase.findTableData();
- // dataBase.updateResultSet();
- dataBase.transaction();
- }
借鉴博文:百度百科