packagecn.tedu.jdbc;importjava.sql.*;//提供丰富的方法,方便的jdbc操作publicclassJDBCUtils{//1,获取数据库的连接(注册驱动+获取连接)/**
* 获取数据库的连接
* @return 数据库的连接对象Connection
* @throws Exception
*/staticpublicConnectiongetConnection()throwsException{//1,注册驱动Class.forName("com.mysql.jdbc.Driver");//全路径//2,获取数据库的连接(用户名/密码)//jdbc连接mysql数据库的协议//本机:端口号/数据库的名字 解决中文乱码 指定时区 关闭权限检验String url="jdbc:mysql://localhost:3306/cgb2108?characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false";Connection c =DriverManager.getConnection(
url,"root","root");return c ;//返回给调用者}/**
* 释放资源,提取了长长的代码
* @param r 结果集资源
* @param s 传输器资源
* @param c 连接资源
*/staticpublicvoidclose(ResultSet r,PreparedStatement s,Connection c){if(r !=null){//避免了空指针异常try{
r.close();}catch(SQLException throwables){
throwables.printStackTrace();}}if(s !=null){try{
s.close();}catch(SQLException throwables){
throwables.printStackTrace();}}if(c !=null){try{
c.close();}catch(SQLException throwables){
throwables.printStackTrace();}}}}
–2,修改测试类
packagecn.tedu.jdbc;importjava.sql.Connection;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.sql.SQLException;//JDBC的练习publicclassTest3{publicstaticvoidmain(String[] args)throwsException{method();//查询部门表的<100数据// method2();//向dept表里插入数据}//向dept表里插入数据//为了资源一定会被释放?// 把释放资源的代码放入finally里+扩大变量的作用范围// +在try里修改变量的默认值null+在finally里进行try catchprivatestaticvoidmethod2(){//扩大变量的作用范围?因为想让finally也使用Connection c =null;PreparedStatement p =null;try{
c =JDBCUtils.getConnection();//插入数据时怎么决定要几个问号? 要看表里有几个字段需要设置值String sql ="insert into dept values(?,?,?)";
p = c.prepareStatement(sql);//设置SQL的参数
p.setObject(1,666);
p.setObject(2,"软件测试部");
p.setObject(3,"大山西");//执行SQLint rows = p.executeUpdate();//执行增删改的SQL//TODO 会返回结果集吗?返回了的是啥?System.out.println("影响的行数是: "+rows);}catch(Exception e){System.out.println("出错啦~");}finally{//资源的释放是一定要执行的//调用工具类里的close(),增删改没有结果集,就不关闭结果集了,传入null就行了JDBCUtils.close(null,p,c);}}//查询部门表的<100数据privatestaticvoidmethod(){Connection c =null;PreparedStatement s =null;ResultSet r =null;try{
c =JDBCUtils.getConnection();//利用工具类,获取数据库的连接//获取传输器,执行SQL骨架String sql ="select * from dept where deptno < ?";
s = c.prepareStatement(sql);//设置SQL的参数
s.setInt(1,100);//给第一个?设置100
r = s.executeQuery();//执行查询的SQL语句//处理结果集while(r.next()){//next()判断有数据吗//获取数据getXxx()--获取表里的dname字段的值,并打印String str = r.getString("dname");System.out.println(str);}}catch(Exception e){//项目上线阶段,给出的解决方案,比如输出System.out.println("数据库连接出错~~");//项目开发调试阶段,给出的解决方案,根据报错信息
e.printStackTrace();}finally{//关闭资源JDBCUtils.close(r,s,c);//调用工具类里的close()}}}