java开发中JDBC连接数据库的步骤
来源:互联网 发布:python try函数 编辑:程序博客网 时间:2024/06/16 00:28
JDBC核心类 DriverManager 用于管理驱动/获得连接 Connection 用于连接数据库 Statement 用于执行SQL语句 ResultSet 用户获取执行结果,可以对数据库字段进行取出,修改,删除等操作完整java开发中JDBC连接数据库包含7个步骤 1, 加载注册JDBC驱动 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机), 这通过java.lang.Class类的静态方法forName(String className)实现。 Class.forName("com.mysql.jdbc.Driver");会抛出ClassNotFoundException异常 (当驱动没找到时),catch住提醒“MYSQL驱动加载失败” 2,提供JDBC连接的URL 连接URL定义了连接数据库时的协议、子协议、数据源标识,用户名,密码。 ("jdbc:mysql://localhost/demo1?useUnicode=true&charcterEncoding= UTF-8","root","root") //协议://主机:端口号/资源路径?查询字符串 3,通过驱动连接数据库 要连接数据库,需要向java.sql.DriverManager请求并获得Connection对象, 该对象就代表一个数据库的连接 使用DriverManager的getConnectin(String url , String username , String password )方法传入指定的欲连接的数据库的路径、数据库的用户名和 密码来获得。 第一个参数叫"连接字符串",用于设置连接到哪台服务器(localhost),哪个数据库(demo1), 以及其他配置信息(和数据库的编码一致).连接字符串的格式由不同DBMS的驱动来规定, 具体查看驱动的文档 第2,3个参数为用户名,密码 4,执行SQL包下面的预编译sql语句对象Statement 要执行SQL语句,必须获得java.sql.Statement实例,Statement实例分为以下3 种类型: A、执行静态SQL语句。通常通过Statement实例实现。 B、执行动态SQL语句。通常通过PreparedStatement实例实现。 C、执行数据库存储过程。通常通过CallableStatement实例实现。 PreparedStatement ps = conn.prepareStatement("insert into T_Persons(Name,Age,Gender)values('无崖子',22,1)") ps.executeUpdate();//执行更新 5,执行SQL语句 Statement接口提供了三种执行SQL语句的方法:executeQuery 、executeUpdate 和execute A、ResultSet executeQuery(String sqlString):执行查询数据库的SQL语句 ,返回一个结果集(ResultSet)对象。 B、int executeUpdate(String sqlString):用于执行INSERT、UPDATE或 DELETE语句以及SQL DDL语句,如:CREATE TABLE和DROP TABLE等 C、execute(sqlString):用于执行返回多个结果集、多个更新计数或二者组合的 语句。 具体实现的代码: ResultSet rs = stmt.executeQuery("SELECT * FROM ...") ; int rows = stmt.executeUpdate("INSERT INTO ...") ; boolean flag = stmt.execute(String sql) ; 6, 处理结果 两种情况: 1、执行更新返回的是本次操作影响到的记录数。 2、执行查询返回的结果是一个ResultSet对象。 • ResultSet包含符合SQL语句中条件的所有行,并且它通过一套get方法提供了对这些 行中数据的访问。 • 使用结果集(ResultSet)对象的访问方法获取数据: while(rs.next()){ String name = rs.getString("name") ; String pass = rs.getString(1) ; // 此方法比较高效 } (列是从左到右编号的,并且从列1开始) 7,关闭JDBC对象 操作完成以后要把所有使用的JDBC对象全都关闭,以释放JDBC资源,关闭顺序和声 明顺序相反: A、关闭记录集 B、关闭声明 C、关闭连接对象 preparedstatement是加工SQL的接口。把sql的参数域编译成确切的sql保存起来!-------------------------------------------- public interface PreparedStatement extends Statement表示预编译的 SQL 语句的对象。 SQL 语句被预编译并存储在 PreparedStatement 对象中。然后可以使用此对象多次高效地执行该语句。 ---------------------------------------------------------- 事务(Transaction)有四大特征:原子性,一致性,隔离性,持久性。 原子性值得是”几个操作要么都成功,要么都失败“! JDBC事务 首先 1,设定Connection的setAutoCommit(false), 禁止自动提交; 2,操作结束执行conn.commit()提交事务; 3,如果执行出错,则conn.rollback() 回滚(当前事务的操作全部取消) 案例: 1,对数据库批量提交插入数据,先把数据装箱,通过addBacth(),每满多少笔时候提交一次executeBatch();
2,模拟银行转账,通过连接数据库 对某账号进行 + - 金额 try { conn = JdbcUtils.createConnection(); conn.setAutoCommit(false);//通过事务禁止自动提交 ps1 = conn.prepareStatement("Update T_Employees Set Salary=Salary-10 where Name='Tom'"); ps1.executeUpdate(); ps2 = conn.prepareStatement("Update T_Employees Set1 Salary=Salary+10 where Name='Jerry'"); ps2.executeUpdate(); conn.commit();//全部操作一致无误后,提交 } catch (SQLException e) { conn.rollback();//如果操作中有误,则回滚,之前的操作都不算 }
----------------------------------------------------------批量提交 采用批量提交:要配合事务使用,否则没效果。把executeUpdate() 改成 addBatch(),在最后再ps.executeBatch(),看看用多长时间
import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.SQLException;/* * 案例1:通过批量提交插入,优化处理 * */public class BatchTest2{ public static void main(String[] args) { Connection conn= null; PreparedStatement ps = null; //计算用时 比较 long start = System.currentTimeMillis(); try { //创建数据库连接,注意批量提交应确保连接中,要在事务中配合使用 conn = JDBCUtils.createConnection(); //批量提交配合事务使用,设定禁止自动提交 conn.setAutoCommit(false); //创建预处理sql语句对象,共用此对象, ps = conn.prepareStatement("insert into t_persons2(Name,Age,Gender) values(?,?,?)"); //设置插入参数值 for(int i = 0;i<10000;i++) { ps.clearParameters();//记住Statement重复使用要把上次设置的 查询参数的值清空,才能继续设置下一次的值 ps.setString(1, "东方白"+i); ps.setInt(2, 25); ps.setBoolean(3, true); //ps.executeUpdate();// ,每次插入都通知mysql, ps.addBatch(); //装到"箱子里" ,用批量提交则先把数据 加入到箱子里面来 一次性批量提交箱子 //以每满1000笔提交一次箱子,根据数据量而定 if(i%1000==0) { ps.executeBatch();//每1000笔提交一次 } } //把箱子中剩下的,余下的没满1000的再提交一次 ps.executeBatch();//把"箱子里"的命令一次提交给mysql conn.commit();//在所有的操作之后,提交事务, long end = System.currentTimeMillis(); System.out.println("耗时"+(end-start)); } catch (SQLException e) { try { conn.rollback();//如果发生异常则回滚,刚才的操作都不算 } catch (SQLException e1) { System.out.println("回滚失败"); } e.printStackTrace(); } finally { JDBCUtils.closeQuietly(conn); } }}
0 0
- Java开发中JDBC连接数据库的代码和步骤
- Java开发中JDBC连接数据库的步骤
- java开发中JDBC连接数据库的步骤
- 完整java开发中JDBC连接数据库代码和步骤
- 完整java开发中JDBC连接数据库代码和步骤
- 完整java开发中JDBC连接数据库代码和步骤
- 完整java开发中JDBC连接数据库代码和步骤
- 完整java开发中JDBC连接数据库代码和步骤
- 完整java开发中JDBC连接数据库代码和步骤
- java开发中JDBC连接数据库代码和步骤
- 完整java开发中JDBC连接数据库代码和步骤
- 完整java开发中JDBC连接数据库代码和步骤
- Java开发中JDBC连接数据库代码和步骤.
- 完整java开发中JDBC连接数据库代码和步骤
- 完整java开发中JDBC连接数据库代码和步骤
- 完整java开发中JDBC连接数据库代码和步骤
- 完整java开发中JDBC连接数据库代码和步骤
- 完整java开发中JDBC连接数据库代码和步骤
- Android Zxing框架扫描解决扫描框大小,图片压缩问题
- PHP_PHP操作Powerpoint-PHPPowerPoint
- 如何替换Windows的Shell(即explorer.exe)
- UVA112 Tree Summing
- 使用ThinkPHP框架快速搭建网站
- java开发中JDBC连接数据库的步骤
- linux 进程间通信 信号量
- CentOS---NFS安装、配置、使用
- PCA数据降维(Eigenfaces特征脸)
- 16个非常酷的jQuery插件
- 黑马程序员--Java基础--集合(二)
- Linux 随机数
- hdu 3571 Hotaru's problem || 2015 Multi-University Training Contest 7 (manacher算法)
- 关于 barcode4j.jar 条形码生产的部分条形码不能扫描的问题