您的位置:首页 > 数据库

JDBC连接数据库

2011-09-14 22:17 288 查看
JDBC连接数据库
一、创建一个以JDBC连接数据库的程序,包括如下7个步骤。

加载JDBC驱动程序

Class.forName(“com.mysql.jdbc.Driver”);

或者:Driver driv=new com.mysql.jdbc.Driver();

DriverManager.registerDriver(driv);

提供JDBC连接的URL

String url="jdbc:mysql://localhost:3306/test";

String username="root";

String password="1234";

或urll ="jdbc:mysql://localhost:3306/test?user=root&password=1234”

创建数据库的连接

Connection con;

con=DriverManager.getConnection(url,username,password);

或con=DriverManager.getConnection(urll);

创建一个Statement

Statement stat=con.createStatement();

执行SQL语句

stat.executeUpdate(sql);//sql是insert、update和delete语句

stat.executeQuery(sql);//sql是select语句

stat.execute(sql); //多个结果集、多个更新计数或组合语句

处理结果---执行结果可能会出现两种情况

执行更新返回的是本次操作影响到的记录数

执行查询返回的结果是一个ResultSet对象,该对象以0或多条记录的形式包含了查询结果,可以通过隐含的游标(指针)来定位数据,初始化时,游标位于第一条记录前,可以通过next()方法移动到下一条记录。

ResultSet rs=stat.executeQuery(“select …”);

rs.next();//移动游标到第一条记录,如果没有到最后一条记录的后面,方法返回true,否则返回false。

while(rs.next()){

//读取游标所指的记录行数据

System.out.println(“学号:”+rs.getInt(1)); 【注意:列索引号从1开始】

System.out.println(“学号:”+rs.getInt(“id”));

}

ResultSet对象rs中有getXXX()方法,可从当前记录行中获取指定列的信息,可通过指定列索引号或列明两种方式指定要读取的列。

二、关闭JDBC对象

在操作完成以后要把所使用的JDBC对象全部关闭,以释放JDBC资源,关闭的顺序和声明顺序相反。



finally{

if(rs!=null){

try {

rs.close();

} catch (SQLException e) {

e.printStackTrace();

}

}…

}

JDBC可做三件事:与数据库建立连接、发送 SQL 语句并处理结果。接下来通过几个简单的示例演示JDBC的应用。

PreparedStatement表示预编译的SQL语句的对象。

三、对JDBC操作数据库的工具类的封装

对获得Connection对象进行封装

将数据库的配置信息写到一个属性文件中,然后用IO流去获取,当需要修改数据库连接的时候只要改动配置文件即可。

在src下新建属性文件jdbc.properties,添加如下内容:

driver=com.mysql.jdbc.Driver

url=jdbc:mysql://localhost:3306/test

username=root

password=root

对关闭JDBC资源类的封装

新建DbClose.java类,添加方法关闭结果集对象、语句对象、连接对象。

在执行增加、删除、修改的时候可以使用代码关闭连接:DbClose.close(Statement stmt, Connection conn);

在执行查询之后使用如下代码关闭连接:DbClose.close(ResultSet rs, Statement stmt, Connection conn);

对执行数据库操作类的封装

在一个程序中会有很多地方要操作数据库,那么对执行数据库操作同样需要修改。新建ControlDB.java。

事例:实现增、删、改、查

package cn.hbsi.dao;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.InputStream;

import java.io.OutputStream;

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.util.ArrayList;

import java.util.List;

import cn.hbsi.domain.Student;

import cn.hbsi.jdbc.JdbcUtil;

