您的位置:首页 > 数据库

使用JDBC开发简单的数据库应用

2016-12-03 18:52 381 查看


          1、JDBC简介

JDBC是Java应用程序与数据库进行连接的“桥梁”。它的设计目标是跨平台,也即是说只要你安装了对应数据库的驱动程序,你就可以通过实现

JDBC的驱动程序连接多种数据库。也就是说,JDBC是一种接口,具体的实现由相关的数据库产商提供,如优秀的开源软件MySQL、微软公司的MS SQL server

、甲骨文公司的Oracle等。


2、MVC简介

MVC是模型、视图、控制器的简称。在这种设计模式中,可以将应用程序与数据库的操作分离,使程序的结构更加清晰,有利于系统的设计、开发和维护。Model层
的作用是表示出数据库中的表,使用的时候除了要定义出所有的字段以外,还需要定义对其操作的类,这里表示为数据访问对象(DAO)。也就是说,表示数据库表的类
以及对数据库表操作的类共同构成Model层。Control层的作用则是调用Model层所提供的接口,使其不与数据库进行直接的接触,将重点放在响应用户的动作上面。而View
则是与用户交互的一层,处理用户的请求,以及将用户的请求结果展示给用户。它需要在处理用户的请求后调用Control层,让控制层处理,控制层则将处理交给Model层,
完成之后将结果按原路返回给用户。

3、将数据库连接封装起来
由于数据库的连接是用的很频繁的操作,因此,可以把数据库的连接操作独立出来,减少代码的冗余。在这里使用到了静态初始化块。初始化块是Java类中的一种成员,
它由一对花括号以及花括号中的语句组成,主要的作用是定义对象时执行一些初始化操作,它最大的特点就是该类定义的所有对象都会执行初始化块中的代码。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.lang.Class;

public class MyConnection {
private static final String URL="jdbc:mysql://127.0.0.1:3306/database1";
private static final String USER="root";
private static final String PASSWORD="root";
private static Connection con=null;

static{
/*
* 加载驱动,反射技术,通过类名将该类加载到环境中
*/
try {
Class.forName("com.mysql.jdbc.Driver");		//加载JDBC MySQL的驱动
con=DriverManager.getConnection(URL, USER, PASSWORD);	//通过驱动管理器获取数据库连接
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
public static Connection getConnection(){
return con;
}
}


4、关于SQL语句
SQL语句是操纵数据库的语句,它由数据库系统来执行。主要由数据定义语言(DDL)、数据操纵语言(DML)组成,其中DDL包括数据库的建立和删除、数据库表
的建立、删除和修改等等,DML包括数据库表中数据的增删查改等。

5、JDBC的使用
获取了数据库的连接以后,就可以使用SQL语句进行数据库的操作了。数据库连接使用的是Connection对象,语句的执行对象有Statement、PreparedStatement对象等。
语句的执行对象由Connection对象的createStatement以及preparedStatement方法创建。值得注意的是,SQL语句的书写时,可以用?指定变量的个数,然后再把变量加进去
例子如下:
public void addGoddess(Goddess goddess) throws Exception{
Connection con=MyConnection.getConnection();
String sql="insert into goddess(name,age,birthday,email,mobile) values(?,?,?,?,?)";
PreparedStatement statement=con.prepareStatement(sql);
statement.setString(1, goddess.getName());
statement.setInt(2, goddess.getAge());
if(goddess.getBirthday()==null)
statement.setDate(3, new Date(2010, 11, 11));
else
statement.setDate(3, new Date(goddess.getBirthday().getTime()));
statement.setString(4, goddess.getEmail());
statement.setString(5, goddess.getMobile());
statement.execute();
}
语句的执行有execute(),executeQuery()等方法,后者执行查询操作,返回ResultSet对象,它是一个集合,可以通过next()方法取下一个对象(也就是数据库记录),
通过get**()方法获取对应字段的值,代码如下:
result=statement.executeQuery("select name,age from goddess");
while(result.next()){
Goddess g=new Goddess();
g.setName(result.getString("name"));
g.setAge(result.getInt("age"));
gList.add(g);
}


6、复杂查询语句的使用
查询语句中一般想要查询的字段是写死了的,主要通过字段的值来查询有没有相关的记录。这里我们探讨一下书写字段以及对于字段的值都不确定的SQL语句。先上
代码:
public List<Goddess> Query(List<Map<String,Object>> params) throws Exception{
Connection conn=MyConnection.getConnection();
String sql="select * from goddess where 1=1 and ";
PreparedStatement statement=conn.prepareStatement(sql);
List<Goddess> list=new ArrayList<Goddess>();
if(params!=null && params.size()>0){
for(int i=0;i<params.size();i++){
Map<String,Object> map=params.get(i);
sql+=map.get("name")+" "+map.get("rela")+" "+map.get("value");
}
}
ResultSet result=statement.executeQuery(sql);
while(result.next()){
Goddess g=new Goddess();
g.setId(result.getInt("id"));
g.setName(result.getString("name"));
g.setAge(result.getInt("age"));
g.setBirthday(result.getDate("birthday
8d79
"));
g.setEmail(result.getString("email"));
g.setMobile(result.getString("mobile"));
list.add(g);
}
return list;
}
在该查询语句中,有一个比较复杂的参数。它是一个List集合,集合的元素类型是Map对象,Map对象的键类型为String,值类型为Object。这个函数参数就是用来存放
SQL语句要查询的字段和对应的值,因为是存放在List中,所以可以有多个。回到SQL语句的书写中来,有一个地方值得注意的就是where 1=1,这里是为了让后面使用
的语句能够连起来。定义好了之后就是如何使用了,实际上也就是如何使用List跟Map两种数据结构的问题了。代码如下:
List<Map<String,Object>> params=new ArrayList<Map<String,Object>>();
Map<String,Object> param=new HashMap<String,Object>();
param.put("name", "name");
param.put("rela", "=");
param.put("value", "'小芳'");
params.add(param);
List<Goddess> list=action.query(params);



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  jdbc 数据库