zoukankan      html  css  js  c++  java
  • JAVA入门到精通-第66讲-sql server-JDBC

    sql server JDBC-ODBC
    sql server面对各种语言的使用;
    odbc相当于一个开关接口;
    驱动就是一堆函数、方法或者包;
    JDBC驱动:数据库直接支持JAVA程序的调用;
    Hibernate:orm技术,对象关系映射;
    连接方式不一样,其他大同小异;
     
    为了安全,SQL server提供了一个接口ODBC;
    jdbc-odbc对JAVA提供接口;
    直接提供jdbc驱动,速度有一定优势;
     
    -PreparedStatement[火箭车]
    com.microsoft.jdbc.sqlserver.SQLServerDriver
     
     
     
    1
    1
     
     
     
     
     
    1
    com.microsoft.jdbc.sqlserver.SQLServerDriver
     
     
     
    rs=ps.executeQuery();
     
    如果是*,需要getString(2)......
     
    JDBC-ODBC桥连,不需要包;
    如果是JDBC方式,需要引入三个JAR包;
    JDBC驱动包;
    单击项目,右键-Properties-Java Build Path-External JARs
     
    如果不按照数字走,也可以按照名称走:
     
    -多表查询
    多表和单表是一样的;
     
    -添加,删除,修改
    executeUpdate();
    给?赋值
    ps.setInt (1, 100);
    ps.setString(2, "财务部")
    ps.setString(3, "大学城")
     
    -java操作sql server数据库
    表并不需要真实的存在;
    在java中 如何使用 ddl语句(create , drop, backup ...)
     
    127.0.0.1 要连接的数据库的IP
    1433表示sql  server的默认端口
    涉及到网络的东西,都需要端口
    (程序与程序之间通过网络连接);
    SQLserver 2000: 1433
    Oracle : 1521
    MYSQL:3306
    Https: 80
    FTP: 21
    SSH:22
    TOMCAT:8080
    ps=ct.prepareStatement("create database vvv");
    boolean b=ps.execute();
    返回一个bool值
     
    //关闭资源
    ps 、ct 
     
    -创建表
    create table xxx(aa  int)
     
    -备份数据库
    backup database  bbb  to disk='xxx.bak'
    将来可以做一个线程定时去备份数据库
     
     
    =====================
     

    JDBC-ODBC桥连操作sql serverJDBC驱动直连操作sql server的区别:

    1JDBC-ODBC桥连sql server无需引入外部驱动

    2JDBC直连需要引入微软提供的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+"	"+sal+"	"+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+"	"+sal+"	"+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 }
     
     
     

     

     

    -------------------------------------------------------------------------------

    java程序操作sql server

    StatementPreparedStatement的区别(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 }
    
    
  • 相关阅读:
    共享内存基本操作
    mmap 操作
    busybox 安装问题解决
    ubuntu apt-get failed
    live555 学习资料
    循环队列实现
    socket 聊天室实现
    socket 映射服务器--(可处理多客户端连接(fork),显示退出信息)
    socket 映射服务器程序
    vector和list插入性能对比
  • 原文地址:https://www.cnblogs.com/xuxaut-558/p/10035883.html
Copyright © 2011-2022 走看看