JDBC(2)

(1)

package day20151102JDBC;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

/**
 * 测试使用JDBC连接oracle数据库
 * 
 * JDBC工作过程:

-加载驱动,建立连接
  (加载驱动靠driverManager,并且通过driverManager获取连接connection)

-创建语句对象
  通过connection创建statement。用于执行sql语句

-执行sql语句

-处理结果集
  若执行的是Select语句,会产生结果集resultSet

-关闭连接
   调用connection的close方法
 */
public class JDBCDemo {
    public static void main(String[] args) {
        try{
            //加载驱动
            Class.forName("oracle.jdbc.driver.OracleDriver");
            /*
             *当出现了:
             *java.lang.ClassNotFoundException:
             * oracle.jdbc.driver.OracleDriver
             * 
             * 这个异常时,索命数据库的驱动jar包没有导入到项目中
             * 
             * 若导入了jar包还报这个错,大部分原因是书写驱动有错误
             */

            /*
             * 通过DriverManager获取数据库连接
             * 注意导入的包都在java.sql.*
             * 
             * DriverManager连接oracle时的路径格式
             * jdbd:oracle:thin:@1<host>:<port>:<sid>
             * 
             * Mysql的路径:
             * jdbc:mysql://<host>:<port>/<dbname>
             * mySql端口号port通常是3306
             * dbname:数据库的名字
             * 
             * (mysql的jar包 mysql-connection-java-5.0.4-bin.jar)
             * mysql加载驱动:class.forname("com.mysql.jdbc.Driver");
             */
            Connection conn = DriverManager.getConnection(
                    "jdbc:oracle:thin:@localhost:1521:xe",
                    "username", 
                    "password");
            /*
             * 通过Connection创建Statement
             * 用来执行sql语句
             */
            Statement state = conn.createStatement();
            /*
             * boolean flag = state.excute(sql)
             * 用于执行ddl语句(创建表删除表等),
             * 返回结果为DDL语句是否执行成功
             * 
             * ResultSet rs = state.executeQuery(sql)
             * executeQuery用于执行Select语句
             * 
             * int num =state.executeUpdate(sql)
             * 用于增删改(DML语句)
             * 返回值是影响了多少条数据
             */
            /*
             *通过Statement执行查询语句
             *查询emp表中的信息
             *SELECT empno,ename,sal,deptno FROM emp_ls; 
             */
            String sql = "SELECT empno,ename,sal,deptno FROM emp";

            //输出sql,用于检查拼写是否有错
            System.out.println(sql);
            /*
             * 使用executeQuery来执行DQL语句
             * 并且会得到结果集
             */
            ResultSet rs = state.executeQuery(sql);
            /*
             * 需要注意的是,ResultSet表示的
             * 是查询结果,但实际上查询的结果集
             * 在oracle数据库服务器上,并没有全部
             * 保存在本地,所以,关闭连接不可放在此处
             */

            while(rs.next()){
                int empno = rs.getInt("empno");
                String name = rs.getString("ename");
                double salary = rs.getDouble("sal");
                int deptno = rs.getInt("deptno");
                System.out.println(empno+","+name+","+salary+","+deptno);
            }
            //关闭连接
            conn.close();
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}

———————————————->>>
config.properties

#井号后是注释,驱动
driver=oracle.jdbc.driver.OracleDriver
#数据库地址
url=jdbc:oracle:thin:@localhost:1521:xe
#用户名
user=username
#密码
psw=password
initsize=1
maxactive=1
maxwait=5000
maxidle=1
minidle=1

Demo2

package day20151102JDBC;

import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Properties;

/**
 * 测试配置文件的读取
 * config.properties
 */
public class JDBCDemo2 {
    public static void main(String[] args) {
        try{
            //java.util.Properties;
            /*
             * Properties类用于读取properties文件
             * 使用该类可以以类似map的形式读取配置
             * 文件中的内容
             * 
             * properties文件中的内容格式类似:
             * user=userid
             * 等号左边就是key,右边就是value
             */
            Properties prop = new Properties();
            /*
             * 使用Properties去读取配置文件
             */
            // ./src/day01/config.properties在tomcat中不好用,这里暂时这么用
            FileInputStream fis = new FileInputStream("./src/day20151102JDBC/config.properties");
            /*
             * 当通过Properties读取文件后,那么这个
             * 流依然保持打开状态,我们应当自行关闭
             */
            prop.load(fis);
            fis.close();
            System.out.println("成功加载完毕配置文件");
            /*
             * 当加载完毕后,就可以根据文本文件中
             * 等号左边的内容key来获取等号右边的
             * 内容value了
             * 可以变相的把Properties看做是一个Map
             */
            String driver = prop.getProperty("driver");
            String url = prop.getProperty("url");
            String user = prop.getProperty("user");
            String psw = prop.getProperty("psw");
            System.out.println(driver+","+url+","+user+","+psw);


            Class.forName(driver);
            Connection conn = DriverManager.getConnection(
                    url,
                    user,
                    psw);

            Statement state = conn.createStatement();
            String sql = "SELECT empno,ename,sal,deptno FROM emp";
            ResultSet rs = state.executeQuery(sql);
            while(rs.next()){
                int empno = rs.getInt("empno");
                String name = rs.getString("ename");
                double salary = rs.getDouble("sal");
                int deptno = rs.getInt("deptno");
                System.out.println(empno+","+name+","+salary+","+deptno);
            }
            //关闭连接
            conn.close();
        }catch(Exception e){

        }
    }

}

DBUtil类

package day20151102JDBC;

import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;

/**
 * 使用配置文件来配置JDBC连接数据库 该类用来管理数据库的连接
 */
public class DBUtil {
    //连接数据库的路径
    private static String url;
    //用户名
    private static String user;
    //密码
    private static String psw;
    //用于管理不同线程所获取的连接
    private static ThreadLocal<Connection> tl = new ThreadLocal<Connection>();
    //map
    //private static Map<Thread,Connection> map= new HashMap<Thread,Connection>();

    // 静态块
    static {

        try {
            // 读取配置文件
            Properties prop = new Properties();
            // 此处默认src为当前目录,适合tomcat,推荐使用
            InputStream is = DBUtil.class.getClassLoader()
                    .getResourceAsStream("day20151102JDBC/config.properties");
            prop.load(is);
            is.close();
            String driver = prop.getProperty("driver");
            url = prop.getProperty("url");
            user = prop.getProperty("user");
            psw= prop.getProperty("psw");
            System.out.println(driver+","+url+","+user+","+psw);
            //注册驱动
            Class.forName(driver);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    /**
     * 获取一个连接
     * @return
     */
    public static Connection getConnection() throws Exception{
        try{
            //Thread t = Thread.currentThread();
            //System.out.println("util Connection所在的进程:"+t);
            /*
             * 通过DriverManager创建数据库的连接
             * 并返回
             */
            Connection conn =  DriverManager.getConnection(url,user,psw);
            //map.put(t, conn);
            /*
             * ThreadLocal的set方法
             * 会将当前线程作为key,并将给定的值
             * 作为value存入内部map中保存
             */
            tl.set(conn);
            return conn;
        }catch(Exception e){
            e.printStackTrace();
            throw e;
        }
    }
    /**
     * 关闭给定的连接
     */
    public static void closeConnection(){
        try{
            //Thread t = Thread.currentThread();
            //System.out.println("utilclose:"+t);
            //Connection conn=map.get(t);
            /*
             * 用ThreadLocal来获取Connection
             */
            Connection conn=tl.get();
            if(conn != null){
                conn.close();

                //不再使用了,删除ThreadLocal中此map元素
                tl.remove();
            }
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}

DBUtil2

package day20151102JDBC;

import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;

import org.apache.commons.dbcp.BasicDataSource;

/*
 * 使用连接池技术管理数据库连接
 */
public class DBUtil2 {
    //连接池
    private static BasicDataSource ds;
    //为不同线程管理连接
    private static ThreadLocal<Connection> tl;

    static{
        try{
            // 读取配置文件
            Properties prop = new Properties();
            // 此处默认src为当前目录,适合tomcat,推荐使用
            InputStream is = DBUtil.class.getClassLoader()
                .getResourceAsStream("day20151102JDBC/config.properties");

            prop.load(is);
            is.close();
            //初始化连接池
            ds= new BasicDataSource();
            //设置驱动(Class.forName())
            ds.setDriverClassName(prop.getProperty("driver"));
            //设置url
            ds.setUrl(prop.getProperty("url"));
            //设置数据库用户名
            ds.setUsername(prop.getProperty("user"));
            //设置数据库密码
            ds.setPassword(prop.getProperty("psw"));
            //设置初始连接数
            ds.setInitialSize(Integer.parseInt(prop.getProperty("initsize")));
            //设置连接池最大连接数
            ds.setMaxActive(Integer.parseInt(prop.getProperty("maxactive")));
            //设置最大等待时间
            ds.setMaxWait(Integer.parseInt(prop.getProperty("maxwait")));
            //设置最小空闲线程数
            ds.setMinIdle(Integer.parseInt(prop.getProperty("minidle")));
            //设置最大空闲线程数
            ds.setMaxIdle(
                    Integer.parseInt(
                            prop.getProperty("maxidle")));

            //初始化线程本地
            tl = new ThreadLocal<Connection>();

        }catch(Exception e){
            e.printStackTrace();
        }
    }
    public static Connection getConnection() throws SQLException{
        Connection conn = ds.getConnection();
        tl.set(conn);
        return conn;
    }
    //关闭数据库连接
    public static void  closeConnection(){
        try{
            Connection conn = tl.get();
            if(conn != null){
                /*
                 * 通过连接池获取的Connection
                 * 的close方法实际上兵灭有将连接关闭,
                 * 而是将该连接归还
                 */
                conn.close();
                tl.remove();
            }
        }catch(Exception e){
            e.printStackTrace();
        }

    }

}

Demo3

package day20151102JDBC;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;

public class JDBCDemo3 {

    /**
     * 通过DBUtil获取连接,并执行sql
     */
    public static void main(String[] args) {
        try{
            //Connection conn = DBUtil.getConnection();
            Connection conn = DBUtil2.getConnection();
            System.out.println("数据库已连接");
            Statement state = conn.createStatement();
            String sql = "SELECT * FROM emp";
            //执行sql,得到结果集
            ResultSet rs = state.executeQuery(sql);
            while(rs.next()){
                int empno = rs.getInt("empno");
                String ename = rs.getString("ename");
                double sal = rs.getDouble("sal");
                int deptno = rs.getInt("deptno");
                System.out.println(empno+",,,"+ename+","+sal+","+deptno);
            }
            /*
             * 当不再使用statement执行其他sql时,
             * 应即使关闭statement
             * 以释放JDBC与数据库的资源占用
             */
            state.close();
            //使用后关闭连接
            //DBUtil.closeConnection();
            DBUtil2.closeConnection();
        }catch(Exception e){
            e.printStackTrace();
        }
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值