1、面向对象与多线程综合实验-数据库操作,教师:段鹏飞,实验5-实验目的,理解 JDBC的特点,结构,应用模型; 了解JDBC驱动程序的类型; 掌握通过JDBC访问数据库执行SQL 语句的方法,实验内容,编写程序,实现原来程序中关于用户、文档信息的数据库操作。要求:编写程序,将前面课程所编写的档案管理系统的数据管理方式改写为数据库存储。(建议将所有数据库操作封装在DataProcessing类中,并保留原来接口,这样可保持原有程序不做大的变化)。,数据库操作示例,import java.sql.*; /导入java.sql包 public class JDBCDemo public static
2、void main(String args) String strCon = “jdbc:mysql:/59.69.101.2:3306/javadb“; /连接字符串String strUser = “root“; /数据库用户名String strPwd = “root“; /口令System.out.println(“正在连接数据库.“);try /监控异常Class.forName(“com.mysql.jdbc.Driver“); /加载驱动程序Connection con;/获得连接对象con = DriverManager.getConnection(strCon, strUse
3、r, strPwd);System.out.println(“成功连接到数据库。“);Statement sta = con.createStatement(); /创建语句对象/执行SQL语句String strSql = “DELETE FROM Friends WHERE Name = 郑六“;int count = sta.executeUpdate(strSql);System.out.println(“成功删除“ + count + “行数据。“);sta.close(); con.close(); /关闭所有已经打开的资源 catch (ClassNotFoundExceptio
4、n cnfe) cnfe.printStackTrace(); catch (SQLException sqle) sqle.printStackTrace(); ,操作结果集,使用Statement对象的executeQuery方法成功执行SELECT语句后,将返回一个包含有结果数据的ResultSet对象,要从该对象中获取数据,将使用到如下方法:,操作结果集示例,try String strCon = “jdbc:odbc:MyODBC“;System.out.println(“正在连接数据库.“);Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver“)
5、;Connection con;con = DriverManager.getConnection(strCon, “sa“, “);System.out.println(“成功连接到数据库。“);Statement sta = con.createStatement();ResultSet rs = sta.executeQuery(“SELECT * FROM Friends“);System.out.println(“查询到数据如下:“);while (rs.next() /循环将结果集游标往下移动,到达末尾返回false/根据字段名称获得各个字段的值System.out.print(r
6、s.getString(“Name“) + “t“); /获得字符串System.out.print(rs.getString(“Address“) + “t“); /获得字符串System.out.print(rs.getInt(“Telephone“) + “t“); /获得整数System.out.print(rs.getDate(“HireDate“) + “t“); /获得日期型数据System.out.println(rs.getFloat(“Salary“); /获得浮点型数据rs.close(); sta.close(); con.close(); catch (ClassNo
7、tFoundException cnfe) cnfe.printStackTrace(); catch (SQLException sqle) sqle.printStackTrace(); ,Sql语句,“select * from table where uname=”+name+” and psw=”+psw+”; insert into table (id, uname, psw) values (1, abc, 123); update table set uname=abc where id=3; delete from table where id=3;,PreparedStat
8、ement接口1,如果要多次执行相似的SQL语句,可以使用PreparedStatemend(预编译语句对象)对象来执行; 通过Connection对象的prepareStatement方法来创建预编译语句对象;PreparedStatement对象会将SQL语句预先编译,这样将会获得比Statement对象更高的执行效率。,PreparedStatement接口2,包含在PreparedStatement对象中的SQL语句可以带有一个或多个参数,使用“?”作为占位符,如:PreparedStatement ps = con.prepareStatement(“UPDATE Friends S
9、ET Address = ? WHERE Name = ?“); 在执行SQL语句之前,必须使用PreparedStatement对象中的setX方法设置每个“?”位置的参数值;如:ps.setString(1, “长沙“);ps.setString(2, “王五“);,PreparedStatement接口3,设置好每个参数的值之后,就可以使用PreparedStatement对象的executeUpdate和executeQuery方法来执行SQL语句,这一点和Statement对象很相似:,PreparedStatement对象示例,String strCon = “jdbc:odbc:
10、MyODBC“; System.out.println(“正在连接数据库.“); Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver“); Connection con; con = DriverManager.getConnection(strCon, “sa“, “); System.out.println(“成功连接到数据库。“);PreparedStatement ps; /使用带参数的SQL语句创建PreparedStatement对象 ps = con.prepareStatement(“UPDATE Friends SET Address =
11、? WHERE Name = ?“); /设置SQL语句中的参数值 ps.setString(1, “长沙“); ps.setString(2, “王五“); int count = ps.executeUpdate(); /执行命令System.out.println(“成功更新了“ + count + “行数据。“); ps.close(); /关闭资源 con.close();,总结,JDBC是使用Java程序操作数据库的技术; 使用 Class类的forName 方法可以将驱动程序加载到 Java 解释器中; 使用DriverManager类的getConnection方法获得Connection对象,从而建立与数据库的连接;使用Connection对象的createStatement方法创建语句对象,以便执行SQL语句; 使用Statement对象的executeQuery或executeUpdate方法执行SQL语句,并使用ResultSet对象来操作结果数据; PreparedStatement接口允许创建预编译的SQL语句,并使得在后续阶段可以指定语句的参数。,谢谢,