连接数据库的基本步骤:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Scanner;
/**
* PreparedStatement预编译的 SQL 语句的对象
* 执行带参数的sql语句
* 防止sql注入攻击
* @author fiona
*
*/
public class TestJDBC1 {
public static void main(String[] args) {
Connection conn=null;//定义连接
ResultSet rs=null;
PreparedStatement pstmt=null;
String url = "jdbc:oracle:thin:@localhost:1521:oracleylp";
String userName = "scott";
String password ="960715";
try {
/*
* 加载驱动
*/
//注册驱动Driver
Class.forName("oracle.jdbc.driver.OracleDriver");
/*
* 建立连接
*/
/*
* url:要连接的数据库地址 jdbc:oracle:thin:@<localhost(127.0.0.1)(本机IP地址)>:<数据库服务器的端口号>:<数据库sid>
* username:账号
* password:密码
*/
conn=DriverManager.getConnection(url, userName, password);
/*
* 创建执行语句块
*/
//预编译sql语句
pstmt=conn.prepareStatement("select * from dept1 where deptno=?");//?为占位符,表示参数
/*
* 给预编译语句中的占位符赋值
*/
System.out.println("请输入要查询的部门编号:");
Scanner sc=new Scanner(System.in);
String no=sc.nextLine();
pstmt.setString(1, no);//给预编译sql语句中的第一个?赋值
//执行sql语句
/*
* 处理结果
*/
rs=pstmt.executeQuery();
while (rs.next()) {
System.out.println(rs.getInt(1)+"\t"+rs.getString(2)+"\t"+rs.getString(3));
}
} catch (ClassNotFoundException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
} catch (SQLException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}finally {
//要按先 ResultSet 结果集,后 Statement,最后 Connection 的顺序关闭资源
if (rs!=null) {
try {
rs.close();
} catch (SQLException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
if (pstmt!=null) {
try {
pstmt.close();
} catch (SQLException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
if (conn!=null) {
try {
conn.close();
} catch (SQLException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
}
}
}
常见错误总结:
如果没有导包或者包名写错,报错: java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver
url地址写错,报错:java.sql.SQLException: 指定了无效的 Oracle URL
连接的数据库名不存在,报错:ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
连接的数据库服务未启动,报错:java.sql.SQLException: The Network Adapter could not establish the connection
账号或密码错误,报错:java.sql.SQLException: ORA-01017: invalid username/password; logon denied
如果sql语句关键字写错,报错:java.sql.SQLSyntaxErrorException: ORA-00900: 无效 SQL 语句
如果操作的表名写错,报错:java.sql.SQLSyntaxErrorException: ORA-00942: 表或视图不存在
如果占位符?的个数与给定的参数个数不匹配,报错:java.sql.SQLException: 索引中丢失 IN 或 OUT 参数:: 1
多给了值,报错:java.sql.SQLException: 无效的列索引
如果给定的值和要求的值类型不一致,报错:java.sql.SQLSyntaxErrorException: ORA-01722: 无效数字
如果是根据列名取值,当取不到对应的数据时,最大的可能就是列名写错