您的位置:首页 > 数据库 > Oracle

使用jdbc操作Oracle常犯错误

2018-03-29 15:04 197 查看
最近在新电脑上装了oracle,想通过java访问数据库,平时在工作中这些其实都是非常简单的操作,但是等到自己亲自操作发现手生了,以下是对此次操作的总结,也在网上收集了一些注意事项。也警惕以后写代码不要养成惯性思维.
(1)保证用户名、密码正确性
(2)保证访问的表数据commit,否则查询回来数据为空,针对这个问题可通过rs.next()查看
(3)关闭连接不要第一步就close掉con,最好从结果集rs,执行环境st,再到con.不然你会发现意想不到错误
1.建立连接import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.LinkedList;

public class Pool {
//初始化一下:创建10个链接放入连接池
private static String driver = "oracle.jdbc.driver.OracleDriver";
private static String url = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";
private static String user = "system";
private static String password = "Qwei520llx";

public static void main(String[] args) {
try {
getConnection();
System.out.println("获取数据库连接成功");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

//定义一个链表来保存10个链接
private static LinkedList<Connection> dataSource = new LinkedList<>();
static{
try{
//注册驱动
Class.forName(driver);
System.out.println("加载驱动成功");
for(int i=0;i<10;i++){
dataSource.add(DriverManager.getConnection(url, user, password));
}
System.out.println("得到10条链接");
}catch(Exception ex){
ex.printStackTrace();
}
}
public static Connection getConnection() throws SQLException {
// 表示从连接池中获取链接
if(dataSource.size() > 0){
//有链接,这里返回的链接是真正的对象,现在返回一个代理对象,并且重写close方法
return dataSource.removeFirst();
}else{
throw new SQLException("系统忙,请稍后......");
}
}
//释放数据库资源(导jar包)
public static void release(Connection con,Statement st,ResultSet rs){

if(st != null){
try {
st.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
st = null;
}
}

if(rs != null){
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
rs = null;
}
}

if(con != null){
try {
con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
con = null;
}
}
}
}

2.测试类
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;

public class PoolTest {

public static void main(String[] args) {
String sql = "select * from emp";

Connection con= null;
Statement st = null;
ResultSet rs = null;

try {
//获取连接
con=Pool.getConnection();
System.out.println("获取到链接");
//得到sql运行环境
st=con.createStatement();

//执行sql
rs=st.executeQuery(sql);
System.out.println(rs.next());
while(rs.next()){
String name = rs.getString("name");
int sal = rs.getInt("score");
System.out.println(name+"\t"+sal);
}
}catch (Exception e){
e.printStackTrace();
}finally{
//关闭顺序不能先关con
Pool.release(con, st, rs);
}
}

}
3.返回结果
加载驱动成功
得到10条链接
获取到链接
true
张三 55
李四 90
王五 67
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  oracle