JDBC编程-----数据库的链接

JDBC编程-----数据库的链接

1、创建一个以JDBC连接数据库的程序,包括如下7个步骤。

(1)加载JDBC驱动程序
Class.forName(“com.mysql.jdbc.Driver”);
或者:Driver driv=new com.mysql.jdbc.Driver();
DriverManager.registerDriver(driv);

(2)提供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”

(3)创建数据库的连接
Connection con;
con=DriverManager.getConnection(url,username,password);

或con=DriverManager.getConnection(urll);

(4)创建一个Statement
Statement stat=con.createStatement();

(5)执行SQL语句
stat.executeUpdate(sql);//sql是insert、update和delete语句
stat.executeQuery(sql);//sql是select语句
stat.execute(sql); //多个结果集、多个更新计数或组合语句

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

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

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

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

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

例子:

while(rs.next()){

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

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

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

}

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

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

finally{
if(rs!=null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}…
}

2.JDBC的链接,完成对数据库的访问,对数据的增、删、改、查

注:用面向对象的方法

第一步:建立表结构

第二步:创建一个包为 cn.hbsi.bean 的包,然后在此包下创建类,类中定义的是在数据库中建立的列,在此类中把这些列定义为私有的属性,并用getter setter 方法来初始化,以便于在访问数据库时可以使用私有的属性。

第三步:建立一个工具类,用来封装数据库中必备的连接,其中包括用户名、密码、连接的路径,而且用户名、密码、连接的路径都放在一个配置文件中。(配置文件就是存放键值对的,所以存放的数据是一一对应的)

注:重要的是在第二步,它所包含的是所有要对数据库操作的方法,操作方法一般情况下为boolean类型的,所以要注意及时修改boolean类型的值

重点说一下在连接数据库的时候注意的事项--------查询数据库:

第一步:因为要执行和数据库的操作会很多,所以可以把Connection preparedStatement ResultSet 这三个类提取出来用私有变量去定义,使用时可以直接调用类的对象,例如:

private Connection conn;

private PreparedStatement pstmt;//预处理类

private ResultSet rs;

第二步:获取连接对象

conn = JdbcUtil.getConnection();

第三步: 定义SQL语句---------查询的语句

String sql = “insert into studInfo(name,sex,remune,image) values(?,?,?,?)”;

第四步:创建预处理对象

pstmt = conn.prepareStatement(sql);

第五步:为占位符赋值

int index = 1;//定义index,是在显示的是?的赋值

pstmt.setString(index++, entity.getName());//用到的index++可以避免定义固定的,可以自增

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

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

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

第六步:执行更新

int i = pstmt.executeUpdate();

第七步:判断

if(i > 0){

flag = true;

}

第八步:释放资源

JdbcUtil.release(rs, pstmt, conn);

实例:

public boolean insert(StudentInfo entity){

boolean flag = false;

try {

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

conn = JdbcUtil.getConnection();

//第三步:定义SQL语句

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

//第四步:创建预处理对象

pstmt = conn.prepareStatement(sql);

//第五步:为占位符赋值

int index = 1;

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

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

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

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;

}

//主方法测试

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

// TODO Auto-generated method stub

StudentHandle sh = new StudentHandle();

StudentInfo entity = new StudentInfo();

//准配实体bean对象,即是向列表中插入数据,通过面向对象的思想去调用私有成员的getter setter方法

entity.setName("gehref");

entity.setSex("女");

entity.setResume("高级工程师");

//向数据库中添加图片

entity.setImage(StudentInfo.class.getClassLoader().getResourceAsStream("./image/ai.jpg"));

sh.insert(entity);

}

注意:在写的时候可能会出现很多问题,比如在复制时么有该数据库名,么有导入数据库,配置文件的位置不对,或是配置文件中的数据不对都很有可能出现

在实现其他的操作的时候,和查询的操作大同小异

删除的操作:

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;

}

更新的操作,和插入一样

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;

}

显示所有的信息

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;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值