您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 数据库 > 第23课JDBC编程(下)1
深圳市计算机行业协会深圳市计算机行业协会1JDBC编程(下)内容概要对数据库进行SQL语句进行基本操作预编译语句使用事务事务的级别控制使用存储过程操作元数据可滚动的和可更新的结果集批处理更新字符大对象CLOB二进制大对象BLOBJDK5新特性对数据库进行SQL语句进行基本操作创建表:使用JDBC创建数据库表的步骤为:1,CreatingJDBCStatements2,ExecutingStatements3,EnteringDataintoaTable请看下列:importjava.sql.Connection;importjava.sql.Statement;publicclassCreateTable{publicCreateTable(){super();}publicstaticvoidmain(String[]args){Connectioncon=null;try{//通过连接池来获得一个连接con=DBCon.getConnectionFromPooledDataSource(jdbcPool/mydatasource);//创建语句对象Statementst=con.createStatement();//创建表的SQL语句Stringsql=createtablestudent(idint,namechar(30),ageint);//执行完SQL语句的结果深圳市计算机行业协会深圳市计算机行业协会2booleanb=st.execute(sql);//trueifthefirstresultisaResultSetobject;//falseifitisanupdatecountor//therearenoresultsif(b==false)System.out.println(createsuccess);elseSystem.out.println(createfail);}catch(Exceptione){e.printStackTrace();}finally{try{if(con!=null)//用完连接后,要关闭释放con.close();}catch(Exceptione){e.printStackTrace();}}}}下面给表插入值:importjava.sql.Connection;importjava.sql.Statement;publicclassInsertValues{publicInsertValues(){super();//TODOAuto-generatedconstructorstub}/***@paramargs*/publicstaticvoidmain(String[]args){Connectioncon=null;try{//通过连接池来获得一个连接con=DBCon.getConnectionFromPooledDataSource(jdbcPool/mydatasource);//创建语句对象Statementst=con.createStatement();深圳市计算机行业协会深圳市计算机行业协会3//给student表插入值的SQL语句Stringsql=insertintostudentvalues(1,'andy',47)+insertintostudentvalues(2,'jacky',53)+insertintostudentvalues(3,'周润发',51)+insertintostudentvalues(4,'谢贤',60);//执行完SQL语句的结果booleanb=st.execute(sql);//trueifthefirstresultisaResultSetobject;//falseifitisanupdatecountor//therearenoresultsif(b==false)System.out.println(insertsuccess);elseSystem.out.println(createfail);}catch(Exceptione){e.printStackTrace();}finally{try{if(con!=null)//用完连接后,要关闭释放con.close();}catch(Exceptione){e.printStackTrace();}}}}查询数据库里的数据Statement对象的execQuery()方法一般用于执行一个select语句,它只返回一个结果集,要想把查询结果最后显示给用户,必须对ResultSet对象进行处理。ResultSet对象包括一个由查询语句返回的一个表,这个表中包含所有的查询结果。对ResultSet对象的处理必须逐行进行,而对每一行中的各个列,可以按任何顺利进行处理。ResultSet对象维持一个指向当前行的指针(类似于Iterator的用法)。最初,这个指针指向第一行之前。ResultSet的next()方法使这个指针移向下一行。因此,第一次使用next()方法将指针指向结果集的第一行,这是可以对第一行的数据进行处理。处理完毕后,使用next()方法,将指针移向下一行,继续处理第二行数据。next()方法的返回值是一个boolean值,若为true,则说明指针成功地移向下一行,可以对该行进行处理。若返回值是false,则说明没有下一行,即结果集已经处理完毕。在对每一行进行处理时,可以对各个列按任意顺序进行处理。不过,按从左至右的顺序对各列进行处理可以获得较高的执行效率。ResultSet接口的getXXX()方法可以从某列中获得结果,XXX表示JDBC的数据类型。请看下例:importjava.sql.Connection;importjava.sql.ResultSet;深圳市计算机行业协会深圳市计算机行业协会4importjava.sql.ResultSetMetaData;importjava.sql.Statement;publicclassResultSetTest{publicResultSetTest(){super();//TODOAuto-generatedconstructorstub}/***@paramargs*/publicstaticvoidmain(String[]args){Connectioncon=null;try{//通过连接池来获得一个连接con=DBCon.getConnectionFromPooledDataSource(jdbcPool/mydatasource);//创建语句对象Statementst=con.createStatement();//定义一个查询的SQL语句Stringquery=selectid,namefromstudent;//获得一个结果集ResultSetrs=st.executeQuery(query);//获得结果集的元数据(表及的信息)ResultSetMetaDatarsmt=rs.getMetaData();//得到有几列,保存在num变量里intnum=rsmt.getColumnCount();String[]columns=newString[num];//列的序号是从1开始的for(inti=0;inum;i++)columns[i]=rsmt.getColumnName(i+1);//先输出列名for(inti=0;inum;i++)System.out.print(columns[i]+);//输出列名之后换行System.out.println();//取出结果while(rs.next()){//输出每一行的值for(inti=1;i=num;i++){Stringtemp=rs.getString(i);System.out.print(temp+);深圳市计算机行业协会深圳市计算机行业协会5}//输完后换行System.out.println();}}catch(Exceptione){e.printStackTrace();}finally{try{//用完后要关闭连接,释放资源if(con!=null)con.close();}catch(Exceptione){e.printStackTrace();}}}}输出结果为:(Eclipse环境)修改表的数据:importjava.sql.Connection;importjava.sql.Statement;publicclassUpdateTableTest{publicUpdateTableTest(){super();//TODOAuto-generatedconstructorstub}/***@paramargs*/publicstaticvoidmain(String[]args){Connectioncon=null;try{//通过连接池来获得一个连接深圳市计算机行业协会深圳市计算机行业协会6con=DBCon.getConnectionFromPooledDataSource(jdbcPool/mydatasource);//创建语句对象Statementst=con.createStatement();//修改表的SQL语句Stringsql=updatestudentsetname='刘德华'+whereid=1;//执行完SQL语句的结果introws=st.executeUpdate(sql);//如果更新成功的话,rows肯定是大于1的值if(rows0)System.out.println(updatesuccess);elseSystem.out.println(updatefail);}catch(Exceptione){e.printStackTrace();}finally{try{if(con!=null)//用完连接后,要关闭释放con.close();}catch(Exceptione){e.printStackTrace();}}}}预编译语句(PreparedStatement)Statement对象在每次执行SQL语句时都将该语句传给数据库,在多次执行同一语句时,这样做效率较低。这时可以使用PreparedStatement对象.如果数据库支持预编译,它可以将SQL语句传给数据库作预编译,以后每次执行这个SQL语句时,速度就可以提高很多。如果数据库不支持预编译,则在语句执行时,才将其传给数据库。这对用户来说是透明的。PreparedStatement对象的SQL语句还可以接受参数。在语句中指出需要接受哪些参数,然后进行预编译。在每一次执行时,可以给SQL语句传输不同的参数,这样就大大提高了灵活性。PreparedStatement接口是Statement接口派生的子接口,因此它可以使用Statement接口中的方法。请看下列代码:importjava.sql.Connection;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.sql.ResultSetMetaData;importjava.sql.Statement;深圳市计算机行业协会深圳市计算机行业协会7publicclassPrepareStatementTest{publicPrepareStatementTest(){super();//TODOAuto-generatedconstructorstub}/***@paramargs*/publicstaticvoidmain(String[]args){Connectioncon=null;try{//通过连接池来获得一个连接con=DBCon.getConnectionFromPooledDataSource(jdbcPool/mydatasource);//创建修改表的PrepareStatementSQL语句St
本文标题:第23课JDBC编程(下)1
链接地址:https://www.777doc.com/doc-2246222 .html