栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

JDBC base(基础入门)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JDBC base(基础入门)

1.驱动:

常用 Class.format(com.mysql.jdbc.Driver); //用来添加数据库驱动

其中com.mysql.jdbc.Driver是驱动的路径;

2.连接:

连接的前提是调用 java.sql.* 包中的API ;

用到的是 DriverManager类中的DriverManager.getConnection()方法

此方法中有三个参数:

1.数据库的地址

url:"jdbc:mysql://127.0.0.1:3306/db_jdbc_demo?characterEncoding=utf8&useSSL=false" ;`

用来连接本机的Mysql 数据库

2.数据库名字

name = “root”;

3.数据库密码

passwd= “123456”;

Connections conn = DriverManger.getConnection(url,name,passwd);

3.执行SQL语句

需要使用一个类型为Statement或PreparedStatement的对象,并提交一个SQL语句到数据库执行查询

Statement类型:

Statement stmt = conn.createStatement();

它是调用conn 方法里的 CreateStatement() 方法;

用String类型的数据写SQL 语句

String sql = “SELECt id, first, last, age FROM Employees”;

用到的ResultSet 接受结果集合

ResultSet rs = stmt. executQuery(sql);

如果输出打印结果的话 rs中用两个方法:

     while(rs.next()){       //rs.next(), 是否有下一个
         int id = rs.getInt("id"); // 用rs 中的 getXXX来取出该字段的内容,该字段什么类型的就用 java什么类型的数据接受 
         System.out.println("id:" +id);
     }

PreparedStatement类型:

 import java.sql.Connection;
 import java.sql.DriverManager;
 import java.sql.PreparedStatement;
 import java.sql.SQLException;
 import java.util.Scanner;
 public class Demo07 {
     public static void main(String[] args) {
             //有本机默认地址
         String url = "jdbc:mysql://127.0.0.1:3306/db_jdbc_demo?characterEncoding=utf8&useSSL=false";
         String name = "root";
         String passwd="123456";
         Connection conn = null;
         PreparedStatement pstmt = null;
         Scanner sc = new Scanner(System.in);
         int idFK = 0;
         int idSK = 0;
         double money = 0;int result = 0;
         System.out.print("请输入付款方ID号");
         idFK = sc.nextInt();
         System.out.print("请输入收款方ID号");
         idSK = sc.nextInt();
         System.out.print("转账金额");
         money = sc.nextDouble();
         try{
             String sql1 = "UPDATe into t_emp SET salary = salary-? WHERe id = ?";
             String sql2 = "UPDATE into t_emp SET salary = salary+? WHERe id = ?";
 ​
             Class.forName("com.mysql.jdbc.Driver");
             //获取连接后要开启事物(Mysql 默认自动提交)
             conn = DriverManager.getConnection(url,name,passwd);
             conn.setAutoCommit(false);
 ​
             pstmt = conn.prepareStatement(sql1);
 ​
             pstmt.setInt(2,idFK);
             pstmt.setDouble(1,money);
 ​
             pstmt = conn.prepareStatement(sql2);
 ​
             pstmt.setInt(2,idSK);
             pstmt.setDouble(1,money);
 ​
 ​
             result += pstmt.executeUpdate();//执行代码 :更新
                 if (result==2){
 ​
                     System.out.println("修改成功");
                     conn.commit();
                 }else{
                     System.out.println("修改失败");
 ​
                 }
             System.out.println(result);
         }catch (Exception e){
                 e.printStackTrace();
             System.out.println("转账异常,正在回滚数据");
             try {
                 conn.rollback();
             } catch (SQLException ex) {
                 ex.printStackTrace();
             }
         }finally {
             if(conn!=null){
                 try {
                     conn.close();
                 } catch (SQLException e) {
                     e.printStackTrace();
                 }finally {
                     conn = null;
                 }
             }
             if (pstmt!=null){
                 try {
                     pstmt.close();
                 } catch (SQLException e) {
                     e.printStackTrace();
                 }finally {
                     pstmt=null;
                 }
             }
         }
 ​
     }
 }
 ​

先pstmt = conn.prepareStatement(sql1); 导入一个sql语句 SQL 中 的字段 可以 用 ?来进行占位

用 pstmt 中的setXXX()方法来进行填充,该方法有两个参数:

第一个参数是该SQL语句中第几个问号

第二个参数是该SQL语句中所填充的字段

XXX代表的是字段的数据类型

如果要执行一个SQL语句:UPDATE,INSERT或DELETE语句,那么需要下面的代码片段:

 System.out.println("Creating statement...");
 stmt = conn.createStatement();
 String sql;
 sql = "DELETE FROM Employees";
 ResultSet rs = stmt.executeUpdate(sql);

主要的是 ResultSet 返回值:

如果成功了 RestlutSet 中 的rs 的值就为1 ;

executeUpdate(sql) , 他用来执行DML语句,

返回值是受影响的行数;int 类型

executeQuery(sql) ,他用来实行DQL查询语句,

返回值是ResultSet 集合,

4.JDBC事务

1.首先要关闭自动提交(因为 默认是自动提交,不管成功还是失败)

首先调用conn 方法中的 setAutoCommit(false);关闭自动提交

2.提交:

conn.commit();

如果正常运行了,没发生什么错误 就提交到数据库;

3.回滚:

conn.rollback();

如果系统发生异常,就回滚可以设置使用保存点,使之混滚到保存点;

保存点:

setSavepoint(String savepointName): - 定义新的保存点,它还返回一个Savepoint对象。

releaseSavepoint(Savepoint savepointName): - 删除保存点。要注意,它需要一个Savepoint对象作为参数。 该对象通常是 由setSavepoint()方法生成的保存点。

 try{
    //Assume a valid connection object conn
    conn.setAutoCommit(false);
    Statement stmt = conn.createStatement();
 ​
    //set a Savepoint
    Savepoint savepoint1 = conn.setSavepoint("Savepoint1");
    String SQL = "INSERT INTO Employees " +
                 "VALUES (106, 24, 'Curry', 'Stephen')";
    stmt.executeUpdate(SQL);  
    //Submit a malformed SQL statement that breaks
    String SQL = "INSERTED IN Employees " +
                 "VALUES (107, 32, 'Kobe', 'Bryant')";
    stmt.executeUpdate(SQL);
    // If there is no error, commit the changes.
    conn.commit();
 ​
 }catch(SQLException se){
    // If there is any error.
    conn.rollback(savepoint1);
 }
 ​

实例:

 import java.sql.Connection;
 import java.sql.DriverManager;
 import java.sql.PreparedStatement;
 import java.sql.SQLException;
 import java.util.Scanner;
 public class Demo07 {
     public static void main(String[] args) {
             //有本机默认地址
         String url = "jdbc:mysql://127.0.0.1:3306/db_jdbc_demo?characterEncoding=utf8&useSSL=false";
         String name = "root";
         String passwd="123456";
         Connection conn = null;
         PreparedStatement pstmt = null;
         Scanner sc = new Scanner(System.in);
         int idFK = 0;
         int idSK = 0;
         double money = 0;int result = 0;
         System.out.print("请输入付款方ID号");
         idFK = sc.nextInt();
         System.out.print("请输入收款方ID号");
         idSK = sc.nextInt();
         System.out.print("转账金额");
         money = sc.nextDouble();
         try{
             String sql1 = "UPDATE into t_emp SET salary = salary-? WHERe id = ?";
             String sql2 = "UPDATE into t_emp SET salary = salary+? WHERe id = ?";
 ​
             Class.forName("com.mysql.jdbc.Driver");
             //获取连接后要开启事物(Mysql 默认自动提交)
             conn = DriverManager.getConnection(url,name,passwd);
             conn.setAutoCommit(false);
 ​
             pstmt = conn.prepareStatement(sql1);
 ​
             pstmt.setInt(2,idFK);
             pstmt.setDouble(1,money);
 ​
             pstmt = conn.prepareStatement(sql2);
 ​
             pstmt.setInt(2,idSK);
             pstmt.setDouble(1,money);
 ​
 ​
             result += pstmt.executeUpdate();//执行代码 :更新
                 if (result==2){
 ​
                     System.out.println("修改成功");
                     conn.commit();
                 }else{
                     System.out.println("修改失败");
 ​
                 }
             System.out.println(result);
         }catch (Exception e){
                 e.printStackTrace();
             System.out.println("转账异常,正在回滚数据");
             try {
                 conn.rollback();
             } catch (SQLException ex) {
                 ex.printStackTrace();
             }
         }finally {
             if(conn!=null){
                 try {
                     conn.close();
                 } catch (SQLException e) {
                     e.printStackTrace();
                 }finally {
                     conn = null;
                 }
             }
             if (pstmt!=null){
                 try {
                     pstmt.close();
                 } catch (SQLException e) {
                     e.printStackTrace();
                 }finally {
                     pstmt=null;
                 }
             }
         }
 ​
     }
 }
 ​

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/936518.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号