JDBC连接数据库
来源:互联网 发布:广联达软件最新版本 编辑:程序博客网 时间:2024/06/07 06:30
使用JDBC连接数据大概可以分为5步操作:
- 注册JDBC驱动(只做一次)
- 建立连接 Connection
- 创建执行SQL的语句(Statement)
- 处理执行结果(ResultSet)
- 释放资源
1.注册JDBC驱动程序
JDBC驱动程序实现JDBC API中定义的接口,用于与数据库服务器进行 交互。初始化驱动程序,就是打开与数据库的通信通道。
JDBC注册驱动,首先导入对应的驱动包,我在这里使用的是mysql的驱动包mysql-connector-java-5.1.25.jar,如果是连接的是其他的数据库需导入相应的驱动包。
注册的方式大概可以分为三种:
1.第一种方式:
Class.forName(“com.mysql.jdbc.Driver”);
这种方式使用了Class.forName(String className)方法动态的加载驱动程序的类到内存中,在这里使用了类加载器和反射的概念。这种方式不会对具体的驱动类依赖(推荐使用这种方式)
下面的示例使用Class.forName()来注册Oracle驱动程序:
// 静态代码块,初始化一次用于注册驱动static {try {Class.forName("com.mysql.jdbc.Driver");System.out.println("注册jdbc驱动");} catch (ClassNotFoundException e) {throw new ExceptionInInitializerError();}}
2.第二种方式:
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
这种方式会造成DriverManager中产生两个一样的驱动,并会对具体的驱动类产生依赖,至于为什么会有两个驱动,可以结合第一种方式来看一下,这里就细说了。
3.第三种方式:
System.setProperty(“jdbc.drivers”,”com.mysql.jdbc.Driver”);
通过系统的属性设置注册驱动,如果要注册多个驱动,则System.setProperty(“jdbc.drivers”,”com.mysql.jdbc.Driver:com.oracle.jdbc.Driver”);
虽然不会对具体的驱动类产生依赖;但注册不太方便,所以很少使用。
2.建立连接
Connectionconn =DriverManager.getConnection(url,user, password);
url格式:
JDBC:子协议:子名称//主机名:端口/数据库名?属性名=属性值&…..
user,password可以用“属性名=属性值”的方式告诉数据库;
其他参数如:
useUnicode=true&characterEncoding=GBK
3.创建sql并执行
Stringsql= “select * from table_namewhere col_name=?”; PreparedStatement ps= conn.preparedStatement(sql); ps.setString(1,“col_value”); ps.executeQuery();
这是个查询的示例代码,在这里使用了PreparedStatement接口,它继承与Statement 它可以过滤掉参数中的 一些特殊字符,没有sql注入问题比Statement更具有优势,具体的方法可以javaAPI文档。
4.处理结果
// 处理结果while (rs.next()) {System.out.println(rs.getObject("name") + "\t"+ rs.getObject("age") + "\t" + rs.getObject("birthday")+ "\t");}
这里可以根据需求封装成bean或者其他对象返回,提高代码的复用性等。
5.释放资源
释放ResultSet,Statement,Connection.数据库连接(Connection)是非常稀有的资源,用完后必须马上释放,如果Connection不能及时正确的关闭将导致系统宕机。Connection的使用原则是尽量晚创建,尽量早的释放。这些接口都有自己的close()方法。
以下是jdbc连接数据库的示例代码:
import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;/** * jdbc工具类 * * @author Administrator * */public final class JdbcUtils { // 常量值 private static String url = "jdbc:mysql://localhost:3306/test?generateSimpleParameterMetadata=true"; private static String user = "root"; private static String password = "root"; // 让构造函数为private,这样该类就不会被实例化 private JdbcUtils() { } // 静态代码块,初始化一次用于注册驱动 static { try { Class.forName("com.mysql.jdbc.Driver"); System.out.println("注册jdbc驱动"); } catch (ClassNotFoundException e) { throw new ExceptionInInitializerError(); } } // 获取数据库连接 public static Connection getConnection() throws SQLException{ Connection conn = null; try { conn=DriverManager.getConnection(url, user, password); } catch (SQLException e) { e.printStackTrace(); } return conn; } // 释放资源 public static void free(ResultSet rs, Statement st, Connection conn) { try { if (rs != null) rs.close(); } catch (SQLException e) { e.printStackTrace(); } finally { try { if (st != null) st.close(); } catch (SQLException e) { e.printStackTrace(); } finally { try { if (conn != null) conn.close(); } catch (Exception e) { e.printStackTrace(); } } } }}
基本的CRUD操作:
import java.sql.Connection;import java.sql.ResultSet;import java.sql.Statement;/** * 数据库基本的CRUD操作 * @author Administrator * */public class CRUD { public static void main(String[] args) { // create(); // update(); delete(); read(); } // 查询操作 public static void read() { Connection conn = null; //使用Statement这种方式有sql注入的危险,可使用PreparedStatement,例子可参照本包下的SQLInject类 Statement st = null; ResultSet rs = null; try { // 建立连接 conn = JdbcUtils.getConnection(); // 创建语句 st = conn.createStatement(); // 执行语句 rs = st.executeQuery("select * from user"); // 处理结果 while (rs.next()) { System.out.println(rs.getObject("name") + "\t" + rs.getObject("age") + "\t" + rs.getObject("birthday") + "\t"); } } catch (Exception e) { e.printStackTrace(); } finally { //释放资源 JdbcUtils.free(rs, st, conn); } } // 插入操作 public static void create() { Connection conn = null; Statement st = null; ResultSet rs = null; try { // 建立连接 conn = JdbcUtils.getConnection(); // 创建语句 st = conn.createStatement(); String sql = "insert into user(name,age,birthday)" + "values('天语'," + 23 + ",'1990-07-29')"; // 执行语句 int i = st.executeUpdate(sql); System.out.println("i=" + i); } catch (Exception e) { e.printStackTrace(); } finally { JdbcUtils.free(rs, st, conn); } } // 更新操作 public static void update() { Connection conn = null; Statement st = null; ResultSet rs = null; try { // 建立连接 conn = JdbcUtils.getConnection(); // 创建语句 st = conn.createStatement(); String sql = "update user set age=age+1"; // 执行语句 int i = st.executeUpdate(sql); System.out.println("i=" + i); } catch (Exception e) { e.printStackTrace(); } finally { JdbcUtils.free(rs, st, conn); } } // 删除操作 public static void delete() { Connection conn = null; Statement st = null; ResultSet rs = null; try { // 建立连接 conn = JdbcUtils.getConnection(); // 创建语句 st = conn.createStatement(); String sql = "delete from user where id>2"; // 执行语句 int i = st.executeUpdate(sql); System.out.println("i=" + i); } catch (Exception e) { e.printStackTrace(); } finally { JdbcUtils.free(rs, st, conn); } }}
- jdbc入门、jdbc连接数据库
- jdbc-odbc连接数据库
- JDBC连接MySQL数据库
- JDBC连接MySQL数据库
- JDBC之连接数据库
- [JDBC] 如何连接数据库
- JDBC连接数据库技巧
- jdbc连接数据库
- JDBC连接常用数据库
- jdbc连接数据库
- JDBC连接SqlServer2005数据库
- jdbc连接各种数据库
- JDBC连接各种数据库
- JDBC连接数据库参考
- JDBC连接数据库
- JDBC连接数据库小结
- JDBC连接MYSQL数据库
- Jdbc 连接数据库 实例
- Android启动页SplashScreen实现
- Linux下解压缩文件
- jquery easyui combobox设置默认选中第一项
- Session的原理
- Jquery中的$.get()方法返回值有多余空格问题
- JDBC连接数据库
- Storage Metrics
- AndroidManifest.xml配置文件详解
- JAVA Web项目开发乱码问题备忘
- Android中源码Launcher主屏幕程序排列详解【安卓Launcher进化一】
- Latex 一些代码样式
- [150518]程序员颈椎保护指南
- Leetcode Balanced Binary Tree
- 欢迎使用CSDN-markdown编辑器