美文网首页
2018-09-15 JDBC的操作

2018-09-15 JDBC的操作

作者: 笨小孩的编程之路 | 来源:发表于2018-09-16 00:00 被阅读0次

一:JDBC是什么?                                                              

JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。

JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。

简单地说,JDBC 可做三件事:与数据库建立连接、发送 操作数据库的语句并处理结果。

二:优缺点

1)优点:简单易学,上手快,非常灵活构建SQL,效率高

2)缺点:代码繁琐,难以写出高质量的代码(例如:资源的释放,SQL注入安全性等)

开发者既要写业务逻辑,又要写对象的创建和销毁,必须管底层具体数据库的语法

(例如:分页)。

3)适合于超大批量数据的操作,速度快

三:JDBC总结

1、数据库连接使用时就创建,不使用时便立即释放,从而对数据库进行频繁的操作,导致数据资源的浪费、影响性能;

优化设想:使用数据库连接池管理数据库对象;

2、sql都是硬编码到java程序中,如果改变sql,那么得重新编译java代码,不利于系统后期的维护;

优化设想:将sql语句配置在xml中,及时改变sql也不用重新编译源代码;

3、向PreparedStatement设置参数,也是硬编码到java程序中,不利于后期的维护;

优化设想:将sql语句以及占位符和参数全部配置在xml中,改动也不需要重新编译源代码;

4、从resultset遍历结果集数据时,也存在硬编码 ,不利于后期系统的维护;

优化设想:将查询的结果集自动映射成java对象;

JDBC操作:

工具类

public class JdbcUtils {

//数据库连接对象

    private static String driver; //驱动

    private static String url; //连接字符串

    private static String user; //用户名

    private static String password; //密码

static {

//读取db.properties

ResourceBundle bundle = ResourceBundle.getBundle("db");

driver=bundle.getString("oracledriver");

url=bundle.getString("oracleurl");

user=bundle.getString("oracleusername");

password=bundle.getString("oraclepassword");

}

public static Connection getConn() {

Connection conn = null;

try {

Class.forName("oracle.jdbc.driver.OracleDriver");

conn=DriverManager.getConnection("jdbc:oracle:thin:@192.168.142.128:1521:orcl", "scott", "tiger");

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return conn;

}

public static void close(Connection conn,PreparedStatement pstm,ResultSet rs) {

    if (rs!=null) {

try {

rs.close();

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

    if (pstm!=null) {

    try {

    pstm.close();

    } catch (SQLException e) {

    // TODO Auto-generated catch block

    e.printStackTrace();

    }

    }

    if (conn!=null) {

    try {

    conn.close();

    } catch (SQLException e) {

    // TODO Auto-generated catch block

    e.printStackTrace();

    }

    }

    }

}

测试类

public class TestJdbc {

private Connection conn=null;

private PreparedStatement pstm=null;

private ResultSet rs;

@Test

public void find() {

try {

pstm= conn.prepareStatement("select * from emp where empno=7000");

rs=pstm.executeQuery();

while (rs.next()) {

System.out.println(rs.getInt(1)+"---"+rs.getString("ename"));

}

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

@Test

public void add() {

try {

pstm= conn.prepareStatement("insert into emp(ename,job,sal,empno) values(?,?,?,?)");

pstm.setString(1, "張三");

pstm.setString(2, "CLERK");

pstm.setString(3, "20000");

pstm.setInt(4, 7000);

int eu = pstm.executeUpdate();

if(eu>0) {

System.out.println("成功");

}else {

System.out.println("失敗");

}

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

@Test

public void update() {

try {

pstm= conn.prepareStatement("update emp set ename=? where empno=?");

pstm.setString(1, "hello");

pstm.setInt(2, 7000);

int executeUpdate = pstm.executeUpdate();

if(executeUpdate>0) {

System.out.println("成功");

}else {

System.out.println("失敗");

}

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

@Test

public void delete() {

try {

pstm= conn.prepareStatement("delete from emp where empno=?");

pstm.setInt(1, 7000);

int EU = pstm.executeUpdate();

if(EU>0) {

System.out.println("成功");

}else {

System.out.println("失敗");

}

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

@Before

public void getconn() {

conn = JdbcUtils.getConn();

}

@After

public void close() {

JdbcUtils.close(conn, pstm, rs);

}

}

相关文章

网友评论

      本文标题:2018-09-15 JDBC的操作

      本文链接:https://www.haomeiwen.com/subject/ptrtnftx.html