数据库编程


MySQL的安装与配置

MySQL官网

一、安装

下载安装体验


JDBC技术简介

JDBC是Sun提供的一套数据库编程接口API函数,由Java语言编写的类、界面组成。用JDBC写的程序能够自动地将SQL语句传送给相应的数据库管理系统。且其具有较好的跨平台性能。

JDBC为程序开发提供了标准的接口,并为数据库厂商及第三方中间件厂商实现与数据库的连接提供了标准接口。其工作原理图:

JDBC驱动程序的分类:

在实际开发中,第4种用的较多。


JDBC访问数据库

java.sql包中的主要类和接口

DriverManager(类);Connection(接口);Statement(接口);PreparedStatement(接口);ResultSet(接口)

一、DriverManager类

该类是JDBC的管理层,作用于用户和驱动程序之间。它跟踪可用的驱动程序,并在数据库和相应驱动程序之间建立连接。

在使用此类之前,必须先加载数据库驱动程序,加载方式:Class.forName(JDBC数据库驱动);

加载前应把下载的驱动程序(mysql-connector-java-5.1.39-bin.jar)拷贝到\jdk\jre\lib\ext或\tomcat5.x\common\lib文件夹中。

Class.forName(JDBC数据库驱动)中JDBC驱动程序的写法:

MySQL数据库驱动:com.mysql.jdbc.Driver

SQLServer2005数据库驱动:com.microsoft.sqlserver.jdbc.SQLServerDriver

Orcale数据库驱动:oracle.jdbc.driver.OracleDriver

二、Connection接口

数据库驱动程序加载之后,可以调用DriverManager.getConnection()方法得到数据库的连接。在DriverManager类中定义了三个重载的getConnection()方法:

static Connection getConnection(String url);

static Connection getConnection(String url, Properties info);

static Connection getConnection(String url, String user,String password);

参数:

url - jdbc:subprotocol:subname 形式的数据库 url

info - 作为连接参数的任意字符串标记/值对的列表;通常至少应该包括 "user" 和 "password" 属性

user - 数据库用户,连接是为该用户建立的

password - 用户的密码

url是建立数据库连接的字符串,不同的数据库其连接字符串不一样。常用数据库的连接字符串:

MySQL:jdbc:mysql://主机名:3306/数据库名

SQLServer:jdbc:sqlserver://主机名:1433;databaseName=数据库名

Orcale:jdbc:orcale:thin:@主机名:1521:数据库名

例:通过JDBC驱动与MySQL数据库中的books数据库建立连接

ConnectionManager类的静态方法getConnection()方法返回一个数据库连接,与数据库建立连接后,可以对数据库进行增、删、改、查等操作。当操作结束后,调用相应的关闭方法,释放对应的资源。

三、Statement接口

该接口对象用于将普通的SQL语句发送到数据库中。建立了到数据库的连接后,就可以创建Statement对象。Statement接口可以通过调用Connection接口的CreateStatement()方法创建。如:

Connection connection=DriverManager.getConnection(url, "user", "password");

Statement stmt=connection.createStatement();

Statement接口提供了4种执行SQL语句的方法:executeQuery()、executeUpdate()、executeBatch()、和execute()。使用哪一种由SQL语句所返回的结果决定,常用的是前两个方法。

executeUpdate()方法用于更新数据,如执行Insert、Update和Delete及SQL DDL(数据定义)语句,这些语句不返回记录集,而是返回一个整数,表示受影响的行数。其方法原型:int executeUpdate(String sql),其中sql为SQL命令字符串。

executeQuery()方法用于执行select语句,返回一个结果集,其类型为ResultSet。ResultSet是一个数据库游标,通过它可访问数据库中的记录,其原型:

ResultSet executeQuery(String sql),sql为SQL命令字符串。

例:用Statement对象查询显示数据库books中titles表中所有图书的ISBN和图书名

titles表结构如下:

程序编码:

四、PreparedStatement接口

该接口基础自Statement接口,具有Statement的所有方法,同时又增加了自己的方法。

PreparedStatement接口对象包含已编译的SQL语句,其执行速度要快于Statement对象。PreparedStatement接口对象中的SQL语句可包含一个或多个IN参数,也可用“?”作为占位符。

在创建PreparedStatement对象时,需要 SQL命令字符串作为preparedStatement()方法的参数,在调用PreparedStatement对象的executeQuery()或executeUpdate()方法执行查询时,不再需要参数。

使用PreparedStatement对象的SQL命令字符串中使用“?”占位符时,在执行executeQuery()或executeUpdate()方法之前,要用setXXX(n, p)方法为占位符赋值。如setString()方法可为字符串型数据赋值。方法中的参数n表示要赋值的参数在SQL命令字符串中出现的位置,n从1开始;p为参数设置的值。

例:利用PreparedStatement对象在userinfo表中插入一条记录,用户名为admin,密码为11

在数据库books中创建表userinfo如下:

程序编码:

五、ResultSet接口

ResultSet接口用于获取执行SQL语句/数据库存储过程返回的结果,它的实例对象包含符合SQL语句中条件的所有记录的集合,并且它可以通过一套getXXX()方法提供对这个集合的访问。next()方法用于移动数据库游标到记录集中的下一行,使下一行成为当前行,可通过此游标访问记录集中的记录。

ResultSet接口对象的游标最初位于结果集的第一行的前面,当执行一次next()方法之后才会将指针指向第一条记录。每调用一次next()方法数据库游标向下移动一行,直到记录集最后一行。在ResultSet或Statement对象关闭之前,数据库游标一直有效。

在数据库游标移动过程中,可通过getXXX()方法获取结果集中的数据,其中XXX与结果集中所存放的数据类型有关。getXXX()方法将基本数据类型转换成指定Java类型,然后返回合适的值。

例:对userinfo表进行查询,得到ResultSet对象 ,通过此对象对查询结果进行遍历,在控制台上显示记录。


数据库的操作示例

一、更新数据

更新数据包括对数据库表中的记录进行添加、修改和删除。

操作实例:利用PreparedStatement对象对books数据库中的account表进行更新操作。account表用来存放用户的卡号和账户余额,其结构如下:

在Java中提倡面向接口编程,通过接口定义类的方法原型,在具体类中实现接口,这样给编程带来很大的灵活性。

设计包:

com.learnhelp.utils 用于存放工具类

com.learnhelp.dao 用于存放接口

com.learnhelp.impl 存放接口的实现类

com.learnhelp.test 用于存放测试类

例:定义account表的数据操作接口

例:定义account表的数据操作类,要求实现AccountDao接口

例:编写测试类TestAccount,对TestAccountDaoImpl类中的方法进行测试,看是否能输出正确的结果