JDBC

2018/06/01 java

一、什么是JDBC

Java提出的一套用来连接数据库的标准(接口)。起到一种桥梁的作用。 JDBC

1、JDBC的常用类

  • Java使用jdbc编程,必须使用:来自java.sql.*;的类和接口
  • java.sql.Driver;//所有数据库的驱动均实现该接口
  • java.sql.DriverManage;//驱动管理类
  • java.sql.Connection;//连接的接口
  • java.sql.statment;//会话的接口
  • java.sql.,Result;//结果集的接口

二、JDBC的使用步骤

1、加载驱动

Class.forName("包名", "类名");

2、获得链接

url(同一资源定位器):协议名://主机名:端口号:资源名

DriverManager.getConnection("url", username, password);

3、创建会话

1)Statement

Statement stm = con.createStatement();

2)PreparedStatement(预编译的Statement)

可以预防SQL注入

PreparedStatement pstmt = con.prepareStatement(sql);//需要预先编译的sql语句

4、执行SQL,获取结果集

1)executeQuery(String sql)

执行SELECT语句,它返回的是查询后得到记录集(resultset)。

2)executeUpdate(String sql)

执行UPDATEINSERTDELETE语句,它返回的是语句执行后说影响到的记录条数(int)。对于 CREATE TABLE 或 DROP TABLE 等不操作行的DDL语句,executeUpdate 的返回值总为零。

ResultSet rs = stm.executeQuery(sql);

3)execute(String sql)

执行任何sql语句,也就是前两者之一。返回值是第一个结果的表现形式。当第一个执行结果是查询语句时,返回true,可以通过getResultSet方法获取结果;当第一个执行结果是更新语句或DDL语句时,返回false,可以通过getUpdateCount方法获取更新的记录数量。

4)executeBatch

批处理操作,在处理大量相同操作时可以明显提高效率。

con.setAutoCommit(false); // 关闭自动执行 
stmt.addBatch("INSERT INTO employees VALUES (1000, 'Joe Jones')"); 
stmt.addBatch("INSERT INTO departments VALUES (260, 'Shoe')"); 
stmt.addBatch("INSERT INTO emp_dept VALUES (1000, 260)"); 
int[] updateCounts = stmt.executeBatch();// 提交一批要执行的更新命令 

5、处理结果(例如:遍历)

while (rs.next()) {
	int deeptno = rs.getInt(1);
	String dname = rs.getString(2);
	String loc = rs.getString(3);
	System.out.println(deeptno + "\t" + dname + "\t" + loc);
}

6、关闭

注意:如果忘记关闭连接是很危险的,有可能卡死数据库。

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

三、ProPerties容器

java.util包下面有一个类 Properties,该类主要用于读取项目的配置文件(以.properties结尾的文件和.xml文件)。
Properties有一个load()方法,可以直接读取InputStrem内的数据。将数据库的参数存放到Properties容器中{参数以键值对的方式存在}。

//加载配置文件
roperties.load(DBUtil.class.getClassLoader().getResourceAsStream("DataBaseUtil.properties"));
//获取配置文件里的配置信息
datatype = properties.getProperty("datatype");
driver = properties.getProperty(datatype + "Driver");
url = properties.getProperty(datatype + "Url");
user = properties.getProperty(datatype + "User");
password = properties.getProperty(datatype + "Password");

DataBaseUtil.properties 的内容如下:

datatype=mysql
oracleDriver=oracle.jdbc.driver.OracleDriver
oracleUrl=jdbc:oracle:thin:@localhost:1521:xe
oracleUser=scott
oraclePassword=tiger
mysqlDriver=com.mysql.jdbc.Driver
mysqlUrl=jdbc:mysql://localhost:3306/bjsxt20151014
mysqlUser=root
mysqlPassword=123456

四、JDBC连接各种数据库的方式示例

1、Oracle

// 1 oracle数据库(thin模式)
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
String url = "jdbc:oracle:thin:@localhost:1521:orcl";// orcl为数据库的SID(实例)
String user = "scott";
String password = "tiger";
Connection conn = DriverManager.getConnection(url, user, password);

2、DB2

// 2 DB2数据库
Class.forName("com.ibm.db2.jdbc.app.DB2Driver").newInstance();
String url = "jdbc:db2://localhost:5000/sample";// sample为数据库名
String user = "admin";
String password = "";
Connection conn = DriverManager.getConnection(url, user, password);

3、SQL Server

// 3 Sql Server数据库
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
String url = "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mydb";// mydb为数据库
String user = "sa";
String password = "";
Connection conn = DriverManager.getConnection(url, user, password);

4、Sybase

// 4 Sybase数据库
Class.forName("com.sybase.jdbc.SybDriver").newInstance();
String url = "jdbc:sybase:Tds:localhost:5007/myDB";// myDB为数据库名
Properties sysProps = System.getProperties();
sysProps.put("user", "userid");
sysProps.put("password", "user_password");
Connection conn = DriverManager.getConnection(url, sysProps);

5、Informix

// 5 Informix数据库
Class.forName("com.informix.jdbc.IfxDriver").newInstance();
String url = "jdbc:informix-sqli://123.45.67.89:1533/myDB:INFORMIXSERVER=myserver;user=testuser;password=testpassword";//myDB为数据库名
Connection conn = DriverManager.getConnection(url);

6、MySQl

// 6 MySQL数据库
Class.forName("com.mysql.jdbc.Driver").newInstance();//或者为
Class.forName("org.gjt.mm.mysql.Driver").newInstance();
tring url = "jdbc:mysql://localhost/myDB";// myDB为数据库名
String user = "root";
String password = "123456";
Connection conn = DriverManager.getConnection(url, user, password);

7、PostgreSQL

// 7 PostgreSQL数据库
Class.forName("org.postgresql.Driver").newInstance();
String url = "jdbc:postgresql://localhost/myDB";// myDB为数据库名
String user = "myuser";
String password = "mypassword";
Connection conn = DriverManager.getConnection(url, user, password);

8、SqlLite

// 8 SqlLite数据库
Class.forName("org.sqlite.JDBC");
String url = "jdbc:sqlite:SqlLite.db";// SqlLite.db为数据文件(*.db)的路径
Connection con = DriverManager.getConnection(url);

Search

    Table of Contents