首页 > 代码库 > JDBC数据库编程之数据库连接及操作数据

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添加数据库产品相关类库。(数据库驱动包)。配置驱动包的环境变量(ClassPath)

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();
            }
        }



    }

}

 

 

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