JAVA入门到精通-第66讲-sql server-JDBC
sql server JDBC-ODBC
sql server面对各种语言的使用;
odbc相当于一个开关接口;
驱动就是一堆函数、方法或者包;
JDBC驱动:数据库直接支持JAVA程序的调用;
Hibernate:orm技术,对象关系映射;
![](https://img2018.cnblogs.com/blog/1167156/201811/1167156-20181129001217541-1068288437.png)
连接方式不一样,其他大同小异;
为了安全,SQL server提供了一个接口ODBC;
jdbc-odbc对JAVA提供接口;
直接提供jdbc驱动,速度有一定优势;
-PreparedStatement[火箭车]
![](https://img2018.cnblogs.com/blog/1167156/201811/1167156-20181129001217801-1756890251.png)
com.microsoft.jdbc.sqlserver.SQLServerDriver
1
1
1
com.microsoft.jdbc.sqlserver.SQLServerDriver
rs=ps.executeQuery();
![](https://img2018.cnblogs.com/blog/1167156/201811/1167156-20181129001219186-708097556.png)
如果是*,需要getString(2)......
JDBC-ODBC桥连,不需要包;
如果是JDBC方式,需要引入三个JAR包;
![](https://img2018.cnblogs.com/blog/1167156/201811/1167156-20181129001220031-674068017.png)
JDBC驱动包;
单击项目,右键-Properties-Java Build Path-External JARs
如果不按照数字走,也可以按照名称走:
![](https://img2018.cnblogs.com/blog/1167156/201811/1167156-20181129001220805-923154485.png)
-多表查询
![](https://img2018.cnblogs.com/blog/1167156/201811/1167156-20181129001221009-422437385.png)
![](https://img2018.cnblogs.com/blog/1167156/201811/1167156-20181129001221185-1307030959.png)
多表和单表是一样的;
-添加,删除,修改
executeUpdate();
给?赋值
ps.setInt (1, 100);
ps.setString(2, "财务部")
ps.setString(3, "大学城")
![](https://img2018.cnblogs.com/blog/1167156/201811/1167156-20181129001221700-19551435.png)
-java操作sql server数据库
![](https://img2018.cnblogs.com/blog/1167156/201811/1167156-20181129001221915-1338547752.png)
表并不需要真实的存在;
在java中 如何使用 ddl语句(create , drop, backup ...)
![](https://img2018.cnblogs.com/blog/1167156/201811/1167156-20181129001222154-1804604.png)
![](https://img2018.cnblogs.com/blog/1167156/201811/1167156-20181129001222463-1120464044.png)
127.0.0.1 要连接的数据库的IP
1433表示sql server的默认端口
涉及到网络的东西,都需要端口
(程序与程序之间通过网络连接);
SQLserver 2000: 1433
Oracle : 1521
MYSQL:3306
Https: 80
FTP: 21
SSH:22
TOMCAT:8080
![](https://img2018.cnblogs.com/blog/1167156/201811/1167156-20181129001223043-1983876691.png)
ps=ct.prepareStatement("create database vvv");
boolean b=ps.execute();
返回一个bool值
//关闭资源
ps 、ct
-创建表
create table xxx(aa int)
![](https://img2018.cnblogs.com/blog/1167156/201811/1167156-20181129001223375-1937447455.png)
![](https://img2018.cnblogs.com/blog/1167156/201811/1167156-20181129001223635-705000289.png)
-备份数据库
backup database bbb to disk='xxx.bak'
![](https://img2018.cnblogs.com/blog/1167156/201811/1167156-20181129001223852-259730419.png)
将来可以做一个线程定时去备份数据库
![](https://img2018.cnblogs.com/blog/1167156/201811/1167156-20181129001224111-51082734.png)
![](https://img2018.cnblogs.com/blog/1167156/201811/1167156-20181129001224425-1109792364.png)
=====================
JDBC-ODBC桥连操作sql server与JDBC驱动直连操作sql server的区别:
1、JDBC-ODBC桥连sql server无需引入外部驱动
2、JDBC直连需要引入微软提供的JDBC驱动
JDBC直连sqlserver示例[Sql_test3.java]
/** * JDBC方式去操作数据库(单表操作) * 1、引入sql包 * 2、sqlserver2000需要引入三个jar包,分别是msbase.jar和mssqlserver.jar和msutil.jar * 3、sqlserver2005/2008/2012版本中可以引入sqljdbc.jar或sqljdbc4.jar两个微软提供的JDBC包,官方目前推出2.0/3.0/4.0版本 * 4、使用sqljdbc4.jar后可以不使用加载驱动Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");而直接连接数据库 * 5、使用sqljdbc.jar则需要加载驱动 * 6、特别说明,如果取值是按编号取,则需一一对应;如果按字段列名取值,则可以灵活取值 */ package com.sqlserver; import java.sql.*; public class Sql_test3 { public static void main(String[] args) { //定义需要的对象 PreparedStatement ps=null; Connection ct=null; ResultSet rs=null; try { //初始化我们的对象 //1、加载驱动 Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); //2、得到连接 ct=DriverManager.getConnection("jdbc:sqlserver://127.0.0.1:1433;databaseName=test;user=sa;password=sa;"); if(!ct.isClosed()){ System.out.println("数据库连接成功"); }else{ System.out.println("数据库连接失败"); } //3、创建PreparedStatement // ps=ct.prepareStatement("select * from emp"); ps=ct.prepareStatement("select ename,sal,deptno from emp"); //4、执行(查询就用executeQuery(),增加、删除、修改就用executeUpdate()) rs=ps.executeQuery(); //循环取出,雇员的名字、雇员的薪水,部门编号 while(rs.next()){ // String ename=rs.getString(2); // float sal=rs.getFloat(6); // int deptno=rs.getInt(8); // String ename=rs.getString(1);//对应的列号可以取出数据 // float sal=rs.getFloat(2); // int deptno=rs.getInt(3); String ename=rs.getString("ename");//使用字段名也可以取出数据 float sal=rs.getFloat("sal"); int deptno=rs.getInt("deptno"); System.out.println(ename+"\t"+sal+"\t"+deptno); } } catch (Exception e) { e.printStackTrace(); }finally{ try { if(rs!=null){ rs.close(); } if(ps!=null){ ps.close(); } if(ct!=null){ ct.close(); } } catch (SQLException e) { e.printStackTrace(); } } } }
多表操作,示例[Sql_test4.java]
1 /** 2 * JDBC方式去操作数据库(多表操作) 3 * 1、引入sql包 4 * 2、sqlserver2000需要引入三个jar包,分别是msbase.jar和mssqlserver.jar和msutil.jar 5 * 3、sqlserver2005/2008/2012版本中可以引入sqljdbc.jar或sqljdbc4.jar两个微软提供的JDBC包,官方目前推出2.0/3.0/4.0版本 6 * 4、使用sqljdbc4.jar后可以不使用加载驱动Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");而直接连接数据库 7 * 5、使用sqljdbc.jar则需要加载驱动 8 * 6、特别说明,如果取值是按编号取,则需一一对应;如果按字段列名取值,则可以灵活取值 9 */ 10 package com.sqlserver; 11 import java.sql.*; 12 public class Sql_test4 { 13 public static void main(String[] args) { 14 //定义需要的对象 15 PreparedStatement ps=null; 16 Connection ct=null; 17 ResultSet rs=null; 18 try { 19 //初始化我们的对象 20 //1、加载驱动 21 Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 22 //2、得到连接 23 ct=DriverManager.getConnection 24 ("jdbc:sqlserver://127.0.0.1:1433;databaseName=test;user=sa;password=sa;"); 25 if(!ct.isClosed()){ 26 System.out.println("数据库连接成功"); 27 }else{ 28 System.out.println("数据库连接失败"); 29 } 30 // //3、创建PreparedStatement 31 ps=ct.prepareStatement("select ename,sal,dname from emp,dept where emp.deptno=dept.deptno"); 32 //4、执行(查询就用executeQuery(),增加、删除、修改就用executeUpdate()) 33 rs=ps.executeQuery(); 34 //循环取出,雇员的名字、雇员的薪水,部门名称 35 while(rs.next()){ 36 String ename=rs.getString("ename");//使用字段名也可以取出数据 37 float sal=rs.getFloat("sal"); 38 String dname=rs.getString("dname"); 39 System.out.println(ename+"\t"+sal+"\t"+dname); 40 } 41 //5、创建PreparedStatement 42 ps=ct.prepareStatement("insert into dept values(?,?,?)"); 43 //6、给?赋值 44 ps.setInt(1, 60); 45 ps.setString(2, "Finance"); 46 ps.setString(3, "Alaska"); 47 //7、执行(查询就用executeQuery(),增加、删除、修改就用executeUpdate()) 48 int i=ps.executeUpdate(); 49 if(i==1){ 50 System.out.println("添加数据成功"); 51 }else{ 52 System.out.println("添加数据失败"); 53 } 54 //8、创建PreparedStatement 55 ps=ct.prepareStatement("delete from dept where deptno=?"); 56 //9、给?赋值 57 ps.setInt(1, 50); 58 //10、执行(查询就用executeQuery(),增加、删除、修改就用executeUpdate()) 59 int i=ps.executeUpdate(); 60 if(i==1){ 61 System.out.println("删除数据成功"); 62 }else{ 63 System.out.println("删除数据失败"); 64 } 65 //11、创建PreparedStatement 66 ps=ct.prepareStatement("update dept set deptno=? where loc=?"); 67 //12、给?赋值 68 ps.setInt(1, 50); 69 ps.setString(2, "Alaska"); 70 //13、执行(查询就用executeQuery(),增加、删除、修改就用executeUpdate()) 71 int i=ps.executeUpdate(); 72 if(i==1){ 73 System.out.println("修改数据成功"); 74 }else{ 75 System.out.println("修改数据失败"); 76 } 77 } catch (Exception e) { 78 e.printStackTrace(); 79 }finally{ 80 try { 81 if(rs!=null){ 82 rs.close(); 83 } 84 if(ps!=null){ 85 ps.close(); 86 } 87 if(ct!=null){ 88 ct.close(); 89 } 90 } catch (SQLException e) { 91 e.printStackTrace(); 92 } 93 } 94 } 95 }
![](https://img2018.cnblogs.com/blog/1167156/201811/1167156-20181129001225502-1282642676.png)
-------------------------------------------------------------------------------
java程序操作sql server
Statement和PreparedStatement的区别(2)
看下面两段程序片断:
Code Fragment 1:
String updateString="UPDATE COFFEES SET SALES=75"+"WHERE COF_NAME LIKE 'Colombian'";
stmt.executeUpdate(updateString);
Code Fragment 2:
PreparedStatement updateSales=con.prepareStatement("UPDATE COFFEES SET SALES=? WHERE COF_NAME LIKE ?");
updateSales.setInt(1,75);
updateSales.setString(2,"Colombian");
updateSales.executeUpdate();
后者使用了PreparedStatement,而前者是Statement,PreparedStatement不仅包含了SQL语句,而且大多数情况下这个语句已被预编译过,当其执行时,只需DBMS运行SQL语句,而不必先编译。当你需要执行Statement对象多次的时候,PreparedStatement对象将会降低运行时间,加快了访问数据库的速度。 好处是,不必重复SQL语句的句法,而只需要改其中变量的值,便可重新执行SQL语句。选择PreparedStatement对象与否,在于相同句法的SQL语句是否执行了多次,而且两次之间的差别仅是变量的不同。如仅执行一次的话,它和普通的对象无差异,体现不出预编译的优越性。
java操作sql server数据库(表)[Sql_test5.java]
在软件公司实际开发过程中,也许需要你在java程序中来控制对数据库(表)的创建、删除、备份、恢复工作,这是我们又该怎样完成呢?
1 /** 2 * 在java中如何使用ddl语句(credate(创建),drop(删除),backup(备份),restore(恢复))数据库 3 */ 4 package com.sqlserver; 5 import java.sql.*; 6 public class Sql_test5 { 7 public static void main(String[] args) { 8 //定义需要的对象 9 PreparedStatement ps=null; 10 Connection ct=null; 11 ResultSet rs=null; 12 try { 13 //1、加载驱动 14 Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 15 //2、得到连接 16 ct=DriverManager.getConnection("jdbc:sqlserver://127.0.0.1:1433;databaseName=test;user=sa;password=sa;"); 17 if(!ct.isClosed()){ 18 System.out.println("数据库连接成功"); 19 }else{ 20 System.out.println("数据库连接失败"); 21 } 22 // //3、创建ps,创建数据库 23 // ps=ct.prepareStatement("create database vvv"); 24 // //如果执行的是ddl语句 25 // if(!ps.execute()){ 26 // System.out.println("创建数据库成功"); 27 // }else{ 28 // System.out.println("创建数据库失败"); 29 // } 30 //4、创建ps,创建表 31 // ps=ct.prepareStatement("create table xxx(aa int)"); 32 // //如果执行的是ddl语句 33 // if(!ps.execute()){ 34 // System.out.println("创建表成功"); 35 // }else{ 36 // System.out.println("创建表失败"); 37 // } 38 //5、备份数据库 39 // ps=ct.prepareStatement("backup database vvv to disk='e:/vvv.bak'"); 40 // if(!ps.execute()){ 41 // System.out.println("备份数据库成功"); 42 // }else{ 43 // System.out.println("备份数据库失败"); 44 // } 45 //6、恢复数据库 46 ps=ct.prepareStatement("restore database vvv from disk='e:/vvv.bak'"); 47 if(!ps.execute()){ 48 System.out.println("恢复数据库成功"); 49 }else{ 50 System.out.println("恢复数据库失败"); 51 } 52 53 } catch (Exception e) { 54 e.printStackTrace(); 55 }finally{ 56 try { 57 if(rs!=null){ 58 rs.close(); 59 } 60 if(ps!=null){ 61 ps.close(); 62 } 63 if(ct!=null){ 64 ct.close(); 65 } 66 } catch (SQLException e) { 67 e.printStackTrace(); 68 } 69 } 70 } 71 }