JDBC总结

54 篇文章 0 订阅
48 篇文章 0 订阅

首先介绍下JDBC是java写的,跟数据库建立Socket连接,采用具体网络协议把JDBC转换为直接的网络调用

1最基本的JDBC使用

1获取驱动
				Driver driver = new OracleDriver();
2获取连接
				Connection conn = driver.connect(url,info)	 url是连接地址  info用户名密码是properties类型
但是如上的写法直接创造了产商的实现类 绕过了java提供的JDBC接口 移植性不好

因为上述方法在编译时就确定了对象了 所以如果我们想在运行时创建对象,就可以用反射:

2利用反射获取连接

String driverClassName  = "oracle.jdbc.driver.OracleDriver"
1获取驱动
				Class clazz = Class.forName(driverClassName);
				Driver driver =(Driver)  clazz.newInstance();
 
如上的方法可以直接更改driverClassName字符串就可以改变所用的驱动 也可以放到文件中 可移植性增强!

但是如上方法info都是properties对象 我们更倾向用两个简单的String来处理

3驱动管理类DriverManager获取连接

1首先需要注册驱动
					String driverClassName  = "com.mysql.jdbc.Driver"
					Class clazz = Class.forName(driverClassName);
				    Driver driver =(Driver)  clazz.newInstance();
				    DriverManager.registerDriver(driver);//注册驱动
2获取连接
					DriverManager.getConnection(url,username,password)   这里username password就都是String了!~

4然而让我们看看厂商提供的驱动,Driver类对象静态代码块中已经注册了驱动 所以我们加载类即可
因为驱动底层Driver类对象静态代码块中已经注册了驱动 所以我们加载类即可
最终方便简单方法:所以我们只需要把类加载了 驱动也就OK了 所以最后代码变成如下:

	String driverClassName  = "com.mysql.jdbc.Driver"
	String url;
	String user;
	String password;
	Class clazz = Class.forName(driverClassName);
	DriverManager.getConnection(url,username,password) 
	可以将字符串提取到properties属性文件中 想要切换数据库的时候就可以直接改properties属性文件

分隔~~~~~~~~~~~~~~~~~~以下开始增删改查

利用PreparedStatement 发送sql语句给数据库服务器

PreparedStatement有个父接口 Statement 有很多弊端:
(1)需要使用拼串的形式,单双引号并用 麻烦
(2)用户可以输入 1‘ OR 1 = ’ 1字符串进行sql注入!
(3)效率比较低,PreparedStatement是预编译的sql 而 statement不是!

所以用PreparedStatement:
(1)获取连接 得到 Connection conn对象
(2)PreparedStatement ps = conn.prepareStatement(sql);             //注意 此时sql的参数用?  即占位符  可以防止sql注入!
(3)ps.set....给占位符填参数
(4)int row = ps.executeUpdate() 增删改都通用 返回影响的行数~
			查询:ResultSet rs =  ps.executeQuery() 返回ResultSet对象,即查询得到的结果集
					   while(rs.next()){
					   				rs.get....//此处可以用ORM对象关系映射原理封装成一个对象保存数据
					   }    
(5)关闭连接 从下往上关(先关闭ResultSet PreparedStatement  后关闭Connection)
sql不明白咋写的请走 https://blog.csdn.net/weixin_40695328/article/details/89323481

上图方法中增删改是通用的 所以可以提出来用方法传参来给参数~

将以上方法改造成完全通用的形式(适用于任何表 通用地查询任何对象):
(1)利用泛型确定返回值类型,利用反射在运行时动态返回对象
(2)利用ResultSetMetaData结果集的元数据  

PreparedStatement批量处理

有时候如果我们需要插入很多数据 可以用批量处理:
在循环当中设置属性后
调用PreparedStatement 的addBatch(); 
			在达到你要的数量级后调用 executeBatch()  并且 clearBatch();
可以达到存储一定数量级的插入数据或者删除数据一次性执行~

(1)mysql批量处理默认是关闭状态:需要在jdbc的url后面添加?rewriteBatchedStatements=true
(2)也需要注意mysql驱动版本问题
			 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值