JDBC入门

简述

数据库上到JDBC了,也做了几个实验,在此总结几个入门的java操作数据库的常用方法。(不足,待添加,第一次先写statement和PreparedStatement)

使用jar包的一些遭遇

先说实验最开始吧,实验最开始,没怎么费力气,同学帮忙改了时区,添了8.0的jar包,在URL里加了使用ssl的声明,然后就成功连接,无异常
然后在第二次实验的那周不知道什么时候,发现去掉8.0的jar包连接,仅使用5.0的jar依然正常,就在IDE里把8.0的jar包去了,过了不久突然出现Communications link failure的奇怪错误,上网查了后,发现博客,似乎是因为长时间不用JDBC连接数据库的原因导致数据库自闭了,我:?!?!,你自闭个毛线,但想了想,这个设定估计是为了节省数据库的资源,猜想:第一次成功连接后,数据库一直处于等待状态,有资源在运行,所以设置了这个,防止长时间的等待。但该解决的问题也得解决,就按照博客上的办法各种修改,到最后发现毛用没有。后来上课时问了老师,老师问:你数据库版本是多少?把jar包换一下试试?然后就突然想起来,是不是去了jar包的原因,遂重新把8.0的jar包连接上,问题解决。
在此总结错误,对于5.0版本的mysql,使用5.0的jar包,对于8.0版本的mysql,应使用对应的8.0的jar包(似乎8.0的mysql,除了要连接8.0的jar包外,5.0的也需要?待实验,以后补充)

java中使用JDBC连接数据库

在此模仿老师的思路,新建一个DBUtil类,得到连接

import java.sql.Connection;

public class DBUtil {
	private static final String jdbcUrl="";
	private static final String dbUser="";
	private static final String dbPwd="";
	static{
		try {
			Class.forName("com.mysql.jdbc.Driver");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}
	public static Connection getConnection() throws java.sql.SQLException{
		return java.sql.DriverManager.getConnection(jdbcUrl, dbUser, dbPwd);
	}
}

jdbcUrl:连接数据库的钥匙,书写有点复杂,待补充
dbUesr:数据库用户名,一般为rooy
dbPwd:数据库密码
连接步骤:先调用Class.forName(“com.mysql.jdbc.Driver”)加载驱动,接着调用java.sql.DriverManager.getConnection(jdbcUrl, dbUser, dbPwd)得到一个类型为Connection的连接,返回即可
类的使用:使用时,新建Connection的变量赋值为DBUTil.getConnection(),即可

java中使用sql语句增删查改

Statement

单纯的查,有对应的executeQuery方法实现

Connection con = DBUtil.getConnection();
String sql = "select * from table";
java.sql.Statement st = con.createStatement();
java.sql.ResultSet rs = st.executeQuery(sql);

第一句,定义一个类型为Connection的变量con,同时调用之前连接写的DBUtil类的getConnection方法得到连接
第二句,书写sql语句,一般都是在数据库(navicat或者DataGrip)中书写好,运行正常后直接复制到双引号中,就可以正常使用
第三句,创建一个类型为Statement的st变量,暂且叫中间件吧(我是这么理解的),然后调用con的createStatement方法得到一个中间件方便下面sql语句的执行
第四句,创建一个结果集(ResuSet),名为st,通过st中间件的方法executeQuery带上sql语句参数,执行sql语句,得到结果返回给结果集

有关statement中间件的具体理解,我也没理解透,上网查到了一个博客 待看懂了再来补充

增删改

这三个基本都属于对数据库进行修改,所以用一个executeUpdate方法实现了

Connection con = DBUtil.getConnection();
String sql = "delete from table where ......";
java.sql.Statement st = con.createStatement();
int al = st.executeQuery(sql);//Affected lines

前三句基本相同,除了第二句换位增删改的语句以外
第四句,调用st的方法executeQuery执行sql语句,返回一个int值,为执行sql语句过后受影响的行数

PreparedStatement

还是单纯的查,和statement一样,有executeQuery

Connection con = DBUtil.getConnection();
String sql = "select * from table where clomne = ?";
java.sql.reparedStatement pst = con.prepareStatement(sql);
pst.setString(/*位置*/, /*替换字符*/);
java.sql.ResultSet rs = pst.executeQuery();

与statement略有不同
第一句相同
第二句,同样的是sql的查语句,但有了一个“?”,这里是为了实现带限制条件的查询,在statement里可以通过字符串的拼接实现,但PreparedStatement更好一些(具体比较下面再说),这里的问号可以不止一个,对应替换使用set…方法替换
第三句改了名字,同时在这里就sql语句传入
第四句调用pst的setstring方法,替换位置参数地方的问号为替换字符参数,同时前后加上单引号。例:pst.setString(1,“test”);,则替换后的待执行sql语句为"select * from table where clomne = ‘test’",如果想模糊查询加上通配符,需自己通过字符串拼接加上去。同时这里不止setString,还有set…,用法基本类似
第五句,调用pst的executeQuery方法,执行sql语句,同时返回结果集

增删改

类比statement,PreparedStatement也有executeUpdate方法,具体用法不再赘述,比statement多了PreparedStatement的替换操作。

小结

两个中间件(就叫中间件吧,待我回头问问老师),相比来说,第二个更好一些,同时第二个的性能要比第一个优秀,且第二个也可以不带替换的执行,性能比第一个更好,不用字符串拼接的奇怪错误。但具体为什么第二个优秀,找了一篇博客,先咕咕咕,待日后看懂了再来补充。
推荐StatementPreparedStatement

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值