博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java学习之JDBC
阅读量:4972 次
发布时间:2019-06-12

本文共 5383 字,大约阅读时间需要 17 分钟。

  之前学习了数据库原理,上学期也学了oracle数据库,我的学习视频上是讲的mysql数据库,其实都差不多,复习了下sql知识,数据库的学习就没有写下来了,就从Java怎么操作数据库开始吧。

  因为这年过完了,开始新的学习,有时间边学边写了。其实JDBC网上教程挺多的,我看视频学习的笔记都尽量写在代码里了。就直接上代码吧。

1 package com.gh;  2   3 import java.sql.Connection;  4 import java.sql.DriverManager;  5 import java.sql.PreparedStatement;  6 import java.sql.ResultSet;  7 import java.sql.SQLException;  8 import java.sql.Statement;  9 /** 10  * PreparedStatement的setDate类是java.sql包里的Date 11  * ResultSet 的getDate还回一个java.sql.Date 12  * sql.Date是util.Date的子类 可以直接转util.Date 13  * util.Date转sql.Date可以 new sql.Date(new util.Date().getTime()); 14  * @author ganhang 15  * 16  */ 17 public class JdbcDemo { 18     //驱动类 19     public static String Driver="oracle.jdbc.OracleDriver"; 20     //数据库地址 21     public static String url="jdbc:oracle:thin:@localhost:1521:orcl"; 22     //数据库用户名 23     public static String user="scott"; 24     //数据库密码 25     public static String password="."; 26     /** 27      * 查找 28      */ 29     public static void find(){ 30         try { 31             Class.forName(Driver); 32             Connection conn=DriverManager.getConnection(url, user, password); 33             String sql="select * from test"; 34             PreparedStatement ps=conn.prepareStatement(sql);//不要用Stateme ,有sql注入问题,不安全 35             ResultSet rs=ps.executeQuery();//返回结果集(实际上是引用) 36             while(rs.next()){ 37                 System.out.println(rs.getInt(1)); 38             } 39             rs.close(); 40             ps.close(); 41             conn.close(); 42             System.out.println("success!"); 43         } catch (ClassNotFoundException e) { 44             e.printStackTrace(); 45         } catch (SQLException e) { 46             e.printStackTrace(); 47         } 48     } 49     /** 50      * jdbc事务处理 51      * 处理多条sql语句(运行sql脚本) 52      */ 53     public static void update(){ 54         /** 55          * 这里我发现如果想用addBatch()方法添加批处理命令只能用Statement接口 56          * 而且addBatch()方法不能添加查询语句 57          * 如果用PreparedStatement只能单独执行一句sql 58          */ 59         Connection conn=null; 60         try { 61             Class.forName(Driver); 62             conn=DriverManager.getConnection(url, user, password); 63             conn.setAutoCommit(false);//改为手动commit 64             Statement ps=conn.createStatement(); 65             String sql1="insert into test values(16)"; 66             //PreparedStatement ps=conn.prepareStatement(sql1); 67             //ps.addBatch(); 68             ps.addBatch(sql1); 69             //String sql2="update test set n=17 where n=16"; 70             String sql2="delete from test where n=1"; 71             //ps=conn.prepareStatement(sql2); 72             ps.addBatch(sql2); 73             ps.executeBatch(); 74             //懒得数据库去查询。。。直接这边输出 75             //ps=conn.prepareStatement(sql3); 76             String sql3="select * from test"; 77             ResultSet rs=ps.executeQuery(sql3); 78             while(rs.next()){ 79                 System.out.println(rs.getInt(1)); 80             } 81             conn.commit();//提交事务 82             ps.close(); 83             conn.close(); 84         } catch (ClassNotFoundException | SQLException e) { 85             e.printStackTrace(); 86             try { 87                 conn.rollback(); 88             } catch (SQLException e1) { 89                 e1.printStackTrace(); 90             } 91         } 92          93     } 94     //Statement实现,不安全 95     public static void insert(){
//更新删除只改sql就可以 96 try { 97 //加载驱动 98 Class.forName(Driver); 99 //获得连接,注意是java.sql的Connection,mysql包也有Connection接口100 Connection conn=DriverManager.getConnection(url, user, password);101 //sql语句102 String sql="insert into test values(100)";103 //获得Statement对象104 //说明文档有这么一句注释:在默认情况下,同一时间每个 Statement 对象在只能打开一个 ResultSet 对象。105 //因此,如果读取一个 ResultSet 对象与读取另一个交叉,则这两个对象必须是由不同的 Statement 对象生成的。106 //如果存在某个语句的打开的当前 ResultSet 对象,则 Statement 接口中的所有执行方法都会隐式关闭它。107 Statement stat=conn.createStatement();108 //执行sql(实际上是把sql发送给数据库,数据库去执行类似Scoket通信)109 stat.executeUpdate(sql);110 //关闭相关连接释放资源111 stat.close();112 conn.close();113 System.out.println("success!");114 } catch (ClassNotFoundException e) {115 e.printStackTrace();116 } catch (SQLException e) {117 e.printStackTrace();118 }119 }120 //PreparedStatement实现121 public static void insert2(int n){122 try {123 Class.forName(Driver);124 Connection conn=DriverManager.getConnection(url, user, password);125 String sql="insert into test values(?)";126 PreparedStatement ps=conn.prepareStatement(sql);127 ps.setInt(1, n);128 ps.executeUpdate();129 ps.close();130 conn.close();131 System.out.println("success!");132 } catch (ClassNotFoundException e) {133 e.printStackTrace();134 } catch (SQLException e) {135 e.printStackTrace();136 }137 }138 public static void main(String[] args) {139 //insert();140 //insert2(1);141 //find();142 update();143 }144 }

 

转载于:https://www.cnblogs.com/ganhang-acm/p/5199455.html

你可能感兴趣的文章
函数的形参和实参
查看>>
【TP SRM 703 div2 500】 GCDGraph
查看>>
webdriver api
查看>>
apache 实现图标缓存客户端
查看>>
揭秘:黑客必备的Kali Linux是什么,有哪些弊端?
查看>>
linux系统的远程控制方法——学神IT教育
查看>>
springboot+mybatis报错Invalid bound statement (not found)
查看>>
Linux环境下SolrCloud集群环境搭建关键步骤
查看>>
P3565 [POI2014]HOT-Hotels
查看>>
MongoDB的简单使用
查看>>
prometheus配置
查看>>
【noip2004】虫食算——剪枝DFS
查看>>
python 多进程和多线程的区别
查看>>
sigar
查看>>
iOS7自定义statusbar和navigationbar的若干问题
查看>>
[Locked] Wiggle Sort
查看>>
deque
查看>>
c#中从string数组转换到int数组
查看>>
数据模型(LP32 ILP32 LP64 LLP64 ILP64 )
查看>>
java小技巧
查看>>