前言数据库的重要性不言而喻,无论是什么系统,什么应用软件,无论是Windows上的应用还是Web应用,存储(持久化转换)和查询(检索)数据是核心功能。学习数据库的时候,比如MySQL这个数据库管理系统,就是在CLI(CommandLineInterface)上操作数据库。现在,让我们看看在JavaWeb中如何使用Java来操作数据库。JDBCJDBC(JavaDataBaseConnectivity)是Java操作数据库的规范,也是一种API(与数据库系统通信的标准API),是一种技术。JDBC由一组用Java编写的类和接口组成,提供数据库操作的基本方法。但是对于数据库细节的操作,是由数据库厂商实现的。使用JDBC操作数据库需要数据库厂商提供的数据库驱动的支持。那么什么是数据库驱动呢?这个驱动可以理解为一个让数据库和Java交互的程序。简单来说,JDBC提供了一个API规范,告诉各大数据库厂商按照这个规范来实现这些API的具体实现代码。这个JDBC可以从两个角色的角度说。从我们开发者的角度来说,JDBC为我们的开发者提供了一个统一的操作数据库的API,而不管这些API的具体实现是什么,专注于API的调用;从数据库厂商的角度来看,JDBC为他们提供了一套标准的模型接口,并根据这个接口来实现。如何使用JDBC?JDBC的使用主要有以下几个步骤:将数据库驱动程序(databasedriverprogram)注册到JDBC驱动程序管理器中。在连接数据库之前,需要在JDBC驱动管理器中注册数据库厂商提供的数据库驱动类,通常通过将驱动类加载到JVM中来实现。Class.forName("com.mysql.jdbc.Driver");为数据库连接构建URL。要与数据库建立连接,您需要为数据库连接建立一个URL。该URL由数据库厂商指定,一般遵循一种基本格式,即JDBC协议+IP地址或域名+端口+数据库名。MySQL的URL是jdbc:mysql://localhost:3306/dbname来获取连接对象(Connectionobject)。Stringurl="jdbc:mysql://localhost:3306/dbname";Stringusername="root";Stringpassword="123456";//Connection对象的获取需要借助DriverManager对象Connectionconn=DriverManager.getConnection(网址、用户名、密码);用于数据库操作。编写SQL,然后获取PreparedStatement对象,执行SQL语句。SQL语句的参数可以用占位符“?”代替,然后通过PreparedStatement对象为SQL语句中的占位符赋值。这里Statment这个词的意思指的就是SQL语句。//写入SQLStringsql="INSERTINTOtb_game(name,price,platform)values(?,?,?)";//获取PreparedStatement对象PreparedStatementps=conn.preparedStatement(sql);//将ps赋给占位符.setString(1,"NBA2K");ps.setDouble(2,198.0);ps.setString(3,"Windows");//执行SQL,将这条数据写入数据库,返回受影响的行数introw=ps.executeUpdate();使用PreparedStatement对象给SQL语句的占位符参数赋值,参数的下标从1开始。关闭连接conn.close();CRUD新操作新操作就是上面的插入操作,请看上文。查询操作ResultSet使用JDBC查询数据,与插入数据的操作过程基本相同,只是在执行完查询操作后,需要一个对象来接收查询结果,这个对象就是ResultSet(结果集)。ResultSet是一个封装在JDBCAPI中的对象,所有从数据表中查到的记录都会放在这个集合中。ResultSet维护一个游标(cursor)指向当前数据行(datarecord)。初始化时,游标指向第一行之前的行。可以通过next()方法移动光标,使光标指向下一行。调用此next()并返回一个布尔值。如果为true,说明ResultSet中还有下一行数据,如果为false,说明没有数据。因此,可以使用该方法结合while循环来遍历整个ResultSet。//由于初始游标在第一行的上一行,执行next()后,游标指向第一行的数据while(resultSet.next()){//处理每一行的数据结果集}得到ResultSet对象后,移动光标指定数据行,然后使用ResultSet对象提供的一系列getXxxx()方法获取当前行的数据,如resultSet.getInt("price")获取当前行中名为price的字段的数据。默认的ResultSet是不可更新的,它的游标只能一步步往下走,而且只能走一次,不能回到上一行。说到默认,就是说可以通过下面的代码来设置://rs是可以滚动的,即光标到达末尾会回到开头,其内容是可以改变的。查询所有价格大于50元的游戏:Stringsql="SELECTid,name,priceFROMtb_gameWHEREprice>?";PreparedStatementps=conn.preparedStatement(sql);ps.setDouble(1,50);//执行查询ResultSetrs=ps.executeQuery(sql);List
