zoukankan      html  css  js  c++  java
  • JDBC数据库编程总结

    jdbc:全称java Database Connectivity  java数据库连接。

    起初,基于某数据库产品的开发,必须了解某数据库的api。通过c/c++直接访问某数据库的接口来编程。但无法实现跨数据库平台开发。
    后来,通过统一数据库接口实现跨平台开发,例如odbc,ado.net。而jdbc是java访问数据库平台的统一接口.
    jdbc在不同数据库平台的移植不是完全的。
    jdbc对于java程序一端,是统一的一个接口。对于数据库产品连接端,不是统一的。(由厂商提供)

    sql六大语句:

    Select

    Select * from T where   … …

    Insert

    Insert into T values(… …)

    Create

    Create table T(… …)

    Delete

    Delete from T where… …

    Update

    Update T set t1=… and t2=…

    Drop

    Drop table T

    JDBC 连接SQL SERVER

    准备:

    <1> 将JDBC解压缩到任意位置,比如解压到C盘program files下面,并在安装目录里找到sqljdbc.jar文件,得到其路径开始配置环境变量

    在环境变量classpath 后面追加 sqljdbc.jar文件路径

    <2> 设置SQLEXPRESS服务器:

    a.打开SQL Server Configuration Manager -> SQLEXPRESS的协议 -> TCP/IP

    b.右键单击启动TCP/IP

    c.双击进入属性,把IP地址中的IP all中的TCP端口设置为1433

    d.重新启动SQL Server 2008服务中的SQLEXPRESS服务器

    e.关闭SQL Server Configuration Manager

    <3> 打开刚刚安装好的 SQL Server Management Studio,连接SQLEXPRESS服务器, 新建数据库

    eclipse:

    1添加数据库产品相关类库。(数据库驱动包)。

    myeclipse:项目鼠标右键project->Properties->Java Build Path->Libraries->Add External JARs->找到sqljdbc4加载

    为什么将数据库驱动包放入项目而不是整个系统中?
    放入系统中,项目与项目会产生影响,不同版本的jar包会产生冲突

    2向DriverManager注册

    driverManager:管理数据库的基本服务,若要连接某数据库,需要向DriverManager注册。(实例化时自动注册)

    3连接数据库对象

    import java.sql.*;
    
    /** 
    * JDBC 连接SQL SERVER 
    * 2014-5-5 
    * @author Administrator 
    */
    
    public class Demo1 {
    
        public static void main(String[] args) throws Exception {
    
    
            //1添加数据库产品相关类库。
            //2向DriverManager注册。(实例化时自动注册)
            //Class是java.Lang包中的类,调用方法forName,根据字符串创建一个实例
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            //new com.microsoft.sqlserver.jdbc.SQLServerDriver();
    
    
            //3连接数据库对象
            ////jdbc:sqlserver://ip地址:端口;DatabaseName=数据库名称",账号,密码    
            String url="jdbc:sqlserver://183.33.129.192:1433;DatabaseName=JavaStu"; 
            Connection conn=DriverManager.getConnection(url, "sa", "qsnprac157");
            System.out.println("连接数据库成功");
        } 
    
    }

    执行查询sql语句

    1通过连接创建语句对象

    2通过语句对象执行查询sql语句,返回结果集

    3循环取得结果集内容

    4关闭资源(后打开的先关)

    import java.sql.*;
    /**
     * 连接数据库并执行查询语句(不合理版)
     * 2014-5-5
     * @author Administrator
     *
     */
    public class Demo2 {
    
    
        public static void main(String[] args, String Sno, String Ssex) throws Exception{
            //添加驱动包
            //注册
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            //连接数据库对象
            String url="jdbc:sqlserver://113.76.233.233:1433;DatabaseName=StuManage";
            String user="sa";
            String password="qsnprac157";
            Connection conn=DriverManager.getConnection(url, user, password);
    
    
            //创建语句对象(作用:将 SQL 语句发送到数据库)
            Statement stmt =conn.createStatement();
            //执行给定的 SQL 语句,并将结果集返回给 ResultSet 对象
            ResultSet rs=stmt.executeQuery("Select * from Student");
            //循环遍历取得结果集
            while(rs.next()){
                System.out.println(rs.getInt("Sage"));
                System.out.println(rs.getString("Ssex"));
            }
    
    
            //关闭资源
            rs.close();
            stmt.close();
            conn.close();       
    
        }
    
    }

    DriverManager类:管理驱动程序的基本服务(删除、查找、注册驱动程序,建立数据库连接,获取、更新日志,设置)

    Connection接口:与特定数据库的连接(会话)。在连接上下文中执行 SQL 语句并返回结果

    Statement接口:执行静态 SQL 语句并返回它所生成结果的对象。

    ResultSet接口:表示数据库结果集的数据表,通常通过执行查询数据库的语句生成。

    上一个代码的问题:如果在遍历的时候出现异常,那么资源无法关闭,逐渐积累,大量内存被占用。

    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    /**
     * 连接数据库并执行查询语句(完美版)
     * 2014-5-5
     * @author Administrator
     *
     */
    public class Demo3 {
    
    
        public static void main(String[] args, String Sno, String Ssex) {
            Connection conn=null;
            Statement stmt = null;
            ResultSet rs=null;
            //添加驱动包
    
            try{
                //注册
                Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
                //连接数据库对象
                String url="jdbc:sqlserver://113.76.233.233:1433;DatabaseName=StuManage";
                String user="sa";
                String password="qsnprac157";
                conn=DriverManager.getConnection(url, user, password);
    
    
                //创建语句对象(作用:将 SQL 语句发送到数据库)
                stmt =conn.createStatement();
                //执行给定的 SQL 语句,并将结果集返回给 ResultSet 对象
                rs=stmt.executeQuery("Select * from Student");
                //循环遍历取得结果集
                while(rs.next()){
                    System.out.println(rs.getInt("Sage"));
                    System.out.println(rs.getString("Ssex"));
                }
            }catch(ClassNotFoundException e){
                e.printStackTrace();
    
            }catch(SQLException e){
                e.printStackTrace();
            }
    
            finally{
                try{
                    //关闭资源
                    if(rs!=null){         //判断是否初始化成功(未初始化的话会报异常)
                        rs.close();
                        rs=null;
                    }
                    if(stmt!=null){
                        stmt.close();         //回收操作系统资源
                        stmt=null;              //垃圾回收机制回收内存资源
                    }
                    if(conn!=null){
                        conn.close(); 
                        conn=null;
                    }
    
                }catch(SQLException e){
                    e.printStackTrace();
                }
    
            }
        }
    }

    java有垃圾回收机制,为什么还要使用close()方法回收垃圾

    垃圾回收机制只能回收内存资源。其他资源(io设备,进程,cpu等),需要显式的释放

    import java.sql.*;
    /**
     * 连接数据库并更新数据
     * @author Administrator
     *
     */
    public class Demo4 {
    
    
        public static void main(String[] args) {
            Connection conn=null;
            Statement stmt=null;
    
            //添加驱动
            //注册
            try{
                Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
                //连接数据库对象
                String url="jdbc:sqlserver://113.76.113.84:1433;DatabaseName=JavaStu";
                String user="sa";
                String password="qsnprac157";
                conn=DriverManager.getConnection(url, user, password);
                //创建语句对象
                stmt=conn.createStatement();
                //向表中更新(添加、修改、删除)数据
                String sql="insert into Student values('1202020001','cw',20)";
                //String sql2="delete from Student where Sname='cw'";
                //String sql3="update Student set Sname='cw' where Sno=1202020002";
                stmt.executeUpdate(sql);
    
            }catch(ClassNotFoundException e ){
                e.printStackTrace();
            }catch(SQLException e){
                e.printStackTrace();
            }
            //关闭资源
            finally{
                try{
    
                    if(stmt!=null){
                        stmt.close();
                        stmt=null;
                    }
                    if(conn!=null){
                        conn.close();
                        conn=null;
                    }
                }catch(SQLException e){
                    e.printStackTrace();
                }
            }
    
    
    
        }
    
    }
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    import java.sql.Statement;
    
    
    
    
    /**
     *
     *程序功能:从命令行输入三个字段的值,把三个字段的值插入数据库中
     *时间:2014-5-9
     * @author Administrator
     */
    public class Demo5 {
    
    
        public static void main(String[] args) {
            Connection conn=null;
            Statement stmt=null;
            String Sno=null;
            String Sname=null;
            int Sage = 0;
            //判断输入的值是否够三个
            if(args.length!=3){
                System.out.println("需要插入三个字段,但输入的值不够三个!!!");
                System.exit(-1);           //非正常退出
            }
            Sno = args[0];
            Sname=args[1];
            try{
            Sage=Integer.parseInt(args[2]);
            }catch(NumberFormatException e){
                e.printStackTrace();
                System.exit(-1);
            }
            //添加驱动
            //注册
            try{
                Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
                //连接数据库对象
                String url="jdbc:sqlserver://183.45.19.233:1433;DatabaseName=JavaStu";
                String user="sa";
                String password="qsnprac157";
                conn=DriverManager.getConnection(url, user, password);
                //创建语句对象
                stmt=conn.createStatement();
                //向表中更新(添加、修改、删除)数据
                String sql="insert into Student values ('"+Sno+"','"+Sname+"',"+Sage+")";
                System.out.println(sql); //判断输入的sql语句是否正确
                stmt.executeUpdate(sql);
    
            }catch(ClassNotFoundException e ){
                e.printStackTrace();
            }catch(SQLException e){
                e.printStackTrace();
            }
            //关闭资源
            finally{
                try{
    
                    if(stmt!=null){
                        stmt.close();
                        stmt=null;
                    }
                    if(conn!=null){
                        conn.close();
                        conn=null;
                    }
                }catch(SQLException e){
                    e.printStackTrace();
                }
            }
        }
    }

    测试sql语句是否正确:构建完成后把sql语句打印出来

    PreparedStatement接口:使用预编译语句.用问号占位符进行占位

    import java.sql.*;
    
    /**
     *
     *程序功能:使用预编译语句处理sql语句
     *时间:2014-5-9
     * @author Administrator
     */
    public class Demo6{
    
    
        public static void main(String[] args) {
            Connection conn=null;
            PreparedStatement pstmt=null;
            String Sno=null;
            String Sname=null;
            int Sage = 0;
            //判断输入的值是否够三个
            if(args.length!=3){
                System.out.println("需要插入三个字段,但输入的值不够三个!!!");
                System.exit(-1);           //非正常退出
            }
            Sno = args[0];
            Sname=args[1];
            try{
                Sage=Integer.parseInt(args[2]);
            }catch(NumberFormatException e){
                e.printStackTrace();
                System.exit(-1);
            }
            //添加驱动
            //注册
            try{
                Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
                //连接数据库对象
                String url="jdbc:sqlserver://183.45.19.233:1433;DatabaseName=JavaStu";
                String user="sa";
                String password="qsnprac157";
                conn=DriverManager.getConnection(url, user, password);
                //创建预编译会话对象
                  pstmt=conn.prepareStatement("Insert into Student values(?,?,?)");
                //设置预编译参数
                pstmt.setString(1, Sno);
                pstmt.setString(2, Sname);
                pstmt.setInt(3, Sage);
                pstmt.executeUpdate();
    
            }catch(ClassNotFoundException e ){
                e.printStackTrace();
            }catch(SQLException e){
                e.printStackTrace();
            }
            //关闭资源
            finally{
                try{
    
                    if(pstmt!=null){
                        pstmt.close();
                        pstmt=null;
                    }
                    if(conn!=null){
                        conn.close();
                        conn=null;
                    }
                }catch(SQLException e){
                    e.printStackTrace();
                }
            }
        }
    }

    CallableStatement接口:调用数据库的存储过程

    import java.sql.*;
    
    
    /**
     *
     *程序功能:调用存储过程
     *时间:2014-5-9
     * @author Administrator
     */
    public class Demo7 {
    
        /**
         * @param args
         * @throws ClassNotFoundException 
         * @throws SQLException 
         */
        public static void main(String[] args) throws ClassNotFoundException, SQLException {
            // TODO Auto-generated method stub
            //添加驱动包
            //        注册
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            //        连接数据库对象
            String url="jdbc:sqlserver://183.45.19.233:1433;DatabaseName=JavaStu";
            Connection conn=DriverManager.getConnection(url, "sa", "qsnprac157");
            //        创建存储过程调用对象
            CallableStatement cstmt=conn.prepareCall("{call proc_stu(?,?)}");
            //        设置输出参数
            cstmt.registerOutParameter(1, Types.INTEGER);
            //        设置输入参数
            cstmt.setInt(2, Types.INTEGER);
            cstmt.execute();
            //        打印输出参数
            System.out.println(cstmt.getInt(1));
            //        关闭资源
            cstmt.close();
            conn.close();
    
        }
    
    }

    参考资料:尚学堂马士兵视频教程。

         51CTO使用JDBC连接SQL Server数据库(http://developer.51cto.com/art/200907/134635.htm

  • 相关阅读:
    A Famous City
    A Famous ICPC Team
    配置单元测试环境,找不到SenTestingKit
    linux解压.tar命令
    语音输入——科大讯飞
    查看dsym错误信息
    工程里关闭arc
    导入签名错误
    mac显示隐藏文件
    类uialertview弹出动画
  • 原文地址:https://www.cnblogs.com/shangshicc/p/3714331.html
Copyright © 2011-2022 走看看