几种常用数据库的JDBC URL

  • 对于 Oracle 数据库连接,采用如下形式:

    jdbc:oracle:thin:@localhost:1521:sid
  • 对于 SQLServer 数据库连接,采用如下形式:

    jdbc:microsoft:sqlserver//localhost:1433; DatabaseName=sid
  • 对于 MYSQL 数据库连接,采用如下形式:

    jdbc:mysql://localhost:3306/sid

JDBC API

  • java.sql.DriverManager用来装载驱动程序,获取数据库连接。
  • java.sql.Connection完成对某一指定数据库的联接
  • java.sql.Statement在一个给定的连接中作为SQL执行声明的容器,他包含了两个重要的子类型。
  • Java.sql.PreparedSatement 用于执行预编译的sql声明
  • Java.sql.CallableStatement用于执行数据库中存储过程的调用
  • java.sql.ResultSet对于给定声明取得结果的途径

PreparedStatement

  • 可以通过调用 Connection 对象的 preparedStatement() 方法获取 PreparedStatement 对象
  • PreparedStatement 接口是 Statement 的子接口,它表示一条预编译过的 SQL 语句
  • PreparedStatement 对象所代表的 SQL 语句中的参数用问号(?)来表示,调用 PreparedStatement 对象的 setXXX() 方法来设置这些参数. setXXX() 方法有两个参数,第一个参数是要设置的 SQL 语句中的参数的索引(从 1 开始),第二个是设置的 SQL 语句中的参数的值

PreparedStatement vs Statement

  • 代码的可读性和可维护性.
  • PreparedStatement 能最大可能提高性能:
    • DBServer会对预编译语句提供性能优化。因为预编译语句有可能被重复调用,所以语句在被DBServer的编译器编译后的执行代码被缓存下来,那么下次调用时只要是相同的预编译语句就不需要编译,只要将参数直接传入编译过的语句执行代码中就会得到执行。
    • 在statement语句中,即使是相同操作但因为数据内容不一样,所以整个语句本身不能匹配,没有缓存语句的意义.事实是没有数据库会对普通语句编译后的执行代码缓存.这样每执行一次都要对传入的语句编译一次.
    • (语法检查,语义检查,翻译成二进制命令,缓存)
  • PreparedStatement 可以防止 SQL 注入

jdbc连接(Driver):

import oracle.jdbc.driver.OracleDriver;

import java.sql.*;
import java.util.Properties; public class JdbcUtilsTest {
public static void main(String[] args) throws SQLException {
Driver driver = new OracleDriver();
String url = "";
String username = "";
String password = "";
Properties info = new Properties();
info.put("user",username);
info.put("password",password);
Connection connect = driver.connect(url, info);
System.out.println(connect);
connect.close();
}
}

jdbc连接(DriverManager):

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException; public class JdbcUtilsTest2 {
public static void main(String[] args) throws SQLException {
String url = "";
String username = "";
String password = "";
Connection conn = DriverManager.getConnection(url, username, password);
System.out.println(conn);
conn.close();
}
}

使用 JDBC 驱动程序处理元数据

  • Java 通过JDBC获得连接以后,得到一个Connection 对象,可以从这个对象获得有关数据库管理系统的各种信息,包括数据库中的各个表,表中的各个列,数据类型,触发器,存储过程等各方面的信息。根据这些信息,JDBC可以访问一个实现事先并不了解的数据库。
  • 获取这些信息的方法都是在DatabaseMetaData类的对象上实现的,而DataBaseMetaData对象是在Connection对象上获得的。

DatabaseMetaData databaseMetaData = connection.getMetaData();

DatabaseMetaData 类中提供了许多方法用于获得数据源的各种信息,通过这些方法可以非常详细的了解数据库的信息:
  • getURL():返回一个String类对象,代表数据库的URL。
  • getUserName():返回连接当前数据库管理系统的用户名。
  • isReadOnly():返回一个boolean值,指示数据库是否只允许读操作。
  • getDatabaseProductName():返回数据库的产品名称。
  • getDatabaseProductVersion():返回数据库的版本号。
  • getDriverName():返回驱动驱动程序的名称。
  • getDriverVersion():返回驱动程序的版本号。
