(梦想的孤独路途中,总有出不完的汗水,睡不好的觉,学不完的知识,少不了的磕磕碰碰,但,累和懦弱不是你放弃的理由!)
(谢谢观赏)
JDBC概述:
话题:什么是JDBC.
1.将Java语言和JDBC结合起来使程序员不必为不同的平台编写不同的应用程序,只须写
一遍程序就可以让它在任何平台上运行,这也是Java语言“编写一次,处处运行”的优
势。
2.JDBC(Java Data Base Connectivity,Java数据库连接).
3.是一种用于执行SQL语句的Java API,为多种关系数据库提供统一访问.
4.它由一组用Java语言编写的类和接口组成.
5.有了JDBC,程序员只需用JDBC API写一个程序,就可以访问所有数据库。
JDBC API:
提供者:Sun公司 内容:供程序员调用的接口与类,集成在java.sql和javax.sql包中,如 DriverManager类 .
作用:管理各种不同的JDBC驱动 .
Connection接口.
Statement接口.
ResultSet接口.
JDBC 驱动:
提供者:数据库厂商. 作用:负责连接各种不同的数据库. JDBC对Java程序员而言是API,对实现与数据库连接的服务提供商而言是接口模型。
JDBC访问数据库步骤:
1:加载一个Driver驱动 2:创建数据库连接(Connection) 3:创建SQL命令发送器Statement 4:通过Statement发送SQL命令并得到结果 5:处理结果(select语句) 6:关闭数据库资源 ResultSet.Statement.Connection。
怎么去实现这个步骤呢?
一.加载驱动:
加载JDBC驱动是通过调用方法java.lang.Class.forName(),下面列出常用的几种数据库驱动程序
加载语句的形式 :
1.Class.forName(“oracle.JDBC.driver.OracleDriver”);//使用Oracle的JDBC驱动程序
2.Class.forName(“com.microsoft.JDBC.sqlserver.SQLServerDriver”);//使用SQL Server的JDBC驱动程序
3.Class.forName(“com.ibm.db2.JDBC.app.DB2Driver”);//使用DB2的JDBC驱动程序
4.Class.forName("com.mysql.JDBC.Driver");//使用MySql的JDBC驱动程序.
package javastudy;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class Test1 {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
// TODO Auto-generated method stub
//将驱动程序加载到内存中
Class.forName("com.mysql.jdbc.Driver");
//创建一个连接
Connection conn=DriverManager.getConnection("jdbc:mysql://localhost/student","root","0000");
Statement st=conn.createStatement();
ResultSet rs=st.executeQuery("select * from studinfo");
while(rs.next())
{
for(int i=1;i<=4;i++)
{
System.out.print(rs.getString(i)+"t");
}
System.out.println();
}
}
}
二.创建数据库连接:
与数据库建立连接的方法是调用DriverManager.getConnection(String url, String user, Stringpassword )方法:
1.Connection conn=null;
2.String url="jdbc:oracle:thin:@localhost:1521:orcl";
3.String user=“scott";
4.String password=“tiger";
5.conn = DriverManager.getConnection(url, user, password);
三.创建Statement并发送命令:
1.Statement对象用于将 SQL 语句发送到数据库中,或者理解为执行sql语句
2.有三种 Statement对象:
3.Statement:用于执行不带参数的简单SQL语句;
4.PreparedStatement(从 Statement 继承):用于执行带或不带参数的预编译SQL语句;
5.CallableStatement(从PreparedStatement 继承):用于执行数据库存储过程的调用。
四.处理ResultSet结果:
1.ResultSet对象是executeQuery()方法的返回值,它被称为结果集,它代表符合SQL语句条件的
所有行,并且它通过一套getXXX方法(这些get方法可以访问当前行中的不同列)提供了对这
些行中数据的访问。
2.ResultSet里的数据一行一行排列,每行有多个字段,且有一个记录指针,指针所指的数据行
叫做当前数据行,我们只能来操作当前的数据行。我们如果想要取得某一条记录,就要使用
ResultSet的next()方法 ,如果我们想要得到ResultSet里的所有记录,就应该使用while循环。
3.ResultSet对象自动维护指向当前数据行的游标。每调用一次next()方法,游标向下移动一行。
初始状态下记录指针指向第一条记录的前面,通过next()方法指向第一条记录。循环完毕后
指向最后一条记录的后面.
步骤说完了:我们来了解下其中的基本知识.
PreparedStatementa:
PreparedStatement接口继承Statement接.
预处理发送器,可以将sql语句进行预编译,提高效率防止 SQL 注入.
SQL 语句中需要配合占位符(?)来使用.
Properties优化:
Properties 是一个工具类, 表示属性集, 属性列表中每个
键及其对应值都是一个字符串. 可以保存在流中, 也可以
从流中加载.
特点:将数据库连接的信息存放在 properties 文件中, 便于后
续的维护, 修改后不用重新编译代码.
在 DBUtil 工具类中, 通过 Properties 对象加载并读取配
置文件, 动态为属性赋值.
java中如何读取Properties中的数据?
第一种方法:
nputStream in = getClass().getResourceAsStream("/config.properties");
Properties properties = new Properties();
properties.load(in);
String citys = properties.getProperty("属性");
---------------------
第二种方法:
在原文件中给变量赋值
创建Properties对象,
Properties prop = new Properties();
创建文件输入流:
InputStream is =DBUtil.class.getClassLoader().getResourceAsStream("db.properties");
加载配置文件
prop.load(is);
当写入大量数据时, JDBC操作要注意什么?
回答:
注意释放,提高效率,避免效率降低,和数据资源的流失.
提高效率:
从数据库设计方面考虑:
建立索引
分区(MysQL,比如按时间分区)
尽量使用固定长度的字段
限制字段长度
从数据库I/O方面:
增加缓冲区
如果涉及表的级联,不同的表存储在不同的硬盘上,以增加I/O读取的速度
从SQL语句方面:
优化SQL语句,减少比较的次数
限制返回的条目数(MySQL中用的limit)
从Java代码方面:
如果反复使用的查询,使用preparedStament减少查询的次数
使用批量处理.