读书人

java基础-gt;jdbc数据库操作

发布时间: 2012-08-29 08:40:14 作者: rapoo

java基础---->jdbc数据库操作

Java数据库编程(JDBC)1、JDBC简介

JDBC(JavaDataBase Connective)Java的数据库连接,JDBC本身提供的是一套与平台无关的数据库的操作标准。所以在整个JDBC中充斥着大量的操作接口。而且JDBC本身不是技术,而是一种服务。

由于JDBC本身属于一个标准,所以一个数据库如果希望使用Java进行程序开发的话,那么各个数据库的生产商必须实现这些标准——提供专门的数据库的操作包。

根据JDBC操作方式的不同,一共有以下三种常见形式:

JDBC-ODBC桥连接:利用微软的ODBC技术进行操作

|- 操作过程:程序à JDBC à ODBCà数据库

|- 此方式属于Java默认支持的方式,但是由于其中间加入了ODBC端,所以性能很差

JDBC连接:使用各个数据库生产商提供的数据库驱动程序

|- 操作过程:程序à JDBC à数据库

|- 由于中间缺少了ODBC环节,所以性能将有着明显的提升

JDBC网络连接:通过网络协议进行数据库的连接操作

类:DriverManager

接口:Connection、PreparedStatement、Statement、ResultSet

2、连接数据库

在进行数据库连接的时候需要使用以下的几个信息:

数据库的驱动程序:oracle.jdbc.driver.OracleDriver

连接地址:jdbc:oracle:thin:@localhost:1521:orcl

用户名:scott

密码:tiger

要想连接需要使用Connection接口进行连接对象的保存,但是此接口必须依靠DriverManager类才可以完成对象的实例化操作。

