JDBC(1)----------基础和简单实现案例

1. JDBC是由SUN公司提出的一组规范,这组规范主要是由一组接口构成。主要作用就是访问数据库。

2、JDBC核心编程思想:


3、核心API


4、使用JDBC开发(java工程,Oracle数据库):

1)搭建开发环境:

        创建一个java project ------> 引入(数据库驱动jar)ojdbc6.jar

2)编码(伪代码):

        a)加载驱动:将实现类加载到内存中   Class.forName("oracle.jdbc.OracleDriver");

        b)获取Connection      Connection conn = DriverManager.getConnection(url,username,password);

        c)准备sql语句         String sql = "";

        e)获取PreparedStatement对象   PreparedStatement psmt = conn.preparedStatement(sql);

        f)sql语句是增删改语句:

                    int i = psmt.executeUpdate();   //返回更新的行的个数

            sql语句是查询语句:

                    ResultSet  rs = psmt.executeQuery();    //返回的结果集,常用方法 next()

        g)释放资源,关闭连接,包括:conn,rs,ps

注意:引入(数据库驱动jar)两种方式:

第一种方式:右键--->bulid path--->config build path-->  Librarys -- > add Externaljar(到本地磁盘找到jar包所在位置)

第二种方式:在项目名上右键 new folder --> 将驱动jar放到此目录下 --> 在jar包上右键 -->build path -->add to build path

5、在4题操作中,书写sql语句,可以用占位符 ‘?’,但是我们需要进行匹配占位符(利用setXXX(),getXXX()),详细做法在下面会用示例展示。

6、Statement 和 PreparedStatement的区别:

        a)使用Statement执行sql,是以字符串拼接方式给sql语句加入参数,这是增加了Sql注入的风险

        b)使用PreparedStatement 可以避免sql注入,提高程序的可读性、可维护性。

7、java中的日期类型:

    a)java.util.Date   utilDate = new java.util.Date();

    b)java.sql.Date   sqlDate = new java.sql.Date(utilDate.getTime());

    c)实际应用转换:字符串日期格式

    String str='2018-4-8';

    SimpleDateFormat sdf = new SimpleDateFormat('yyyy-MM-dd');

    java.util.Date  utilDate  = sdf.parse(str);

    long time = utilDate.getTime();

    java.sql.Date sqlDate = new java.sql.Date(time);

8、JDBC工具类封装

    无论是对数据查询操作还是增、删、改操作,都相同代码,此时,我们需要将此代码进行封装。

    封装思路:a)确定工具类中封装那些方法:方法的修饰符   返回值类型  都是什么。

                    对于工具类而言:修饰符是 public static  目的:便于类名直接调用

                                               返回值类型: 根据实际实现的功能而定

                                               方法名:做到见名知义

9、封装JDBCUtil例1如下 :

public class JDBCUtil {
	static{
		try {
			Class.forName("oracle.jdbc.OracleDriver");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	public static Connection getConnection(){
		Connection conn = null;
		try {
			conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:ORCL","hr","123");
		} catch (Exception e) {
			e.printStackTrace();
		}
		return conn;
	}
	
	public static void closeAll(PreparedStatement ps,Connection conn,ResultSet rs){
		try{
			if(rs != null){ // 避免空指针异常
				rs.close();
			}
			if(ps != null){
				ps.close();
			}
			if(conn != null){
				conn.close();
			}
		}catch(Exception e){
			e.printStackTrace();
		}
	}
}

10、对于9中的代码,我们如果更改数据库、用户名、密码,我们操作需要打开源代码进行更改,那么有没有一种方法,不用打开源代码就能更新成功呢?答案是 有。利用文件、配置文件等方式,我们通常用XXX.properties和XXX.xml,在本题中我们应该选用哪一种比较好呢?

        注:xxx.XML类型的配置文件          特点:以标签的形式保存信息;

               xxx.properties类型配置文件    特点:以key = value形式保存信息

以上特点:相比之下,我们选用XXX.properties,因为我们文件中保存的信息是key=value形式

优化如下:

      创建一个jdbc.properties配置文件,放在src根目录下,内容:

driverClassName=oracle.jdbc.OracleDriver
url=jdbc:oracle:thin:@127.0.0.1:1521:ORCL
username=hr
password=123

        完成JDBCUtil的优化如下:

public class JDBCUtil {
	public static Properties p = new Properties();
	static{
		InputStream ins = null;
		try {
			ins = JDBCUtil.class.getResourceAsStream("/jdbc.properties");
			p.load(ins);
			Class.forName(p.getProperty("driverClassName"));
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			try {
				ins.close();
			} catch (IOException e) {
				e.printStackTrace();
			}	
		}	
	}
	public static Connection getConnection(){
		Connection conn = null;
		try {
			conn = DriverManager.getConnection(p.getProperty("url"),p.getProperty("username"),p.getProperty("password"));
		} catch (Exception e) {
			e.printStackTrace();
		}
		return conn;
	}
	
	public static void closeAll(PreparedStatement ps,Connection conn,ResultSet rs){
		try{
			if(rs != null){ // 避免空指针异常
				rs.close();
			}
			if(ps != null){
				ps.close();
			}
			if(conn != null){
				conn.close();
			}
		}catch(Exception e){
			e.printStackTrace();
		}
	}
}



        


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值