一、JDBC
什么是JDBC?
Java Database Connectivity:Java访问数据库的解决方案。
它是一种解决方案,里面定义了一套标准接口API,能够用同样的方式访问和操作不同厂商数据库。
如何使用JDBC?
想要使用JDBC,需要先了解与之相关的类与接口:
a,驱动管理类 DriverManage
b,连接接口 Connection
c,语句对象接口 Statement
d,结果集接口 ResultSet
操作步骤:
使用JDBC需要下载导入对应的数据库的驱动,在项目的根目录下新建lib文件,此文件夹只作为我们的架包目录。
我用的是Java8.0的支持的驱动包
导入之后选中,右键Build Path -->>Configu....构建路径。
1,驱动类的注册
使用驱动管理类 DriverManage,加载驱动类,通过Class.forName( )方法,完成驱动类的注册。
Class.forName("com.mysql.cj.jdbc.Driver");
2,获取Connection 链接对象。
根据URL连接参数找到与之匹配的Driver对象, 调用其方法获取连接。
(Driver:提供对特定磁盘驱动器或网络共享属性的访问。这里指的是数据库)
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/Login?serverTimezone=GMT", "root", "123456");
链接字符串:不同的数据库字符串不同,比如Oracle的是Oracle: jdbc:oracle:thin:@
数据库地址:数据库的地址以及端口号 localhost:本机IP 3306:MySQL默认 端口号
数据库名:具体要连接数据库服务器上的数据库名字
3,使用Statement接口,用于执行SQL语句
①获取Statement对象
Statement statm = conn.createStatement();
②执行SQL语句
//执行DQL(查询)语句使用executeQuery
ResultSet rs = statm.executeQuery(sql(字符串));
返回的结果是结果集,需要解析,(遍历解析);
//执行DML(增,删,改)语句使用executeUpdate
int ret = statm.executeUpdate(sql(字符串));
返回的结果是数据库虚拟表的影响行数,int类型(可以用if判断是否修改成功);
注意:如果有使用到事务的情况,由于使用Mysql的事务,自动提交默认会关闭,我们执行DMQ时,并不会对数据库参生影响。需要我们手动提交Commit和回滚Rollback
int ret = tmapper.deleteTeacher(t);
if (ret>0) {
sqlSession.commit();
System.out.println("成功");
}else {sqlSession.rollback();
System.out.println("失败");
}
事务(Transaction),就是将一组SQL语句放在同一批次内去执行,如果一个SQL语句出错,则该批次内 的所有SQL都将被取消执行。
4,关闭并释放资源
数据库执行完毕以后要释放资源;
方法:对象.close();
Connection
conn.close();
Statement
statm.close();
ResultSet
ret.close();
看两个完整的例子:
①DQL解析查询:
public List<Student> findAllStudent(){
List<Student> slist = null;
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/myschool?serverTimezone=GMT", "root", "123456");
Statement statm = conn.createStatement();
ResultSet ret = statm.executeQuery("select * from student");
if(ret != null) {
slist = new ArrayList<Student>();
while(ret.next()) {
Student s = new Student();
s.setBirthday(ret.getDate("birthday"));
s.setClassid(ret.getInt("classid"));
s.setSid(ret.getInt("sid"));
s.setSname(ret.getString("sname"));
s.setSsex(ret.getString("ssex"));
slist.add(s);
}
}
if(ret != null) {
rs.close();
}
if(statm != null) {
statm.close();
}
if(conn != null) {
conn.close();
}
return slist;
}
②DML增删改例子:
public boolean addStudent(Student s) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
boolean isture=false;
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/myschool?serverTimezone=GMT", "root", "123456");
Statement statm = conn.createStatement();
String sql = "insert into student(sname,birthday,ssex,classid)" values('"+s.getSname()+"','"+ sdf.format(s.getBirthday()) +"','"+s.getSsex()+"',"+s.getClassid()+")";
int ret = statm.executeUpdate(sql);
if(ret > 0) {
istrue = true;
}
if(statm != null) {
statm.close();
}
if(conn != null) {
conn.close();
}
return istrue;
}
注:以上代码均为文本演示,以简洁直观为主,不可直接引用。