import java.sql.Connection;import java.sql.DriverManager;public class ConnectionDemo {public static final String DBDRIVER = "oracle.jdbc.driver.OracleDriver";public static final String MysqlDBDRIVER = "com.mysql.jdbc.Driver";//mysqlpublic static final String DBURL = "jdbc:oracle:thin:@localhost:1521:orcl";public static final String MysqlDBURL = "jdbc:mysql://localhost:3306/test";//mysqlpublic static final String DBUSER = "scott";public static final String DBPASSWORD = "tiger";public static void main(String[] args) throws Exception {Connection conn = null; // 表示的是数据库连接Class.forName(DBDRIVER); // 1、加载数据库驱动程序conn = DriverManager.getConnection(DBURL, DBUSER, DBPASSWORD); // 连接数据库System.out.println(conn); // 如果不为null,表示已连接conn.close(); // 数据库的操作必须关闭}}

3、PreparedStatement接口实现增删改查

在开发中不会使用Statement进行操作,而都使用其子接口PreparedStatement完成。

PreparedStatement操作实际上属于预处理的操作。

如果要创建PreparedStatement接口的对象需要依靠Connection接口中的prepareStatement()方法完成,而且必须传入一个预处理的SQL语句,所有的占位符使用“?”表示。

如果现在执行的是模糊查询,要使用LIKE语句。

建表:

CREATE TABLE USERINFO

( ID INTEGER NOT NULL,

NAME VARCHAR2(50),

AGE INTEGER,

BIRTHDAYDATE)

增删改查语句:

INSERT INTO 表名称(列名称1,列名称2,…) VALUES (值1,值2,…) ;

UPDATE 表名称 SET字段=值,字段=值,.. [WHERE更新条件]

DELETE FROM 表名称 [WHERE删除条件]

数据库的更新操作本身非常的容易,直接使用executeUpdate()语句,但是如果要是查询的话就不一样,查询使用的方法是executeQuery()方法完成,方法:public ResultSet executeQuery(String sql) throwsSQLException

查询的时候是将所有的内容都保存在了ResultSet接口的对象之中。取得ResultSet对象之后,就可以通过next()方法往下取每一行的数据,但是需要注意的是,如果要想取出某一列的内容,则使用getXxx()的形式,其中Xxx表示的是具体的数据类型,例如:getFloat()、getInt()、getDate()。既可以根据列名称,也可以根据列编号,从1开始

package com;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.util.Date; publicclass Insert {    publicstaticfinal String DBDRIVER = "oracle.jdbc.driver.OracleDriver";    publicstaticfinal String DBURL = "jdbc:oracle:thin:@localhost:1521:orcl";    publicstaticfinal String DBUSER = "wangshengzhuang";    publicstaticfinal String DBPASSWORD = "wangshengzhuang";     publicstaticvoid main(String[] args) throws Exception {       Connection conn = null;       Class.forName(DBDRIVER);        conn = DriverManager.getConnection(DBURL, DBUSER, DBPASSWORD);       // 插入数据       String insertSql = "insertinto userinfo(id,name,age,birthday) values(?,?,?,?)";       PreparedStatement pstmt = conn.prepareStatement(insertSql);       pstmt.setInt(1, 1);       pstmt.setString(2, "wangshengzhuang");       pstmt.setInt(3, 23);       pstmt.setDate(4, new java.sql.Date(new Date().getTime()));       Integer len = pstmt.executeUpdate();       System.out.println("插入" + len + "行数据");        // 修改数据       String updateSql = "update  userinfo set age=24 where id=?";       pstmt = conn.prepareStatement(updateSql);       pstmt.setInt(1, 1);       len = pstmt.executeUpdate();       System.out.println("修改" + len + "行数据");        // 查询数据       String querySql = "select* from userinfo where id=?";       pstmt = conn.prepareStatement(querySql);       pstmt.setInt(1, 1);       ResultSet rs = pstmt.executeQuery();       while (rs.next()) {           Integer id = rs.getInt(1);           String name = rs.getString(2);           Integer age = rs.getInt(3);           Date date = rs.getDate(4);           System.out.println("id-->" + id + "name-->" + name + "age-->" + age                  + "birthday-->" + date);        }        // 删除数据       String deleteSql = "deletefrom userinfo where id=?";       pstmt = conn.prepareStatement(deleteSql);       pstmt.setInt(1, 1);       len = pstmt.executeUpdate();       System.out.println("删除" + len + "行数据");        rs.close();       pstmt.close();       conn.close(); // 数据库的操作必须关闭     } }

4、批处理和事务

在JDBC 2.0之后增加了许多的新功能,例如:可滚动的结集、使用ResultSet更新数据库、批处理等等, 所谓的批处理就是指所有的操作可以一次性的提交到数据库之中。

如果要使用批处理则需要使用Statement接口中的addBatch()方法。

package com; import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.util.Date; publicclass Batch {    publicstaticfinal String DBDRIVER = "oracle.jdbc.driver.OracleDriver";    publicstaticfinal String DBURL = "jdbc:oracle:thin:@localhost:1521:orcl";    publicstaticfinal String DBUSER = "wangshengzhuang";    publicstaticfinal String DBPASSWORD = "wangshengzhuang";     publicstaticvoid main(String[] args) throws Exception {       Connection conn = null;       Class.forName(DBDRIVER);       conn = DriverManager.getConnection(DBURL, DBUSER, DBPASSWORD);       // 插入数据       String insertSql = "insertinto userinfo(id,name,age,birthday) values(?,?,?,?)";       PreparedStatement pstmt = conn.prepareStatement(insertSql);        pstmt.setInt(1, 1);       pstmt.setString(2, "wangshengzhuang");       pstmt.setInt(3, 23);       pstmt.setDate(4, new java.sql.Date(new Date().getTime()));       pstmt.addBatch();        pstmt.setInt(1, 2);       pstmt.setString(2, "wangshengqi");       pstmt.setInt(3, 24);       pstmt.setDate(4, new java.sql.Date(new Date().getTime()));       pstmt.addBatch();        int score[] = pstmt.executeBatch();       for (int i = 0; i < score.length; i++) {           System.out.println(score[i]);       }        pstmt.close();       conn.close(); // 数据库的操作必须关闭     } }

此时,一次性的会将所有的SQL语句发送到数据库之中执行,一次性更新5条记录。那么如果现在假设这5条记录都是有关联的5条。

在使用批处理的操作中发现,如果中间有一条语句出错了,则默认情况下是将出错之前的代码进行提交,这是由于JDBC采用了自动的事务提交的方式才造成的结果。

如果此时要进行事务处理的话,则需要按照如下的方式进行:

1、 取消自动提交:public void setAutoCommit(booleanautoCommit) throws SQLException

2、 执行更新操作:

1、 如果没有错误,则提交事务:public void commit() throwsSQLException

4、 如果有错误,则进行回滚:public void rollback() throwsSQLException

package com; import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.util.Date; publicclass Transaction {     publicstaticfinal String DBDRIVER = "oracle.jdbc.driver.OracleDriver";    publicstaticfinal String DBURL = "jdbc:oracle:thin:@localhost:1521:orcl";    publicstaticfinal String DBUSER = "wangshengzhuang";    publicstaticfinal String DBPASSWORD = "wangshengzhuang";     publicstaticvoid main(String[] args) throws Exception {       Connection conn = null;       Class.forName(DBDRIVER);       conn = DriverManager.getConnection(DBURL, DBUSER, DBPASSWORD);       conn.setAutoCommit(false);       // 插入数据        String insertSql = "insertinto userinfo(id,name,age,birthday) values(?,?,?,?)";       PreparedStatement pstmt = conn.prepareStatement(insertSql);               pstmt.setInt(1, 1);           pstmt.setString(2, "wangshengzhuang");           pstmt.setInt(3, 23);           pstmt.setDate(4, new java.sql.Date(new Date().getTime()));           pstmt.executeUpdate();            pstmt.setInt(1, 1);           pstmt.setString(2, "wangshengqi");           pstmt.setInt(3, 24);           pstmt.setDate(4, new java.sql.Date(new Date().getTime()));           try{           pstmt.executeUpdate();           conn.commit();        }catch (Exception e) {           System.out.println("回滚");           conn.rollback();       }        pstmt.close();       conn.close(); // 数据库的操作必须关闭     } }


读书人网 >其他数据库

热点推荐