1.JDBC(Java database connection)
数据库->对数据进行管理(增,删,改,查)
应用程序对数据库数据进行操作
2.JDBC连接的固定套路
(1)找到jdbc的jar包;
(2)导包
(3)jdbc的流程操作
1.加载驱动
2.创建连接
3.创建状态参数
4.执行操作(增,删,改,查)
1) 增,删,改:修改executeUpdate
2) 查:executeQuery :ResultSet
5. 关闭
JDBC的操作流程分为五步:
加载驱动,创建链接, 创建状态参数,执行操作,关闭连接;
对数据库的执行操作实际上可以分为两类,一类是修改executeUpdate,包括增,删,改;另一类是查executeQuery,返回一个结果集resultSet。 其次,对于数据库查询结果集的获取,一般用迭代器(Iterator next)来获取。当rs.next指向的元素有数据时,next指向会自动下移。例如:
ResultSet rs = stat.executeQuery(sql);
while(rs.next()){//不知道查询结果集对象数量时用while
System.out.println(rs.getString("ename")+rs.getInt("empno")+rs.getDate("hiredate"));
}
//一般情况下,如果知道结果集的数量时,最好还是使用if语句
If(rs.next()){
System.out.println(rs.getString("ename")+rs.getInt("empno")+rs.getDate("hiredate"));
}
其次关于列名的问题,如果要查询结果的列名不存在于表中,一般有两种做法
1)按列的顺序编号写
2)取别名: “ select count(* ) as co from emp”;
下面是一个MyEclipse的 Java数据库链接示例(Oracle数据库)
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class Test {
public static void main(String[] args){
String sql = "select * from emp where empno=7369";
//列名标识符无效
try {
//1.加载驱动 驱动 [类] jar包里
Class.forName("oracle.jdbc.driver.OracleDriver");
//2.创建连接 SqlServer 2000 jdbc提供jar包 实例名称 服务 OraleServiceOrcl:ora
//"jdbc:oracle:thin:@localhost:1521:orcl"
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl","scott","tiger");
//3.创建状态参数
Statement stat = conn.createStatement();
//增,删,改
//int i = stat.executeUpdate(sql);
ResultSet rs = stat.executeQuery(sql);
//对结果集遍历 迭代器Iterator next
//数据类型:数据库数据的数据类型不同于Java的数据类型,所以需要getString,getInt来获取不同列名的元素;
//rs.getString() varchar2 1 2 3 4 5 rs.getInt();
while(rs.next()){
System.out.println(rs.getString("ename")+rs.getInt("empno")+rs.getDate("hiredate"));
}
//结果集的数量问题,何时用while, 何时用if;
//关闭的顺序,从小到大,由里到外;
rs.close();
stat.close();
conn.close();
}catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
SQL语句过长时,如何处理, 一,采用分割符,二采用StringBuffer方法;
import java.sql.*
public class SQL {
public static void main(String[] args) {
//统计并显示一个班级(classno=1)的课程表,String StringBuffer
StringBuffer sql = new StringBuffer("");
sql.append("select ktime as mtime, ");
sql.append("max(case kweek when '周一' then kname else 'x' end) as zhou1,");
sql.append("max(case kweek when '周二' then kname else 'x' end) as zhou2,");
sql.append("max(case kweek when '周三' then kname else 'x' end) as zhou3,");
sql.append("max(case kweek when '周四' then kname else 'x' end) as zhou4,");
sql.append("max(case kweek when '周五' then kname else 'x' end) as zhou5");
sql.append(" from kechengbiao");
sql.append(" where classno=1");
sql.append(" group by ktime");
sql.append(" order by ktime");
//String sql1 = "select e.deptno as eno,d.deptno as dno from emp e,dept d where e.deptno!=d.deptno";
System.out.println(sql.toString());
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "scott", "tiger");
Statement stat = conn.createStatement();
ResultSet rs = stat.executeQuery(sql.toString());//ArrayList Hash Linked
while (rs.next()){
System.out.println(rs.getString("mtime")+"\t"+rs.getString("zhou1")+"\t"+rs.getString("zhou2")+"\t"+rs.getString("zhou3")+"\t"+rs.getString("zhou4")+"\t"+rs.getString("zhou5"));
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}