JAVA JDBC--源自技术

简介:

     JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口(Hibernate,Mybatis等ORM框架),使数据库开发人员能够编写数据库应用程序

 

标准组件

Connection:链接(会话)对象。

DriverManager:驱动程序管理对象,用来创建会话。

Statement:SQL语句执行对象。

PreparedStatement:动态SQL语句执行对象。

CallableStatement:事务执行对象。

 

示例代码

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. import java.sql.Connection;  
  2. import java.sql.DriverManager;  
  3. import java.sql.PreparedStatement;  
  4. import java.sql.ResultSet;  
  5. import java.sql.SQLException;  
  6. import java.sql.Statement;  
  7.   
  8. /** 
  9.    JDBC API 
  10.  */  
  11. public class DataBase {  
  12.       
  13.     String driverName = "com.mysql.jdbc.Driver";  
  14.     String url = "jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8";  
  15.     String userName = "root";  
  16.     String pwd = "root";  
  17.       
  18.     public Connection getConnection(){  
  19.         /*加载驱动程序*/  
  20.         try {  
  21.             Class.forName(driverName);  
  22.         } catch (ClassNotFoundException e) {  
  23.             System.out.println("加载驱动程序错误!");  
  24.         }   
  25.         Connection connection;  
  26.         /* 创建链接  */  
  27.         try {  
  28.             connection = DriverManager.getConnection(url,userName,pwd);  
  29.               
  30.         } catch (Exception e) {  
  31.             connection = null;  
  32.             System.out.println("创建链接错误!");  
  33.         }  
  34.         return connection;  
  35.     }  
  36.       
  37.     public void createTable(){  
  38.         Connection connection = getConnection();  
  39.         try {  
  40.             /* SQL语句执行对象*/  
  41.             Statement statement;  
  42.             String createTable;  
  43.             statement = connection.createStatement();  
  44.             createTable = "CREATE TABLE USER(id BIGINT NOT NULL ,NAME TEXT,PRIMARY KEY (id))";  
  45.             statement.executeUpdate(createTable);  
  46.         } catch (SQLException e) {  
  47.             System.out.println("执行SQL错误!");  
  48.         }  
  49.     }  
  50.       
  51.     public void inserTableData(){  
  52.         Connection connection = getConnection();  
  53.         try {  
  54.             /* 动态SQL语句执行对象*/  
  55.             PreparedStatement statement;  
  56.             String insertTable;  
  57.             insertTable = "INSERT INTO USER(id,NAME)VALUES(?,?)";  
  58.             statement = connection.prepareStatement(insertTable);  
  59.             /* 参数下标从1开始 */  
  60.             statement.setInt(11);  
  61.             statement.setString(2"李连杰");  
  62.             statement.executeUpdate();  
  63.         } catch (SQLException e) {  
  64.             e.printStackTrace();  
  65.             System.out.println("执行SQL错误!");  
  66.         }  
  67.     }  
  68.       
  69.     public void findTableData(){  
  70.         Connection connection = getConnection();  
  71.         try {  
  72.             /* SQL语句执行对象*/  
  73.             Statement statement;  
  74.             String findTableData;  
  75.             statement = connection.createStatement();  
  76.             findTableData = "SELECT id,NAME FROM USER";  
  77.             ResultSet resultSet = statement.executeQuery(findTableData);  
  78.             /*遍历ResultSet*/  
  79.             while (resultSet.next()==true) {  
  80.                 /* 取值支持下标和列名两种方式,下标从1开始 */  
  81.                 int id = resultSet.getInt(1);  
  82.                 String name = resultSet.getString("NAME");  
  83.                 System.out.println("id:"+id+" name:"+name);  
  84.             }  
  85.         } catch (SQLException e) {  
  86.             e.printStackTrace();  
  87.             System.out.println("执行SQL错误!");  
  88.         }  
  89.     }  
  90.       
  91.     public void updateResultSet(){  
  92.         Connection connection = getConnection();  
  93.         try {  
  94.             /* SQL语句执行对象*/  
  95.             Statement statement;  
  96.             String findTableData;  
  97.               
  98.             /* 
  99.              * ResultSet对象:默认的 不可更新,仅有一个向前移动的指针。因此,只能迭代它一次, 并且只能按从第一行到 
  100.              *      最后一行的顺序进行。通过在创建是指定类型参数可以生成可滚动和可更新的 ResultSet对象。 
  101.              */  
  102.             statement = connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);  
  103.             findTableData = "SELECT id,NAME FROM USER";  
  104.               
  105.             /*修改结果集*/  
  106.             ResultSet resultSet = statement.executeQuery(findTableData);  
  107.             resultSet.absolute(1);  
  108.             resultSet.updateString(2"成龙");  
  109.             resultSet.updateRow();  
  110.             /*删除结果集*/  
  111.             resultSet.deleteRow();  
  112.         } catch (SQLException e) {  
  113.             e.printStackTrace();  
  114.             System.out.println("执行SQL错误!");  
  115.         }  
  116.     }  
  117.       
  118.     public void transaction(){  
  119.         Connection connection = getConnection();  
  120.         try {  
  121.             /*设置自动提交:false关闭自动提交,true开启自动提交,设置为false相当于开始事务*/  
  122.             connection.setAutoCommit(false);  
  123.             /*JDBC根据数据库提供的默认值来设置事务支持及其加锁 
  124.             TRANSACTION_NONE:是Oracle中数据库驱动对事务处理的默认值,即不支持事务操作,所以需要在程序中手动进行设置。 
  125.             TRANSACTION_READ_UNCOMMITTED:适用于只涉及到数据库的查询操作; 
  126.             TRANSACTION_READ_COMMITTED:适用于数据查询远多于更新的操作; 
  127.             TRANSACTION_REPEATABLE_READ:适用于更新操作较多; 
  128.             TRANSACTION_SERIALIZABLE:适用于数据一致性要求更高的场合,由于涉及到表加锁,因此会对程序运行效率产生较大的影响。 
  129.             */  
  130.             connection.setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED);  
  131.             /*提交事务*/  
  132.             connection.commit();  
  133.         } catch (SQLException e) {  
  134.             System.out.println("交事务失败!");  
  135.             try {  
  136.                 connection.rollback();  
  137.             } catch (SQLException e1) {  
  138.                 System.out.println("关闭事务失败!");  
  139.             }  
  140.         }  
  141.     }  
  142.       
  143.     public void findStoredProcedure(){  
  144. //      Connection connection = getConnection();  
  145. //      try {  
  146. //          /* 存储过程执行对象  */  
  147. //          CallableStatement prepareCall = connection.prepareCall("{call findUser}");  
  148. //      } catch (SQLException e) {  
  149. //          System.out.println("执行存储过程错误!");  
  150. //      }  
  151.     }  
  152.       
  153.     public static void main(String[] args) {  
  154.         DataBase dataBase = new DataBase();  
  155. //      dataBase.createTable();  
  156. //      dataBase.inserTableData();  
  157. //      dataBase.findTableData();  
  158. //      dataBase.updateResultSet();  
  159.         dataBase.transaction();  
  160.     }  

 

 借鉴博文:百度百科

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值