java使用JDBC连接数据库,提高查询大量数据速度
一、java使用JDBC连接数据库基本知识
1.JDBC的框架结构:
java通过JDBC API接口,经由JDBC驱动程序管理器、JDBC Driver API 和 JDBC驱动程序访问下层的数据库。
2.JDBC连接数据库基本步骤:
1.加载JDBC驱动程序
a.加载Oracle JDBC驱动程序:
使用DriverManager类加载:
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver())
使用java.lang.Class类加载:
Class c =Class.forName(“oracle.jdbc.driver.OracleDriver”)
如果加载程序不存在就会抛出异常
b.加载MySQL JDBC驱动程序:
使用DriverManager类加载:
DriverManager.registerDriver(new “org.gjt.mm.mysql.Driver()”)
使用java.lang.Class类加载:
Class c =Class.forName(“”org.gjt.mm.mysql.Driver””).newInstance()
“org.gjt.mm.mysql.Driver”是MySQL JDBC驱动程序的类名
c.加载Microsoft SQL Server JDBC 驱动程序:
使用DriverManager类加载:
DriverManager.registerDriver(new com.microsoft.jdbc.sqlserver.SQLServerDriver())
使用java.lang.Class类加载:
Class c =Class.forName(“com.microsoft.jdbc.sqlserver.SQLServerDriver”)
“com.microsoft.jdbc.sqlserver.SQLServerDriver”是Microsoft SQL Server JDBC驱动程序的类名
d.加载InterClient JDBC驱动程序:
使用DriverManager类加载:
DriverManager.registerDriver(new interbase.interclient.Driver())
使用java.lang.Class类加载:
Class c =Class.forName(“interbase.interclient.Driver”)
“interbase.interclient.Driver”是InterClient JDBC驱动程序的类名
e.加载PostgreSQL JDBC驱动程序:
使用DriverManager类加载:
DriverManager.registerDriver(new corg.postgresql.Driver())
使用java.lang.Class类加载:
Class c =Class.forName(“corg.postgresql.Driver”)
“corg.postgresql.Driver”是PostgreSQL JDBC驱动程序的类名
2.创建数据库连接
URL,User,Password是连接数据库需要的指定参数。
a.用Oracle thin 驱动连接Oracle数据库的URL:
jdbc:oracle:thin:@host:port:service_name
host是主机ip,port是端口,service_name是DB实例名
b.用Oracle OCI驱动连接Oracle数据库的URL:
jdbc:oracle:oci8:@host
host是tnsnames.ora文件中的一个TNSNAMES条目。
c.用Microsoft SQL Servier驱动连接SQL Server 的URL:
jdbc:microsoft:sqlserver://host:DatabaseName==Student
d.连接Interbase数据库的URL:
jdbc.interbase://host//d:Student/student.gdb
e.连接MySQL数据库的URL:
jdbc:mysql://host/myDB?
f.连接PostgrreSQL数据库的URL:
jdbc:postgresql://host/myDB?
对于数据库(如Oracle)服务器端的驱动程序(如OracleDriver)来说不需要用URL进行连接,可以使用服务器端的默认连接,而且这种连接不需要关闭。
Connection conn=(new oracle.jdbc.driver.OracleDriver()).defaultConnection()
3.创建Statement
Statement stmt = conn.createStatement()
4.执行Staement
ResultSet rset = stmt.executeQuery(“select * from table_a”); //查询语句
int rowcount = stmt.executeUpdate(“delete from table_a t where t.a1 = xxxx”);//更新语句
如果只能在程序运行时才知道SQL语句类型,可以使用Statement中的execute()成员方法动态地执行未知类型的语句。这个方法返回一个表示语句类型的布尔值,如果返回真,说明是查询语句,否则是更新语句。示例如下:
Statement stmt = conn.createStatement();
boolean result = stmt.execute(sql);
if (resul){
ResultSet rset = stmt.getResultSet();
}else{
int updateCount = stmt.getUpdateCount();
}
注意:boolean result = stmt.execute(sql);执行之后,就已经执行了语句了,所以后面不用再次执行,可以直接得到结果。
5.处理查询结果集
Statement执行语句之后,将返回一个结果集对象ResultSet。每一个ResultSet对象都有一个游标(cursor)指向结果集的当前位置,游标的初始位置是在结果集的第一行之前。
利用next()方法和循环语句可以方便的定位结果集的每个记录。示例如下:
while (rset.next()) {
String sendtime = rset.getString(1);
String demobile = rset.getString(2);
String rcode = rset.getString(3);
}
6.关闭数据库连接
结束程序前要关闭结果集ResultSet对象和Statement对象。
rset.close();
stmt.close();
conn.close();//关闭连接对象
二、连接数据库读取数据写入文件
示例(高效率):
打开数据库连接类OracleDBa
import java.sql.Connection; |
执行查询语句并处理(当查询结果是成百上千万行级的时候效率挺高)
import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class db_select { public static int db_49(int id, FileWriter fw, String tablename, |
主类
import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileWriter; import java.io.IOException; import java.io.InputStreamReader; import java.sql.Connection; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.Scanner; public class output_mingxi { public static void main(String[] args) { |
推荐另外两篇来自阿里巴巴叶正盛的文章我转载的:
关于oracle与mysql官方jdbc的一些区别
http://blog.csdn.net/chenyechao/article/details/9303979
这篇文章是我解决问题以后才看到的,上面已经说明了MySQL JDBC的setFetchSize的使用。
另外一篇:面向程序员的数据库访问性能优化法则 http://blog.csdn.net/yzsind/article/details/6059209
原文地址: https://blog.csdn.net/u013726746/article/details/79625100
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
相关文章