一:JDBC编程六步骤:
-
注册驱动
-
获取连接(表示JVM进程和数据库进程通道打开了,这属于进程之间的通信,重量级,使用完一定要关闭)
-
获取数据库操作对象(专门执行sql语句的对象)
-
执行SQL语句
-
处理查询结果集
-
释放资源(千万要记得开启后,一定要关闭)
二:注册驱动,获取连接,获取数据库操作对象:
注册驱动:有两种方式:
法1:
import java.sql.Dirver; import java.sql.DirverManager; import java.sql.SQLException; ? Driver dirver=new com.mysql.jdbc.Driver();//多态,夫类型引用指向子类型的对象,这里的driver不是java当中的,而是mysql实现类包中的,所以需要写上包名来区分 DriverManager.registerDriver(dirver);//这是注册驱动的方法,必须要死记住,后面的dirver是mysql当中的方法类dirver,java.sql包中的dirver是一个接口,而不能直接new一个。
法2:十分常用
//类加载机制,当加载类的时候,静态代码块会执行 Class.forName("com.mysql.jdbc.Driver"); //为什么这种方法常用:因为括号里面是个字符串,字符串可以写到文件当中
注意:需要抛出异常,放在try,catch块当中
获取连接:getconnection,需要抛出异常
String url="jdbc:mysql://localhost:3306/hanxiao";//固定格式,localhost可以写成127.0.0.1,后面的hanxiao时数据库的名字,通信协议+Ip地址+服务器上的端口+服务器上某个资源名 String user="root"; String password=""; Connection conn=DirverManager.getConnection(url,user,passowrd);
获取数据库操作对象:获取statement对象:
//statement专门执行SQL语句的 Statement stmt=conn.createStatement();//create statement对象 ? //专门执行DML语句 String sql="insert into dept(deptno,dname,loc) values(50,‘人事部‘,‘北京‘)"; ? //返回值是“影响数据库中的记录条数”,只能进行 int count=stmt.executeUpdate(sql);
重点:只能进行增删改,若想进行查询操作,看接下来的笔记
释放资源:
//为了保证资源一定释放,在finally语句快中关闭 //并且遵循资源从小到大依次关闭 //分别对其try,catch try{ if(stmt!=null){ stmt.close(); } }catch(SQLexception e){ e.printStackTrace(); } try{ if(conn!=null){ conn.close(); } }catch(SQLexception e){ e.printStackTrace(); }
上述写成的代码:
package cc.bb.aa; import java.sql.*; ? ? public class TwoTest { public static void main(String[] args) { Connection conn = null; Statement stmt = null; try { //1.注册 DriverManager.registerDriver(new com.mysql.cj.jdbc.Driver()); String url="jdbc:mysql://localhost:3306/hanxiao"; String user="root"; String password=""; //2.获取连接 conn=DriverManager.getConnection(url,user,password); //statement专门执行SQL语句的 //3.获取数据库对象 stmt=conn.createStatement();//create statement对象 ? //专门执行DML语句 String sql="insert into dept(deptno,dname,loc) values(50,‘人事部‘,‘北京‘)"; ? //返回值是“影响数据库中的记录条数”,只能执行增删该,不能进行查询数据 int count=stmt.executeUpdate(sql); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally {//这里关闭数据,释放资源 try{ if(stmt!=null){ stmt.close(); } }catch(SQLException e){ e.printStackTrace(); } try{ if(conn!=null){ conn.close(); } }catch(SQLException e){ e.printStackTrace(); } } } }
三:处理查询结果集:
Connection conn=null; Statement stmt=null; ResultSet rs=null;//这是一个接口,到时候查询的对象就是rs,而且最后finally释放对象的时候,从下往上依次释放 try{ //1.注册驱动 Class.forName("com.mysql.jdbc.Driver"); //2.获取连接 conn=DriverManager.getConnection("jdbc:mysql//localhost:3306/hanxiao","root",""); //3.获取数据库操作对象 stmt=conn.createStatement(); //4.执行sql语句 String sql="select empno,ename,sal from emp"; //注意,这里变化了 //int excuyeUpdate(insert/delete/update);//返回int //ResultSet excuteQuery(sql);//返回值是ResultSet rs=stmt.excuteQuery(sql); //处理查询结果集:这些都是可以是使用的 //使用next方法来控制下标的位置,是按照行来的 //使用getstring()方法来获取相对应的列 //使用while方法来循环遍历 while(rs.next()){ String empno=rs.getString(1/empno);//1代表第一列 String ename=rs.getString(2/ename);//2代表第二列 String sal=rs.getString(3/sal);//3代表第二列 } }