标签:zha 循环 HERE 服务 sof 行数据 throws exce oca
什么是JDBC
JDBC(Java Data Base Connectivity,Java数据库连接),是一种用于执行SQL语句的Java API,为多种关系数据库提供统一访问。它由一组用Java语言编写的类和接口组成。
JDBC API
提供者:Sun公司
内容:供程序员调用的接口与类,集成在java.sql和javax.sql包中,如
DriverManager类 作用:管理各种不同的JDBC驱动
Connection接口
Statement接口
ResultSet接口
JDBC 驱动
提供者:数据库厂商
作用:负责连接各种不同的数据库
JDBC对Java程序员而言是API,对实现与数据库连接的服务提供商而言是接口模型。
三方关系
SUN公司是规范制定者,制定了规范JDBC(连接数据库规范)
数据库厂商微软、甲骨文等分别提供实现JDBC接口的驱动jar包
程序员学习JDBC规范来应用这些jar包里的类。
JDBC连接数据库最简单的方式
一:拿到jar包,【这里是用Oracle进行了连接测试】
jar包位置:Oracle的安装的路径下去找或者直接百度对应的版本jar包即可。
二:导入jar包到Java项目里
导入jar包截图步骤:
三、写代码:【6步骤】
// 1.加载一个driver驱动
Class.forName("oracle.jdbc.OracleDriver");
// 2.创建数据库连接(Connection)
Connection connection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE", "scott", "tiger");
// 3.创建SQL命令发送器Statement--由连接connection来创建sql命令发送器
Statement statement = connection.createStatement();
// 4.通过Statement发送SQL命令并得到结果(测试添加数据)
String sql = "insert into emp values(1007,‘zhangsan‘,‘student‘,7788,‘09-10月-2018‘,5000,3000,10)";
// 5.处理结果--返回int 底层直接实现了commit
int commit =statement.executeUpdate(sql);
//6.关闭数据库资源--先开的资源后关
statement.close();
connection.close();
详细代码:
1 package boom; 2 3 import java.sql.Connection; 4 import java.sql.DriverManager; 5 import java.sql.SQLException; 6 import java.sql.Statement; 7 8 /**Oracle连接JDBC 9 * 1.导入jar包 10 * 2.写jdbc 11 * @author Administrator 12 * 13 */ 14 public class JDBC_test01 { 15 16 public static void main(String[] args) throws ClassNotFoundException, SQLException { 17 // 1.加载一个driver驱动 18 Class.forName("oracle.jdbc.OracleDriver"); 19 // 2.创建数据库连接(Connection) 20 Connection connection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE", "scott", "tiger"); 21 // 3.创建SQL命令发送器Statement--由连接connection来创建sql命令发送器 22 Statement statement = connection.createStatement(); 23 // 4.通过Statement发送SQL命令并得到结果(测试添加数据) 24 String sql = "insert into emp values(1007,‘zhangsan‘,‘student‘,7788,‘09-10月-2018‘,5000,3000,10)"; 25 // 5.处理结果--返回int 底层直接实现了commit 26 int commit =statement.executeUpdate(sql); 27 // 判断 28 if(commit>0){ 29 System.out.println("JDBC_test01.main(测试添加数据成功)"); 30 }else{ 31 System.out.println("JDBC_test01.main(测试添加数据失败)"); 32 } 33 // 6.关闭数据库资源--先开的资源后关 34 statement.close(); 35 connection.close(); 36 } 37 38 }
测试结果:
小结:
JDBC访问数据库步骤
1:加载一个Driver驱动
2:创建数据库连接(Connection)
3 :创建SQL命令发送器Statement
4:通过Statement发送SQL命令并得到结果
5:处理结果(select语句)
6:关闭数据库资源
JDBC语法小结:
1.加载驱动
加载JDBC驱动是通过调用方法java.lang.Class.forName(),下面列出常用的几种数据库驱动程序加载语句的形式 :
Class.forName(“oracle.JDBC.driver.OracleDriver”);//使用Oracle的JDBC驱动程序
Class.forName(“com.microsoft.JDBC.sqlserver.SQLServerDriver”);//使用SQL Server的JDBC驱动程序
Class.forName(“com.ibm.db2.JDBC.app.DB2Driver”);//使用DB2的JDBC驱动程序
Class.forName("com.mysql.JDBC.Driver");//使用MySql的JDBC驱动程序
2.创建数据库连接
与数据库建立连接的方法是调用DriverManager.getConnection(String url, String user, String password )方法
String url="jdbc:oracle:thin:@localhost:1521:XE";
String user=“scott";
String password=“tiger";
3.创建Statement并发送命令
Statement对象用于将 SQL 语句发送到数据库中,或者理解为执行sql语句
有三种 Statement对象:
Statement:用于执行不带参数的简单SQL语句;
PreparedStatement(从 Statement 继承):用于执行带或不带参数的预编译SQL语句;
CallableStatement(从PreparedStatement 继承):用于执行数据库存储过程的调用。
完善JDBC代码,达到规范的写法,实现增删改查操作:【遵循六大步骤】
1:驱动名,URL,用户名,密码提取到代码的前面
2:处理抓取异常信息
3:实现JDBC对数据库的增删改操作
获取当前日期封装成了util类:
public class MyUtil { /** * 获取当前的系统日期,字符串类型 * @return newdatestr */ public static String GetSysTime(){ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); String newdatestr = sdf.format(new Date()); return newdatestr; } }
详细代码:
1 package boom; 2 3 import java.sql.Connection; 4 import java.sql.DriverManager; 5 import java.sql.SQLException; 6 import java.sql.Statement; 7 8 import boom.util.MyUtil; 9 import oracle.net.aso.s; 10 11 /**Oracle连接JDBC 12 * 提取:驱动名,URL,用户名,密码 13 * 处理异常信息 14 * 实现建增删改 15 * @author Administrator 16 * 17 */ 18 public class JDBC_test02 { 19 20 public static void main(String[] args){ 21 // 声明参数 22 String driver="oracle.jdbc.driver.OracleDriver"; 23 String url = "jdbc:oracle:thin:@localhost:1521:XE"; 24 String userName="scott"; 25 String userPwd="tiger"; 26 27 // 声明连接,初始化为空 28 Connection connection = null; 29 Statement statement = null; 30 31 try { 32 // 1.加载驱动 33 Class.forName(driver); 34 // 2.创建连接 35 connection = DriverManager.getConnection(url, userName, userPwd); 36 // 3.创建SQL命令发送器 37 statement = connection.createStatement(); 38 // 4.发送SQL获取结果 39 // 添加 40 String add = "insert into emp values(9999,‘李四‘,‘MANAGER‘,7788,to_date(‘"+MyUtil.GetSysTime()+"‘,‘yyyy-mm-dd‘),9000,1000,10)"; 41 // 删除 42 String delete = "delete from emp where empno=9999"; 43 // 修改 44 String update = "update emp set sal=sal+8000,comm=comm+520 where empno=9999"; 45 46 // 相当于事务的提交更新commit 47 int commit = statement.executeUpdate(delete); 48 // 5.处理结果 49 if(commit>0){ 50 System.out.println("JDBC_test02.main(测试数据成功)"); 51 }else{ 52 System.out.println("JDBC_test02.main(测试数据失败)"); 53 } 54 } catch (ClassNotFoundException e) { 55 // TODO Auto-generated catch block 56 e.printStackTrace(); 57 } catch (SQLException e) { 58 // TODO Auto-generated catch block 59 e.printStackTrace(); 60 }finally{ 61 // 6.关闭资源 【先开后关】 62 try { 63 if(statement !=null){ 64 statement.close(); 65 } 66 } catch (SQLException e) { 67 // TODO Auto-generated catch block 68 e.printStackTrace(); 69 } 70 try { 71 if(connection !=null){ 72 connection.close(); 73 } 74 } catch (SQLException e) { 75 // TODO Auto-generated catch block 76 e.printStackTrace(); 77 } 78 } 79 } 80 81 }
JDBC对Oracle进行查询操作
1 package boom; 2 3 import java.sql.Connection; 4 import java.sql.DriverManager; 5 import java.sql.ResultSet; 6 import java.sql.SQLException; 7 import java.sql.Statement; 8 import java.util.Date; 9 10 import boom.util.MyUtil; 11 import oracle.net.aso.s; 12 13 /** 14 * 查询 15 * @author Administrator 16 * 17 */ 18 public class JDBC_test03 { 19 20 public static void main(String[] args){ 21 // 声明参数 22 String driver="oracle.jdbc.driver.OracleDriver"; 23 String url = "jdbc:oracle:thin:@localhost:1521:XE"; 24 String userName="scott"; 25 String userPwd="tiger"; 26 27 // 声明连接,初始化为空 28 Connection connection = null; 29 Statement statement = null; 30 ResultSet result = null; 31 32 try { 33 // 1.加载驱动 34 Class.forName(driver); 35 // 2.创建连接 36 connection = DriverManager.getConnection(url, userName, userPwd); 37 // 3.创建SQL命令发送器 38 statement = connection.createStatement(); 39 // 4.发送SQL获取结果 40 // 查询 41 String select = "select * from emp where comm is not null order by sal desc"; 42 result = statement.executeQuery(select); 43 // 5.处理结果-遍历结果集需要用到while 44 while(result.next()){ 45 // 遍历循环表字段 46 int empno = result.getInt("EMPNO"); 47 String ename = result.getString("ENAME"); 48 String job = result.getString("JOB"); 49 int mgr = result.getInt("MGR"); 50 Date hiredate = result.getDate("HIREDATE"); 51 double sal = result.getDouble("SAL"); 52 double comm = result.getDouble("COMM"); 53 int deptno = result.getInt("DEPTNO"); 54 //输出 55 System.out.println(empno+"\t"+ename+"\t"+job+"\t"+mgr+"\t"+hiredate+"\t"+sal+"\t"+comm+"\t"+deptno); 56 } 57 } catch (ClassNotFoundException e) { 58 // TODO Auto-generated catch block 59 e.printStackTrace(); 60 } catch (SQLException e) { 61 // TODO Auto-generated catch block 62 e.printStackTrace(); 63 }finally{ 64 // 6.关闭资源 【先开后关】 65 try { 66 if(result!=null){ 67 result.close(); 68 } 69 } catch (SQLException e) { 70 // TODO Auto-generated catch block 71 e.printStackTrace(); 72 } 73 try { 74 if(statement !=null){ 75 statement.close(); 76 } 77 } catch (SQLException e) { 78 // TODO Auto-generated catch block 79 e.printStackTrace(); 80 } 81 try { 82 if(connection !=null){ 83 connection.close(); 84 } 85 } catch (SQLException e) { 86 // TODO Auto-generated catch block 87 e.printStackTrace(); 88 } 89 } 90 } 91 92 }
效果图为查询有奖金的员工所有信息
逆序查询:
关闭结果集正序遍历并设置只读
statement = connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
// 把结果集的指针移到最后
result.afterLast();
// 遍历结果集向上遍历
result.previous()
详细代码:
1 package boom; 2 3 import java.sql.Connection; 4 import java.sql.DriverManager; 5 import java.sql.ResultSet; 6 import java.sql.SQLException; 7 import java.sql.Statement; 8 import java.text.SimpleDateFormat; 9 import java.util.Date; 10 /** 11 * 12 * @author 查询--逆向遍历 13 * 14 */ 15 public class JDBC_test04 { 16 public static void main(String[] args) { 17 // 声明参数 18 String driver = "oracle.jdbc.driver.OracleDriver"; 19 String url = "jdbc:oracle:thin:@localhost:1521:XE"; 20 String username = "scott"; 21 String userpwd = "tiger"; 22 23 // 声明连接 24 Connection connection = null; 25 Statement statement = null; 26 ResultSet result = null; 27 try { 28 // 1:加载驱动 29 Class.forName(driver); 30 // 2:创建连接 31 connection = DriverManager.getConnection(url, username, userpwd); 32 // 3:创建sql命令发送器 33 statement = connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); 34 // 4:发送sql获取结果 35 // 查询 36 String select = "select empno,ename,job from emp where sal>=2000 order by ename"; 37 result = statement.executeQuery(select); 38 // 把结果集的指针移到最后 39 result.afterLast(); 40 41 // 5:处理结果-遍历结果集需要用到while 42 // 遍历结果集向上遍历 43 while(result.previous()){ 44 // 遍历循环表字段 45 int empno = result.getInt("EMPNO"); 46 String ename = result.getString("ENAME"); 47 String job = result.getString("JOB"); 48 //输出 49 System.out.println(empno+"\t"+ename+"\t"+job+"\t"); 50 } 51 } catch (ClassNotFoundException e) { 52 // TODO Auto-generated catch block 53 e.printStackTrace(); 54 } catch (SQLException e) { 55 // TODO Auto-generated catch block 56 e.printStackTrace(); 57 } finally { 58 // 关闭资源--先开后关 59 try { 60 if (result != null) { 61 result.close(); 62 } 63 } catch (SQLException e) { 64 // TODO Auto-generated catch block 65 e.printStackTrace(); 66 } 67 68 try { 69 if (statement != null) { 70 statement.close(); 71 } 72 } catch (SQLException e) { 73 // TODO Auto-generated catch block 74 e.printStackTrace(); 75 } 76 77 try { 78 if (connection != null) { 79 connection.close(); 80 } 81 } catch (SQLException e) { 82 // TODO Auto-generated catch block 83 e.printStackTrace(); 84 } 85 86 } 87 88 } 89 }
效果图是按姓名逆序输出
Oracle里是升序:select empno,ename,job from emp where sal>=2000 order by ename
标签:zha 循环 HERE 服务 sof 行数据 throws exce oca
原文地址:https://www.cnblogs.com/cao-yin/p/9768632.html