ResultSetMetaData 类

可用于获取关于 ResultSet 对象中列的类型和属性信息的对象:

  • getColumnName(int column):获取指定列的名称
  • getColumnCount():返回当前 ResultSet 对象中的列数。
  • getColumnTypeName(int column):检索指定列的数据库特定的类型名称。
  • getColumnDisplaySize(int column):指示指定列的最大标准宽度,以字符为单位。
  • isNullable(int column):指示指定列中的值是否可以为 null。
  • isAutoIncrement(int column):指示是否自动为指定列进行编号,这样这些列仍然是只读的。

取得数据库自动生成的主键

Connection conn = JdbcUtil.getConnection();

String sql = "insert into user(name,password,email,birthday)
values('abc','123','abc@sina.com','1978-08-08')";
PreparedStatement st = conn.
prepareStatement(sql,Statement.RETURN_GENERATED_KEYS ); st.executeUpdate();
ResultSet rs = st.getGeneratedKeys(); //得到插入行的主键
if(rs.next())
System.out.println(rs.getObject(1));

批量处理JDBC语句提高处理速度

当需要成批插入或者更新记录时。可以采用Java的批量更新机制,这一机制允许多条语句一次性提交给数据库批量处理。通常情况下比单独提交处理更有效率

  • addBatch(String):添加需要批量处理的SQL语句或是参数;
  • executeBatch();执行批量处理语句;

pstmt = conn.prepareStatement(sql);
for (int j = 0; j < 10000; j++) {
pstmt.setString(2,name);
pstmt.setString(3,phone);
pstmt.addBatch();
}
pstmt.executeBatch();
pstmt.clearBatch();

c3p0连接池


import com.mchange.v2.c3p0.ComboPooledDataSource;
import java.beans.PropertyVetoException;
import java.sql.Connection;
import java.sql.SQLException; public class JdbcUtilsTest3 {
public static void main(String[] args) throws SQLException, PropertyVetoException {
ComboPooledDataSource dataSource = new ComboPooledDataSource();
String url = "jdbc:oracle:thin:@10.10.6.86:1521/LHUAT";
String username = "FSP_EAS";
String password = "123456";
dataSource.setDriverClass("oracle.jdbc.driver.OracleDriver");
dataSource.setJdbcUrl(url);
dataSource.setUser(username);
dataSource.setPassword(password);
dataSource.setAcquireIncrement(3);//连接数不足时,一次向数据库服务器申请的连接数
dataSource.setInitialPoolSize(3);//初始化数据库连接池连接的数量
dataSource.setMinPoolSize(3);//最小的连接数
dataSource.setMaxPoolSize(10);//最大连接数
dataSource.setMaxStatements(0);//可以维护的Statement个数
dataSource.setMaxStatementsPerConnection(5);//每个连接同时可以使用的Statement对象的个数
Connection conn = dataSource.getConnection();
System.out.println(conn);
if (conn!=null){
conn.close();//并不是真正关闭,而是把该连接归还到连接池
}
}
}