public class StudentDaoImpl implements Student1Dao {

/* 封装数据库操作的对象 */

private Connection conn;

private PreparedStatement pstmt;

private ResultSet rs;

/* 操作插入 */

/*

* (non-Javadoc)

*

* @see cn.hbsi.dao.Student1Dao#insert(cn.hbsi.domain.Student)

*/

public boolean insert(Student entity) {

/* 第一步:声明返回结果变量 */

boolean flag = false;

try {

/* 第二步:获取连接对象 */

conn = JdbcUtil.getConnection();

/* 第三步:定义sql语句 */

String sql = "insert into student(name,sex,resume,image) values(?,?,?,?)";

/* 第四步:根据sql语句创建预处理对象 */

pstmt = conn.prepareStatement(sql);

/* 第五步:为站位符赋值 */

int index = 1;

pstmt.setObject(index++, entity.getName());

pstmt.setObject(index++, entity.getSex());

pstmt.setObject(index++, entity.getResume());

// pstmt.setBinaryStream(parameterIndex, x)

pstmt.setObject(index++, entity.getImage());

/* 第六步:执行更新 */

int i = pstmt.executeUpdate();

/* 第七步:判断 */

if (i > 0) {

flag = true;

}

/* 第八步:释放资源 */

JdbcUtil.release(rs, pstmt, conn);

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

/* *****修改返回变量值 */

return flag;

}

/*

* (non-Javadoc)

*

* @see cn.hbsi.dao.Student1Dao#update(cn.hbsi.domain.Student)

*/

public boolean update(Student entity) {

/* 第一步:声明返回结果变量 */

boolean flag = false;

try {

/* 第二步:获取连接对象 */

conn = JdbcUtil.getConnection();

/* 第三步:定义sql语句 */

String sql = "update student set name=?,sex=?,resume=?,image=? where id=?";

/* 第四步:根据sql语句创建预处理对象 */

pstmt = conn.prepareStatement(sql);

/* 第五步:为站位符赋值 */

int index = 1;

pstmt.setObject(index++, entity.getName());

pstmt.setObject(index++, entity.getSex());

pstmt.setObject(index++, entity.getResume());

// pstmt.setBinaryStream(parameterIndex, x)

pstmt.setObject(index++, entity.getImage());

pstmt.setObject(index++, entity.getId());

/* 第六步:执行更新 */

int i = pstmt.executeUpdate();

/* 第七步:判断 */

if (i > 0) {

flag = true;

}

/* 第八步:释放资源 */

JdbcUtil.release(rs, pstmt, conn);

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

/* *****修改返回变量值 */

return flag;

}

/*

* (non-Javadoc)

*

* @see cn.hbsi.dao.Student1Dao#delete(cn.hbsi.domain.Student)

*/

public boolean delete(Student entity) {

/* 第一步:声明返回结果变量 */

boolean flag = false;

try {

/* 第二步:获取连接对象 */

conn = JdbcUtil.getConnection();

/* 第三步:定义sql语句 */

String sql = "delete from student where id=?";

/* 第四步:根据sql语句创建预处理对象 */

pstmt = conn.prepareStatement(sql);

/* 第五步:为站位符赋值 */

int index = 1;

pstmt.setObject(index++, entity.getId());

/* 第六步:执行更新 */

int i = pstmt.executeUpdate();

/* 第七步:判断 */

if (i > 0) {

flag = true;

}

/* 第八步:释放资源 */

JdbcUtil.release(rs, pstmt, conn);

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

/* *****修改返回变量值 */

return flag;

}

/*

* (non-Javadoc)

*

* @see cn.hbsi.dao.Student1Dao#findAll()

*/

public List<Student> findAll() {

/* 第一步:声明返回结果变量 */

List<Student> entities = new ArrayList<Student>();

try {

/* 第二步:获取连接对象 */

conn = JdbcUtil.getConnection();

/* 第三步:定义sql语句 */

String sql = "select id,name,sex,resume,image from student";

/* 第四步:根据sql语句创建预处理对象 */

pstmt = conn.prepareStatement(sql);

/* 第五步:为站位符赋值 */

/* 第六步:执行查询 */

rs = pstmt.executeQuery();

/* 第七步:判断 */

while (rs.next()) {

// 每指向一条记录就对应一个崭新的对象在循环中声明实体bean对象

Student entity = new Student();

// 为每条记录对应的对象赋值

entity.setId(rs.getInt("id"));

entity.setName(rs.getString("name"));

entity.setSex(rs.getString("sex"));

entity.setResume(rs.getString("resume"));

entity.setImage(rs.getBinaryStream("image"));

// 把每条记录对应的对象添加到集合中进行保存

entities.add(entity);

}

/* 第八步:释放资源 */

JdbcUtil.release(rs, pstmt, conn);

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

/* *****修改返回变量值 */

return entities;

}

/*

* (non-Javadoc)

*

* @see cn.hbsi.dao.Student1Dao#findById(java.lang.Integer)

*/

public Student findById(Integer id) {

/* 第一步:声明返回结果变量 */

Student entity = new Student();

try {

/* 第二步:获取连接对象 */

conn = JdbcUtil.getConnection();

/* 第三步:定义sql语句 */

String sql = "select id,name,sex,resume,image from student where id=?";

/* 第四步:根据sql语句创建预处理对象 */

pstmt = conn.prepareStatement(sql);

/* 第五步:为站位符赋值 */

int index = 1;

pstmt.setObject(index++, id);

/* 第六步:执行查询 */

rs = pstmt.executeQuery();

/* 第七步:判断 */

if (rs.next()) {

entity.setId(rs.getInt("id"));

entity.setName(rs.getString("name"));

entity.setSex(rs.getString("sex"));

entity.setResume(rs.getString("resume"));

entity.setImage(rs.getBinaryStream("image"));

}

/* 第八步:释放资源 */

JdbcUtil.release(rs, pstmt, conn);

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

/* *****修改返回变量值 */

return entity;

}

/*

* (non-Javadoc)

*

* @see cn.hbsi.dao.Student1Dao#deleteById(java.lang.Integer)

*/

public boolean deleteById(Integer id) {

/* 第一步:声明返回结果变量 */

boolean flag = false;

try {

/* 第二步:获取连接对象 */

conn = JdbcUtil.getConnection();

/* 第三步:定义sql语句 */

String sql = "delete from student where id=?";

/* 第四步:根据sql语句创建预处理对象 */

pstmt = conn.prepareStatement(sql);

/* 第五步:为站位符赋值 */

int index = 1;

pstmt.setObject(index++, id);

/* 第六步:执行更新 */

int i = pstmt.executeUpdate();

/* 第七步:判断 */

if (i > 0) {

flag = true;

}

/* 第八步:释放资源 */

JdbcUtil.release(rs, pstmt, conn);

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

/* *****修改返回变量值 */

return flag;

}

public static void main(String[] args) throws Exception {

/* 创建操作对象 */

Student1Dao sdi = new StudentDaoImpl();

/*

* //准配实体bean对象 Student entity = new Student();

*

* entity.setName("redarmy"); entity.setSex("男");

* entity.setResume("redarmy是一个特有胡有理的帅哥");

* entity.setImage(StudentDaoImpl

* .class.getClassLoader().getResourceAsStream("./image/a.jpg"));

*

* //测试插入操作 sdi.insert(entity);

*/

// 测试根据id查询实体bean操作

// Student entity = sdi.findById(9);

//

// System.out.println(entity.getId()+"--"+entity.getName()+"---"+entity.getSex()+"--"+entity.getResume());

/*

* InputStream in =entity.getImage(); OutputStream out = new

* FileOutputStream("c:\\aa.jpg"); byte[] buf = new byte[1024]; int len;

* while ((len = in.read(buf)) != -1) out.write(buf, 0, len);

* in.close(); out.close();

*/

// 更新操作

// entity.setName("shenyangang");

// sdi.update(entity);

// sdi.delete(entity);

// 查询所有

List<Student> entities = sdi.findAll();

for (int i = 0; i < entities.size(); i++) {

Student entity = entities.get(i);

System.out.println(entity.getId() + "--" + entity.getName() + "---"

+ entity.getSex() + "--" + entity.getResume());

InputStream in = entity.getImage();

OutputStream out = null;

if (in != null) {

out = new FileOutputStream("c:\\" + entity.getId() + ".jpg");

byte[] buf = new byte[1024];

int len;

while ((len = in.read(buf)) != -1) {

out.write(buf, 0, len);

}

}

if (in != null) {

in.close();

}

if (out != null) {

out.close();

}

}

}

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