JDBC简单总结的更多相关文章

  1. jdbc简单小登陆demo

    package com.test; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultS ...

  2. eclipse控制台下实现jdbc简单的增删改查测试

    1.现在MySQL中创建一个表 2.首先创建一个类 //导入的包 import java.sql.Connection;import java.sql.DriverManager;import jav ...

  3. JDBC简单示例代码

    本文章教程中将演示如何创建一个简单的JDBC应用程序的示例. 这将显示如何打开数据库连接,执行SQL查询并显示结果. 这个示例代码中涉及所有步骤,一些步骤将在本教程的后续章节中进行说明. 创建JDBC ...

  4. java的jdbc简单封装

    在学了jdbc一段时间后感觉自己写一个简单的封装来试试,于是參考的一些资料就写了一下不是多好,毕竟刚学也不太久 首先写配置文件:直接在src下建立一个db.properties文件然后写上内容 < ...

  5. Jmeter接口测试---JDBC简单实践

    我的环境:MySQL:mysql-5.6.24-win32 jdbc驱动:mysql-connector-java-5.1.22-bin.jar JMeter:apache-jmeter-2.13 1 ...

  6. jdbc 简单示例和优缺点

    一个使用JDBC的例子: Class.forName("com.mysql.cj.jdbc.Driver"); //加载驱动 Connection connection = Dri ...

  7. JDBC简单代码

    1..写简单sql语句执行 DROP TABLE IF EXISTS `jdbctest`; CREATE TABLE `jdbctest` ( `id` ) NOT NULL AUTO_INCREM ...

  8. jdbc简单学生管理系统

    这个是java连接mysql数据库的一个简单学生系统,通过jdbc连接数据库. 工具类 JDBCuntils. package Student; import java.io.IOException; ...

  9. DBUtils开源JDBC类库,对JDBC简单封装(作用是:简化编码工作量,同时不会影响程序的性能)

    DBUtils:提高了程序的性能,编程更加简便 架包 mysql-connector-java-jar commons-dbcp-1.4jar commons-pool-1.5.5jar common ...

  10. 利用jdbc简单封装一个小框架(类似DBUtils)

    利用jdbc写的一个类似DBUtils的框架 package com.jdbc.orm.dbutils; import java.io.IOException; import java.io.Inpu ...

随机推荐

  1. 匈牙利算法&模板O(mn)HDU2063

    #include<cstdio> #include<cstring> #define maxn 510 using namespace std; int k,g,b,x,y,a ...

  2. spring+hibernate单元测试案例

    1,maven创建web工程 2,导入相关依赖 pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmln ...

  3. dos编辑文件上传到unix系统多余^M删除方法

    linux上的文件sz到window编辑后多出^M, 方法一: 1.grep -anR '^M' filename |wc -l2.crontab -e 或vim filename3.:set ff  ...

  4. HDU6669 Game(思维,贪心)

    HDU6669 Game 维护区间 \([l,r]\) 为完成前 \(i\) 步使用最少步数后可能落在的区间. 初始时区间 \([l,r]\) 为整个坐标轴. 对于第 \(i\) 个任务区间 \([a ...

  5. 【MM系列】SAP SAP的账期分析和操作

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[MM系列]SAP SAP的账期分析和操作   ...

  6. c语言自带的排序与查找

    qsort与bsearch qsort(元素起始地址,元素总数,单个元素的大小,比较函数) bsearch(key元素地址,元素起始地址,元素总数,单个元素的大小,比较函数) 比较函数: 原型为int ...

  7. 07 (H5*) js课程第8天 高阶函数、闭包、沙箱

    目录: 1:call和apply方法调用 2:bind方法复制 3:函数中的几个属性值 4:高阶函数,函数作为参数 5:高阶函数,函数作为返回值. 6:   作用域链,作用域,预解析 7:闭包--延长 ...

  8. mybatise根据list参数查询

    where id in<foreach item="item" index="index" collection="map.idList&quo ...

  9. 《JAVA设计模式》之组合模式(Composite)

    在阎宏博士的<JAVA与模式>一书中开头是这样描述合成(Composite)模式的: 合成模式属于对象的结构模式,有时又叫做“部分——整体”模式.合成模式将对象组织到树结构中,可以用来描述 ...

  10. 任务调度(02)Spring Schedule

    任务调度(02)Spring Schedule [toc] Spring 3.0 提供两种任务调度方式:一是定时任务调度:二是异步任务调度.这两种任务调度方式都是基于 JUC 实现的,是一种非常轻量级 ...